1 2007-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * UI/SOGoElements/SOGoIEConditional.m: new extension module class
4 to handle "<var:if-ie>" template tags.
6 * UI/SOGoElements: new extension bundle containing sogo-specific
9 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
10 -takeValuesFromRequest:_rqinContext:_ctx]): save the category
11 selected in the dialog.
12 ([UIxComponentEditor -setComponent:newComponent]): retrieve the
13 first category, if ever, of the calendar entity.
15 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
16 -composeAction]): restored method since it is needed by the
19 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
20 -composeAction]): the address fields should be arrays and not
23 * UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
24 that returns the build date of SOGo in the template.
26 2007-08-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
28 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
29 -_flattenedRecords:records]): when the c_cn field is empty,
30 returns set a formatted string with the concatenation of
31 c_givenname and c_sn as the displayName.
33 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
34 -isValidMailAccountName:_key]): prevent unknown accounts from
37 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
38 -pathToAttachmentObject]): we no longer need the filename
39 extension for SoLookup...
41 * SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
42 -lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
43 filename to have an extension, and thus accept any filename.
45 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
46 -currentCName]): new method that returns the c_name of the
47 contact, correctly escaped to be passed by url afterwards.
49 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
50 ([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
51 instance of [self decodedFlatContent] instead of the buggy
52 NSString from [super flatContentAsString] to the parser.
54 2007-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
56 * UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
57 new category method to reponds to the "delete" web command on
59 ([UIxMailActions -deleteAttachmentAction]): new category method to
60 reponds to the "deleteAttachment" web command on drafts, taking
61 the "filename" url parameter into account.
63 * SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
64 -contentForEditing]): new method that retrieve the editable mail
66 ([SOGoMailObject -fetchFileAttachmentKeys]): new method that
67 returns the body keys for attached files (parts with a "filename"
70 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
71 -asQPSubjectString:encoding]): do not change the string if the
72 encoded string has the same length (which means it is already
74 ([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
75 that retrieve a draft along with its attachments for editing.
76 ([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
77 choke if the "to" header field is empty.
78 ([SOGoDraftObject -delete]): new method to delete the draft folder
79 whenever operations are done.
81 2007-08-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
83 * UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
84 useless stub method, of which the intention was implemented in
86 ([-lookupSentFolderUsingAccount]): removed obsolete method.
87 ([-selectedMailIdentity]): removed obsolete method.
88 ([-lookupSentFolderUsingFrom]): removed obsolete method.
89 ([-storeMailInSentFolder:_path]): removed obsolete method, of
90 which the mechanism has been put in -[SOGoDraftObject sendMail]
92 ([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
93 ([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
94 adapted algorithms to the new SOGoDraftObject methods.
95 ([-deleteAction]): removed method since local draft objects cannot
96 be removed by the user.
98 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
99 -expungeAction]): new method replacing the one previously found in
101 ([UIxMailFolderActions -createFolderAction])
102 ([UIxMailFolderActions -renameFolderAction])
103 ([UIxMailFolderActions -deleteFolderAction])
104 ([UIxMailFolderActions -emptyTrashAction])
105 ([UIxMailFolderActions -subscribeAction])
106 ([UIxMailFolderActions -unsubscribeAction]): error situations
107 should have http return code 500 instead of 403.
109 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
110 -composeAction]): new method replacing the one previously in
113 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
114 -imap4URLString]): removed overriden method (see below).
116 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
117 cache the mailbox acl.
118 ([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
119 ([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
121 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
122 the new method of determining the users mail accounts.
124 * SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
125 longer adds a "/" at the end of the string (the default for
126 folders), therefore this will be overriden in SOGoMailFolder
127 rather than in SOGoMailObject.
129 * UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
130 method, moved into the new UIxMailActions module class.
132 * SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
133 -newDraft]): new method that returns a new SOGoDraftObject
134 instance with a unique filename based on the current timestamp and
135 the "newDraft" prefix.
137 -lookupName:nameinContext:localContextacquire:acquire]): overriden
138 method by detecting local drafts with their "newDraft" prefix.
139 ([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
141 * SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
142 from scratch by making it a subclass of SOGoMailFolder.
144 * UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
147 * UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
150 * UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
153 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
154 new method, initializing the new ivars: IMAP4ID, headers, text,
155 sourceURL and sourceFlag.
156 ([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
157 ([-_ensureUserSpoolFolderPath])
158 ([-saveMimeMessageToTemporaryFileWithHeaders:])
159 ([SOGoDraftObject -mimeMessageWithHeaders:_headers])
160 ([-deleteTemporaryMessageFile:], [-delete], [-content])
161 ([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
162 ([-uid], [-flags], [-size], [-envelope]): removed methods.
163 ([SOGoDraftObject -storeInfo]): rewrote method to take the new
165 ([SOGoDraftObject -setSourceURL:newSourceURL])
166 ([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
167 methods to store the url of the original message between accesses
168 so that, depending on the action taken (forward or reply), the
169 correct flag can be given.
170 ([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
171 the imap4 id that is returned for the message whenever it is saved
172 into the drafts folder.
173 ([SOGoDraftObject -save]): new method that takes in charge the
174 saving of the message in the IMAP drafts folder.
175 ([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
176 new method that fills the original data of the new message with
177 the reply content of the original message.
178 ([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
179 above for message forwarding.
180 ([-spoolFileManager]): removed useless method (only returned the
181 default filemanager...)
182 ([SOGoDraftObject -mimeMessageAsData]): new method that returns
183 the resulting message as an NSData chunk.
185 * SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
186 containing a rewrite of the mail action methods found in
187 UI/Mailer/, that needed to be put in the SOGoMailObject class.
188 ([SOGoMailObject -subjectForReply]): new method that returns a
189 subject suitable for replies.
190 ([SOGoMailObject -contentForReply]): new method that returns the
191 textual content of an email, quoted for replying.
192 ([SOGoMailObject -filenameForForward]): new method that returns
193 the name of the filename that should contain the forwarded
194 message, based on its subject.
195 ([SOGoMailObject -subjectForForward]): explicit.
197 2007-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
199 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
200 -mailAccounts]): rewrote method to return the name of the mail
201 accounts now available with the -[SOGoUser mailAccounts] method.
202 ([UIxMailMainFrame -showLinkBanner]): removed method.
203 ([UIxMailMainFrame -bannerToolbarStyle]): removed method.
204 ([UIxMailMainFrame -bannerConsumeStyle]): removed method.
205 ([UIxMailMainFrame -rootURL]): removed method.
206 ([UIxMailMainFrame -userRootURL]): removed method.
207 ([UIxMailMainFrame -calendarRootURL]): removed method.
208 ([UIxMailMainFrame -contactsRootURL]): removed method.
209 ([UIxMailMainFrame -hasErrorText])
210 ([UIxMailMainFrame -errorText])
211 ([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
212 ([-composeAction]): removed method. Now provided by
213 UIxMailAccountActions.
214 ([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
215 ([UIxMailMainFrame -hideFolderTree]): removed method.
216 ([UIxMailMainFrame -treeRootClassName]): removed method.
217 ([UIxMailMainFrame +initialize]): removed method.
218 SOGoMailTreeRootClass userdefaults will no longer have any effect.
220 * UI/Common/WODirectAction+SOGo.m ([WODirectAction
221 -redirectToLocation:newLocation]): new method that implements the
222 same functionality as WOComponent.
224 * UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
226 * UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
227 method that returns whether the current mail is store in the
228 drafts folder hierarchy.
230 * SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
231 ([-primaryEmail]): removed method.
232 ([SOGoUser -primaryIMAP4AccountString]): removed method.
233 ([SOGoUser -mailAccounts]): new method that returns an array
234 containing description dictionaries for all the user mail
235 accounts. Each account also contain the user's identities for that
237 ([SOGoUser -allIdentities]): new utility method that returns all
238 the user identities on all accounts.
239 ([SOGoUser -primaryIdentity]): new method return the first
240 identity of the first account.
242 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
244 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
245 -isInDraftsFolder]): returns NO.
246 ([-preferredIdentity]): removed method, replaced with -[SOGoUser
248 ([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
250 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
251 -isInDraftsFolder]): new method that detects if self is contained
252 by the drafts folder by calling itself on the container object.
254 * SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
256 ([-fetchIdentitiesWithEmitterPermissions]): removed method.
257 ([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
258 return the name of the mail accounts now available with the
259 -[SOGoUser mailAccounts] method.
261 * SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
264 * SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
267 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
268 -keysWithFormat:format]): method that forward the method of the
269 same name to each member of the array, considering they all are
270 instances of NSDictionary.
271 ([NSArray -objectsForKey:key]): same principle as above.
272 ([NSArray -flattenedArray]): new method that transforms an array
273 of arrays into a single array containing all the elements of the
276 * SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
277 -keysWithFormat:keyFormat]): new method inspired by the python
278 string formatting system and which replaces occurences of "%{key}"
279 by the corresponding keys.
281 2007-08-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
283 * Main/SOGo.m ([SOGo -run]): check for channel-type specific
284 sql script before the generic one when initializing mandatory
287 2007-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
289 * SoObjects/SOGo/NSString+Utilities.m ([NSString
290 -pureEMailAddress]): new utility method inspired by the
291 "_rawSender" private method in SOGoDraftObject, which it now
294 * SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
295 provides a common API for sending emails, no matter what the
298 2007-08-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
300 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
301 -quotasAction]): invoke "relativeImap4Name" instead of
302 "nameInContainer" since the latter also returns the "folder"
305 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
306 -listMailboxesAction]): declare the output as text/plain in UTF-8.
308 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
309 -deleteFolderAction]): fixed the url of the destination folder.
311 * Main/SOGo.m ([SOGo +initialize]): show the build date and
314 2007-08-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
316 * SoObjects/Appointments/SOGoCalendarComponent.m
317 ([SOGoCalendarComponent
318 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
319 set the mail date to the current date string returned by our
320 rfc822DateString extension method.
322 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
323 -_gcsFoldersFromFolder:): ignore the personal folders who are
324 returned but don't really exist.
326 2007-08-02 Francis Lachapelle <flachapelle@inverse.ca>
328 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
329 has to return only one element.
331 2007-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
333 * UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
334 -content]): new method returning the decoded content of the
335 corresponding attachment as an NSData instance.
336 ([UIxMailPartViewer -filename]): if the "filename" parameter of
337 the metadata parameterList is empty, try to find out the filename
338 from the "disposition" metadata returned with the BODYSTRUCTURE
341 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
342 -composeAction]): prefix the INBOX folder with "folder".
344 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
345 -relativeImap4Name]): return nameInContainer stripped from its
346 first 6 characters since all folder names are prefixed with
349 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
350 -imap4URLString]): invoke -relativeImap4Name instead of
351 "nameInContainer" since the former will return the fixed IMAP4
352 foldername and the latter the SoObject name.
354 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
355 +initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
357 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
358 ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
359 ([SOGoMailAccount -sieveFolderNameInContext:_ctx])
360 ([SOGoMailAccount -sentFolderNameInContext:])
361 ([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
363 ([SOGoMailAccount -inboxFolderInContext:_ctx])
364 ([SOGoMailAccount -sentFolderInContext:_ctx])
365 ([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
366 the folder names with "folder" since they are prefixed earlier.
368 2007-07-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
370 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
371 ([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
372 all starts with "folder".
374 * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
375 longer declare security info from here.
377 * SoObjects/Mailer/SOGoMailFolder.m
378 ([-isMessageKey:_keyinContext:_ctx]): removed useless method.
379 ([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
380 folder names now always start with "folder".
382 * SoObjects/Mailer/SOGoMailAccount.m
383 ([-lookupName:inContext:acquire:]): folder names now always start
386 2007-07-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
388 * UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
389 -forwardAction]): adapted to the new saveAttachment:withMetadata:
392 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
393 code to save the attached filenames with the filename returned by
394 the web server as well as their mime types.
396 * UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
397 ([UIxMailPartMessageViewer -toAddresses])
398 ([UIxMailPartMessageViewer -ccAddresses]): new methods returning
399 the corresponding fields separated with a ", " (if needed).
401 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
402 -saveAttachment:_attachwithMetadata:metadata]): new method
403 replacing -saveAttachment:withName: and which takes a dictionary
404 as parameter with the filename and the mime type of the
406 The mimetype is then saved in a hidden text file.
407 ([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
408 take the mime type from the hidden text file related to the
411 * SoObjects/Contacts/SOGoContactGCSFolder.m ()
412 ([SOGoContactGCSFolder
413 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
414 return records if the db records are > 0 and not just > 1...
416 2007-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
418 * UI/Contacts/UIxContactsListView.m ([-displayName]): removed
420 ([UIxContactsListView -defaultSortKey]): changed to "displayName".
422 * SoObjects/Contacts/SOGoContactLDAPFolder.m
423 ([SOGoContactLDAPFolder
424 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
425 translate the returned records to a normalized form.
427 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
428 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
429 translate the returned records to a normalized form.
431 * UI/Scheduler/UIxCalListingActions.m,
432 UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
433 SoObjects/SOGo/AgenorUserDefaults.m,
434 SoObjects/Contacts/SOGoContactGCSFolder.m,
435 SoObjects/Appointments/SOGoAppointmentFolder.m,
436 OGoContentStore/OCSiCalFieldExtractor.m,
437 OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
438 table fields with "c_".
440 2007-07-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
442 * SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
443 the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
444 the application settings. If set, both limit will influence the
445 maximum size of the resultsets and the time taken to solve them.
446 ([LDAPSource -_initLDAPConnection]): initialize the limits.
448 2007-07-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
450 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
451 method that declares the DAV namespace related to CardDAV.
452 ([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
453 method that declares the "access-control" and "addressbook-access"
456 * SoObjects/Appointments/SOGoAppointmentFolder.m
457 ([-lookupActionForCalDAVMethod:]): removed method.
458 ([SOGoAppointmentFolder -davNamespaces]): added new overriden
459 method that declares the DAV namespace related to CalDAV.
461 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
462 optional method for subclasses which handle specific extensions to
463 the DAV protocol: CardDAV or CalDAV.
465 -lookupName:lookupNameinContext:localContextacquire:acquire]):
466 new overriden method that handles dav invocations for extensions
467 to DAV by returning an appropriate SoSelectorInvocation.
469 * SoObjects/SOGo/NSString+Utilities.m ([NSString
470 -asDavInvocation]): new method returning a dictionary with a "ns"
471 key representing the dav namespace and a "method" key representing
472 the dav method name of the request.
474 * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
475 +initialize]): scan the value of SOGoUIxUserCanChangePassword.
477 ([UIxPreferences -shouldDisplayPasswordChange]): new template
478 method that returns the value of SOGoUIxUserCanChangePassword.
480 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
481 scan the value of SOGoUIxDefaultModule. If not set, the default
482 module defaults to "Calendar".
483 ([SOGoUserHomePage -defaultAction]): redirect the user to the
484 value of "SOGoUIxDefaultModule".
486 2007-07-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
488 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
489 -contactInfos]): cache the results to avoid multiple invocations.
491 * SoObjects/Contacts/SOGoContactLDAPFolder.m
492 ([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
493 really should return something or if we fake to return nil...
495 2007-07-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
497 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
498 acceptAnyUser to YES only when the SOGoAuthentificationMethod user
499 default is set to "bypass".
501 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
502 -checkLogin:_loginpassword:_pwd]): accepts unverified connections
503 when authMethod is set to "bypass" from now on. This would avoid a
504 security concern with a default installation of SOGo.
505 AuthentificationMethod is now prefixed with "SOGo" for better
508 2007-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
510 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
511 -quotasAction]): new method that returns a json representation of
514 2007-07-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
516 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
517 -imap4URL]): rewrote method to support accented mailbox names.
518 ([SOGoMailBaseObject imap4Password]): rewrote to simply use
519 SOGoAuthenticator's passwordInContext:.
521 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
522 -takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
523 start and due dates to nil if hasStartDate and hasDueDate are
526 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
527 -passwordInContext:context]): made method public.
529 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
530 -extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
531 to false to avoid a null violation.
533 2007-07-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
535 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
536 -contentAsString]): returns the message encoded in ISO Latin 1
539 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
540 SOGoSuperUsername user defaults.
541 ([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
543 ([SOGoUser -rolesForObject:objectinContext:context]): if the
544 current user is the superuser, grant him/her the "owner" role.
546 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
547 the folder only if the current user is the owner of the future
550 * SoObjects/Appointments/SOGoCalendarComponent.m
551 ([SOGoCalendarComponent -contentAsString]): we return the content
552 based on the permissions returned by the security manager instead
553 of by looking at the user roles.
555 * SoObjects/Appointments/SOGoAppointmentFolder.m
556 ([SOGoAppointmentFolder -calendarFolders]): read the calendar
557 folders of the user to whom this folder belongs instead of the
558 active user. This way, a delegate user will be able to have the
559 same view that the original user has if he connects from his user
562 * Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
563 user exists before creating the SOGoUserFolder instance. If not,
566 * UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
567 return the message source code in plain text.
569 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
570 -contentAsString]): returns the message encoded in UTF8.
572 2007-07-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
574 * OGoContentStore/iCalRepeatableEntityObject+OCS.m
575 ([iCalRepeatableEntityObject -cycleInfo]): no longer take the
576 leading tagname into account when serializing the element values.
578 * Main/SOGoProductLoader.m: only load bundle directories ending
579 with the "SOGo" extension.
582 -_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
583 result set if the query has caused no exception. Otherwise we get
584 an "evaluation is in progress exception".
586 2007-06-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
588 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
589 -generateSQLForInsert]): initialize error to nil before the
590 serialization. Otherwise the method can get confused if it ever is
591 initialized to something else.
593 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
594 -folderIsMandatory]): returns NO unconditionnally.
596 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
597 -appendPersonalSources]): add the "personal" folder to the list of
598 user folders even if it doesn't exist, so that it is created when
599 the user accesses it.
601 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
602 -folderIsMandatory]): returns YES if nameInContainer is set to
603 "personal", which is the default address book.
605 * SoObjects/Appointments/SOGoAppointmentFolder.m
606 ([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
607 users must have one Calendar folder (one and only one).
608 ([SOGoAppointmentFolder -_privacySqlString]): unescape the
609 escaping '\' so make the carriage return a real one. This way,
610 PgSQL 8 won't complain about escaping the string.
612 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
613 method that create the folder if considered mandatory.
614 ([SOGoFolder -folderIsMandatory]): new method that determines
615 whether the folder should be created automatically or not. To be
616 overriden by subclasses.
618 * Main/SOGo.m ([SOGo -run]): override method and create the
619 missing system tables if needed.
621 2007-06-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
623 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
624 -mailDateFormatter]): returns the user's date formatter.
626 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
627 applies the user timezone to the date object before returning it.
629 * UI/Common/UIxSortButton.m: removed useless class module.
631 * UI/Common/UIxSortableTableHeader.m: removed useless class
634 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
635 -contactInfos]): use the "asc" url parameter instead of "desc" to
636 determine the ordering.
637 ([-sortOrdering]): removed method.
638 ([UIxContactsListView -init]): removed the "searchText" ivar.
639 (general): the template no longer use the UIxSortableTableHeader
642 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
643 -defaultSortKey]): default sort following the messages arrival
644 instead of their date.
645 ([-isSortedDescending]): removed method.
646 ([-imap4SortOrdering]): use the "asc" url parameter instead of
647 "desc" to determine the ordering.
648 (general): the template no longer use the UIxSortableTableHeader
651 2007-06-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
653 * UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
655 ([-setQualifier:_msg], [-qualifier]): removed methods.
656 ([UIxMailListView -defaultAction]): added code to handle the
657 search criteria and value passed as url parameters. Also, we now
658 handle the same search criterias as Thunderbird/Icedove.
660 2007-06-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
662 * UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
663 -jsonDefaultsAction]): bug fix: returns a WOResponse instance with
664 the string instead of the string itself.
665 ([UIxJSONPreferences -jsonSettingsAction]): same as above.
667 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
668 bool var "acceptAnyUser" that is set when the AuthenticationMethod
670 ([SOGoUser -initWithLogin:newLoginroles:newRoles]):
671 unconditionnally returns an instance whenever acceptAnyUser is set.
673 2007-06-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
675 * Main/sogod.m (main): prevent SOGo from running as root.
677 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
679 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
680 -setCurrentPassword:newPassword]): new stub method.
681 ([SOGoUser -dateFormatterInContext:context]): new method that
682 returns an instance of SOGoDateFormatter configured based on the
685 * UI/Common/UIxPageFrame.m ([UIxPageFrame
686 -relativePreferencesPath]): new method.
688 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
689 removed useless method.
691 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
692 different configurable formats (long and short date + time).
694 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
696 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
697 -isInternetRequest]): removed method.
699 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
700 -jsonRepresentation]): new method with an explicit name.
702 * UI/PreferencesUI/product.plist: new bundle that provides a web
703 ui for handling user defaults.
705 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
707 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
709 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
711 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
713 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
715 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
717 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
718 -compareEventsAscending:otherEvent]): no longer use compare: on
719 the time objects since one of them could be an NSNull, which
720 crashes when comparing with anything.
722 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
723 -eventsListAction]): sort events from here.
724 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
726 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
727 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
729 * SoObjects/Appointments/SOGoAppointmentFolder.m
730 ([SOGoAppointmentFolder
731 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
732 no longer sort elements from here.
734 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
736 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
737 -aclsForUser:uid]): implemented method by forwarding the request
738 to the container. This fixes a bug where users could no longer
739 read emails from shared folders.
741 * SoObjects/Appointments/SOGoCalendarComponent.m
742 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
743 here, but rather in its parent class.
745 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
746 -stringForSecondsSinceThe70s:seconds]): new utility method.
748 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
749 -eventsListAction]): no longer reduce the end day of one day for
750 all day events since everything has been fixed in
751 OCSiCalFieldExtractor.
753 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
754 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
755 the end date of all day events of 1 so that they stay on their
758 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
760 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
762 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
764 ([-fetchCoreTasksInfos]): removed method.
766 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
767 -init]): initialize an instance of SOGoDateFormatter.
768 ([UIxCalListingActions -eventsListAction]): the display start and
769 end dates are added to the listing for each event.
771 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
773 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
774 -isAllDay]): returns YES if the "hm" url parameter is set to
776 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
777 is displayed one day earlier.
779 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
781 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
782 -_setupContext]): take the range of dates specified by the popup
785 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
786 WODirectAction that returns WOResponse objects with the events or
787 todos satisfying the parameters passed in the url.
789 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
790 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
791 "isAllDay" into account and compute the amount of days to pass to
794 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
796 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
797 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
798 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
799 new method that returns a json-formatted array of the visible tasks
800 for the current user.
802 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
804 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
805 object must be present in the list of UIDs we delete the object
806 from. Otherwise Calendar objects having no organizer and no
807 attendees will remain in their owner's Calendar.
809 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
810 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
811 first 3 elements of the path array if the url returned by
812 baseURLInContext: returns a hostname.
814 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
815 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
816 nil, in which case a crash happens when calling hasPrefix:.
817 ([SOGoMailFolder -_sharesACLs]): same as above.
818 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
819 otherUsersFolderName is nil, we return nil.
820 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
821 nil from [self otherUsersPathToFolder], we return nil too.
823 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
825 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
826 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
827 the result of [self baseURLInContext:] to avoid a double escaping
828 in the resulting string.
830 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
831 the user has the "ObjectReader" role on the parent container, then
832 he is granted the "ObjectViewer" role on this object. Same for
833 "ObjectEraser", although this might change later.
835 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
836 -toolbar]): determine the toolbar filename based on the
837 permissions declared by the securitymanager. The role mechanism
838 has been adjusted on a lowerlevel so we can simplify the code.
840 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
841 -initWithName:newNameinContainer:newContainer]): read the content
842 directly from here. That way we can determine whether the object
844 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
845 the ObjectCreator role is enabled, we also grant the ObjectEditor
846 role to the current user.
848 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
849 changed the method paradigm to only return HTTP code 204. Not test
850 is done whatsoever since the security manager does it for us.
852 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
853 removed method because the same exists in UIxFolderActions.m
855 * UI/Contacts/UIxContactsUserRightsEditor.m
856 ([UIxContactsUserRightsEditor
857 -setUserCanReadObjects:userCanReadObjects]): new method.
859 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
860 "FolderEraser" and special permission "Access Object". Removed
861 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
862 can be used instead. Removed "FolderReader" since it is useless.
864 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
865 -vCard]): directly use the "content" ivar since it is initialized
866 during object creation.
868 * SoObjects/Contacts/SOGoContactLDAPFolder.m
869 ([SOGoContactLDAPFolder -init]): no longer handle the
870 nameInContainer no the container ivars. They were removed because
871 this class is a descendant of SOGoObject which already has them.
872 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
873 returning "displayName".
874 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
877 * SoObjects/Appointments/SOGoCalendarComponent.m
878 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
879 ([SOGoCalendarComponent -findParticipant:user]): new name for
880 method "participant:".
881 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
882 findparticipant but taking a uid string as parameter.
883 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
884 iCalendar automatically. Instead, this is done only when the user
885 is a "date and time viewer".
886 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
887 (modifier and responder) into account by compiling them with the
890 * SoObjects/Contacts/SOGoContactFolder.h: removed
891 "nameInContainer" from the list of required methods.
893 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
894 -davContentType]): returns "text/calendar".
896 * SoObjects/Contacts/SOGoContactLDAPFolder.m
897 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
898 groupdav resource-type.
900 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
901 -davContentType]): same as below.
903 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
904 -initWithName:newNameinContainer:newContainer]): new overriden
905 method setting the custom owner directly.
907 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
908 -davContentType]): same as below.
910 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
911 -davContentType]): same as below.
913 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
914 declare "httpd/unix-directory".
916 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
917 "UTC" as fallback timezone instead of "Canada/Eastern".
918 ([-hasEmail:email]): make use of the new NSArray's
919 containsCaseInsensitiveString: method.
921 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
922 -davContentType]): declare "message/rfc822" as content type.
924 * SoObjects/Appointments/SOGoAppointmentFolder.m
925 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
927 ([SOGoAppointmentFolder
928 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
929 ([-fetchContentObjectNames]): commented out method since it was
930 usefull only for testing Funambol.
932 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
933 -containsCaseInsensitiveString:match]): an enhanced version of
936 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
938 ([-showMarkDeletedButton]): removed useless method.
939 ([-showTrashButton]): removed useless method.
941 * SoObjects/Appointments/iCalEntityObject+SOGo.m
942 ([iCalEntityObject -userIsParticipant:user]): new proxy method
943 that invoked isParticipant on self for each possible email
944 addresses of the user passed as parameter.
945 ([iCalEntityObject -userIsOrganizer:user]): same as above.
947 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
950 * SoObjects/Appointments/SOGoAppointmentObject.m
951 ([SOGoAppointmentObject
952 -saveContentString:contentStringbaseVersion:baseVersion]): remove
953 method since an event may not have an organizer.
955 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
956 -GETAction:localContext]): clarified method. Added support for
957 content-type (thanks to Helge Hess).
958 ([SOGoObject -initWithName:_nameinContainer:_container]):
959 initialize and retain the owner.
960 ([SOGoObject -davContentType]): returns "text/plain".
962 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
964 * UI/Common/UIxObjectActions.m ([UIxObjectActions
965 -addUserInAclsAction]): send an acl addition mail.
966 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
969 * UI/Common/UIxFolderActions.m ([UIxFolderActions
970 -_realActionWithFolderName:folderDict]): handle the possible
971 presence of the "mail-invitation" url parameter. If present, the
972 user will be redirected to the relevant folder.
974 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
975 ([SOGoUser -language]): new method that returns the user's
976 preferred language, or the system's if none has been set yet.
978 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
979 that returns the full dav url to self.
980 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
981 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
982 returns the full so url to the base of the SOGo module to which
983 self belongs, and for the specified user.
984 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
985 but for the current user.
986 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
987 required by the acl advisory templates and which returns a link
988 the target user can click to activate its new subscription.
989 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
990 but for inclusion of the application/x-sogo-notification part,
991 which will be handled by the Lightning enhancer plugin.
993 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
994 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
995 do nothing yet since imap folder subscription is not handled yet.
997 * SoObjects/SOGo/SOGoContentObject.m
998 ([-hasSupportForDefaultRoles]): removed method.
1000 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1001 -getFullEmailForUID:uid]): new method that returns the username +
1004 * SoObjects/Appointments/SOGoCalendarComponent.m
1005 ([SOGoCalendarComponent +initialize]): the default language for
1006 mail templates is now set to English.
1008 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
1009 SOGoACLAdvisory implementing the french template for user removal
1012 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
1013 SOGoACLAdvisory implementing the french template for user
1016 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
1017 SOGoACLAdvisory implementing the english template for user removal
1020 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
1021 SOGoACLAdvisory implementing the english template for user
1024 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
1025 supercall of all the acl advistory templates. The model is based
1026 on SOGoAptMailNotification except that the template encapsulates
1027 the message to be sent. Later, we might create a superclass common
1028 to all template-based emails.
1030 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1031 -addRange:newRange]): new method that store a string
1032 representation of the NSRange passed as parameter.
1033 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
1034 any range contained in self intersect with the one passed as parameter.
1036 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
1037 store ranges in an array to prevent them from intersecting with
1038 each other during the passes.
1040 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1042 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1043 -primaryFetchMailboxInfo]): useless method. Removed.
1045 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1047 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1048 -toManyRelationshipKeys]): invoke [self subfolders].
1049 ([SOGoMailFolder -subfolders]): new method containing what used to
1050 be in toManyRelationshipKeys.
1051 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
1054 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1055 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
1056 named and at the beginning of which we put the predefined folders.
1058 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1059 -emptyTrashAction]): new method inspired by a similar one from
1060 UIxMailListView, to which we added the ability to remove
1063 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
1064 method. Replaced with a similar one in UIxMailFolderActions.
1066 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1067 -renameFolderAction]): implemented method.
1068 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
1069 specified folder. Instead, we put it in the trash folder.
1071 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
1072 method, replaced with a similar method in the new
1073 UIxMailFolderAction class module.
1074 ([-deleteFolderAction]): idem.
1076 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
1077 -createFolderAction]): new method implementing subfolder creation.
1078 ([UIxMailFolderActions -renameFolderAction]): new method
1079 implementing subfolder renaming (basic implementation to be
1081 ([UIxMailFolderActions -deleteFolderAction]): new method
1082 implementing folder deletion.
1084 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
1085 web actions related to the handling of imap folder.
1087 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1089 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1090 -ownerInContext:localContext]): overriden method because we are an
1091 IMAP4 client and we need a bit more intelligence to deduce the
1092 owner of the current folder.
1093 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
1094 return an NSException so we need to be careful here to avoid a
1096 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
1097 NSException so we need to be careful here to avoid a crash.
1099 * SoObjects/Mailer/SOGoMailAccounts.m
1100 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
1101 there is no longer any concept of Intranet or Internet connection
1104 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1105 -sharedFolderName]): new method.
1106 ([SOGoMailAccount -otherUsersFolderName]): new method.
1108 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
1109 new javascript code and the new UIxMailAccountActions class.
1111 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
1112 javascript code and the new UIxMailAccountActions class.
1114 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
1115 new javascript code and the new UIxMailAccountActions class.
1117 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
1118 -listMailboxesAction]): new method that returns a json-formatted
1119 tree of all the mailboxes available to the current user.
1121 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
1122 web actions related to the handling of mail accounts.
1124 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
1127 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
1128 -jsonRepresentation]): new interface method meant to be overriden
1129 by the primitive classes.
1131 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1133 * UI/MailerUI/UIxMailSplashView.m: removed.
1135 * SoObjects/Appointments/SOGoCalendarComponent.m
1136 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
1137 the uid to the list only when the user email is recognized by the
1140 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1142 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1143 -isDeletionAllowed]): completed method with the new imap acl api.
1145 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
1148 * SoObjects/SOGo/SOGoPermissions.m: added the new role
1149 "SOGoMailRole_MessageEraser".
1151 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
1152 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
1153 "defaultUserID" method into account.
1155 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
1156 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
1157 "defaultUserID" method into account.
1159 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
1160 methods to support the IMAP acls mentionned in the RFC 4314,
1161 removed the ones specific to Cyrus.
1163 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
1164 mandatory method for subclasses. Removed the SOGoDefaultUserID
1167 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
1168 overriden method to return @"<default>".
1170 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1171 -defaultUserID]): overriden method to return @"<default>".
1173 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
1174 -aclsForUser:uid]): overriden method.
1175 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
1176 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
1177 ([SOGoMailFolder -defaultUserID]): overriden method.
1178 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
1180 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1182 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1183 -aclUsersForObjectAtPath:objectPathArray]): new method that being
1184 forwarded the calles to aclUsers for the GCS-based subclasses of
1187 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
1188 methods that would have been used to support IMAP acls. Replaced
1189 them with the new protocol for them that has been implemented in
1190 SOGo during the last few weeks.
1192 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1193 -hasSupportForDefaultRoles]): override method by returning "YES".
1195 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
1196 -addObjectUniquely:object]): new method with an explicit name.
1198 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
1199 "acl" to "aclUsers". Now designed to return only the uid of the
1200 users involved in an ACL.
1201 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
1202 "NO" by default. To indicate to the acl editor that we don't want
1203 to handle a default user.
1205 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
1206 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
1209 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
1210 provides a view to the IMAP acls.
1212 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
1214 * UI/WebServerResources/MailerUI.js: replaced all invocations of
1215 addEventListener to the use of prototype's Event object. Also,
1216 configured all menus programmatically following descriptions lists
1217 containing their callbacks, or nulls, submenus id or separators.
1219 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1221 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1222 -addUserInAclsAction]): save the previous roles of the user
1223 (unlikely) or the default roles, or None instead of saving the
1224 roles that should appear the first time in the role editor when no
1225 default has been set...
1227 * SoObjects/SOGo/SOGoObject.m: defined a new constant
1228 "SOGoDefaultUserID".
1230 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1231 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
1232 ignore the "AuthorizedSubscriber" role and add the "None" role
1233 when no other role is found.
1235 * UI/Common/UIxAclEditor.m: added a button for the new default
1238 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1239 -_initRights]): don't take the "None" role into account when
1240 initializing the list of current roles.
1242 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
1245 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1247 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1248 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
1249 There is no need to subscract the start from the length if a space
1250 is not found since the range has not changed either. Finally, the
1251 first character before the url might also be a tab or a cr, so we
1252 match it against the "urlAfterEndingChars" custom NSCharacterSet.
1253 ([NSString -stringByDetectingURLs]): modified to handle email
1254 addresses and add a correct "mailto:" link.
1256 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1258 * SoObjects/Appointments/SOGoAppointmentFolder.m
1259 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
1260 method to return the events in the range of 2 weeks ago up to 4
1263 * UI/MailPartViewers/UIxMailPartTextViewer.m
1264 ([UIxMailPartTextViewer -flatContentAsString]): use the new
1265 "stringByDetectingURLs" method to offer clickable urls.
1267 * SoObjects/SOGo/NSString+Utilities.m ([NSString
1268 -stringByDetectingURLs]): this new method replaces passive URLS
1269 with active ones for HTML resolution of the text.
1271 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1273 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1274 -asQPSubjectString:encoding]): simplified method.
1275 The headers indicates "utf-8" again thank to our fix in
1278 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
1281 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1283 * UI/Common/UIxObjectActions.m ([UIxObjectActions
1284 -removeUserFromAclsAction]): implemented this method which was
1285 missing and is required to remove users from ACLs.
1287 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1288 -subscribeAction]): folderDict was not autoreleased, resulting in
1291 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1292 -primaryFetchProfile]): when building with libFoundation, don't
1293 use the "propertyList" method from NSString. Rather, we convert
1294 the string to an NSData instance and passit as parameter to
1295 NSDeserializer. This way, we obtain a mutable dictionary rather
1296 than an immutable one.
1298 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
1299 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
1300 constant string "contentTypeValue".
1301 contentTypeValue is now set back to iso-8859-1 since NGMime
1302 converts extracts the data in that encoding.
1304 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1306 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1307 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
1308 "bindFields" value is present in the user defaults, use the
1309 specified fields to find the dn of the user to bind.
1310 ([LDAPSource -allEntryIDs])
1311 ([LDAPSource -fetchContactsMatching:match])
1312 ([LDAPSource -lookupContactEntry:entryID])
1313 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
1314 bind and unbind the connection on each request.
1316 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
1318 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1319 -contactSearchAction]): simplified method to use the facilities
1320 provided by the LDAPUserManager. No longer takes care of the
1321 "ldap-only" url parameter since all requests are handled by the
1324 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1325 -primaryFetchProfile]): check that the value returned is not null
1326 before interpreting it.
1328 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
1329 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
1330 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
1331 system email is already present, remove it before adding it.
1333 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
1334 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
1335 loginToCheck is not empty.
1336 ([LDAPSource -fetchContactsMatching:match]): check that match is
1338 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
1340 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
1343 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1345 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
1347 ([SOGoUser -systemEmail]): returns the email formed from the
1348 username and the default mail domain.
1349 ([SOGoUser -hasEmail:email]): test whether the user has the
1350 specified email, in a case-insensitive way.
1352 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1353 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
1354 check login information.
1356 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1357 ([SOGoContactLDAPFolder
1358 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
1359 no longer manage LDAP connections. The requests are forwarded to
1360 the relevant LDAPSource instead.
1362 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1363 -appendSystemSources]): pass LDAPSource objects to
1364 SOGoContactLDAPFolder instances.
1366 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
1367 address of the "from" field before sending the message. Otherwise,
1368 sending the mail won't work.
1370 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
1371 rewrote this method to request all the available email identities
1372 for the current user. Also, the from field also contains the full
1373 name of the user, not just his/her email address.
1375 * SoObjects/Appointments/SOGoCalendarComponent.m
1376 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
1377 from the previous module iCalEntityObject+Agenor.
1378 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
1379 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
1382 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
1383 replacing the SOGoContactLDAPEntry module. It was renamed as such
1384 because it now receives a dictionary instead of an NGLdapEntry.
1385 It thus can now handle data from any source of LDIF data, not
1386 only coming from LDAP.
1388 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
1389 implementing most of what used to be the AgenorUserManager class.
1390 The difference is that users are cached in the forme of
1391 dictionaries and many sources are used. Also, it can be used to
1392 search LDAP contacts.
1394 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
1395 the concept of "ldap source", to be used by all the classes
1396 needing access to LDAP-provided information: addressbooks and the
1397 user manager. Most the method thereing are transcriptions of
1398 methods previously found in SOGoContactLDAPFolder. It also contain
1399 utility methods for user matching and authentification.
1401 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
1402 module, rendered useless by code refactoring.
1404 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
1405 with the freshly written "LDAPUserManager".
1407 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1409 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
1410 SOGOContactLDIFEntry.
1412 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
1413 module, obsoleted by code in SOGo/LDAPSource.[hm].
1415 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1417 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
1418 new method with an explicit name.
1420 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1422 * SoObjects/Appointments/SOGoCalendarComponent.m
1423 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
1424 replacing "isOrganizer:orOwner:" by taking only one instance of
1425 SOGoUser as parameter.
1426 ([SOGoCalendarComponent -participant:user]): new method replacing
1427 the previous "isParticipant" boolean method by returning the first
1428 participant matching the user passed as parameter. This method is
1429 used so that both the regular email address and the "system email
1430 address" of the user are matched against the participants emails.
1432 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1433 -getSystemEMailForUID:uid]): new method that returns the email
1434 formed with the user's uid and the default mail domain.
1436 * SoObjects/Appointments/SOGoCalendarComponent.m
1437 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
1438 was previously commented out.
1440 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
1441 forwared to [AgenorUserManager getSystemEmailForUID:].
1443 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1444 -toolbar]): method replacing the one with the same name in the
1445 task and appointment editor classes. This method makes also use of
1446 the new method "isOrganizerOrOwner:" and "participant:" in
1447 SOGoCalendarComponent.
1449 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
1450 -toolbar]): removed method, replaced with a method with the same
1451 name in UIxComponentEditor.
1453 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
1454 method, replaced with a method with the same name in
1457 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
1458 -primaryFetchProfile]): the values returned from the database are
1459 converted to a put dictionary first, since the dictionary returned
1460 is actually an immutable one, which can cause a crash afterwards.
1462 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1464 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
1465 and "SOGoRole_ObjectEditor".
1467 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
1468 -prepareRightsForm]): this method is no longer mandatory.
1470 * UI/Contacts/UIxContactsUserRightsEditor.m
1471 ([UIxContactsUserRightsEditor
1472 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
1473 module to handle acls related to the address books. Partial
1476 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1477 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
1480 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
1481 specified roles from cache.
1482 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1483 put resulting roles in cache.
1485 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
1486 initWithName:inContainer:. Instead, directly initialize the ivars
1487 as it is supposed to be to avoid an infinite loop whenever one of
1488 those two methods are overriden.
1490 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
1493 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1494 -aclsForUser:uid]): override method so that SOGo won't crash when
1495 loading the contact card.
1497 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1499 * SoObjects/Appointments/SOGoAppointmentFolder.m
1500 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
1501 "freebusy" special user should only require opaque elements.
1503 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1505 * SoObjects/Appointments/SOGoAppointmentFolder.m
1506 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
1507 our double declaration where the resulting XML would be screwed.
1508 There is only one collection per namespace.
1510 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
1511 rfc822DateString]): new method that returns a string conform to
1512 rfc 822 and suitable for email headers.
1514 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
1515 "rfc822DateString" category method on the date we put in the
1518 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1520 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
1521 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
1522 which should never be overriden.
1523 ([UIxUserRightsEditor -appendRight:newRight])
1524 ([UIxUserRightsEditor -removeRight:right])
1525 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
1526 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
1527 methods that can be used by the subclasses.
1528 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
1529 mandatorily be overriden to prepare the elements of the subclassed
1531 ([UIxUserRightsEditor -updateRights]): new method that should
1532 mandatorily be overriden to update the user rights from the
1533 elements of the subclassed form.
1535 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
1536 check if the uid is already listed before adding it to our array.
1537 This is because the acl table can contain more than one record per
1538 user/object relationship.
1540 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1541 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
1542 "roles" parameter is now an NSArray instead of a string. Therefore
1543 we loop throughout the array to populate the table. All the
1544 relevant records are removed prior to the addition of the new
1547 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
1548 -aclsForUser:uid]): new override that returns nil until we add
1549 support for IMAP acls.
1551 * SoObjects/Mailer/SOGoMailAccounts.m
1552 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
1554 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1555 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
1557 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1558 -aclsForUser:uid]): override this method which will always return
1561 * SoObjects/SOGo/SOGoPermissions.[hm]: added
1562 [Public,Private,Confidential]
1563 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
1564 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
1565 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
1567 * SoObjects/Appointments/SOGoAppointmentFolder.m
1568 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
1569 that defines default roles for new elements in the acl.
1571 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
1572 module and subclass of UIxUserRightsEditor specific to the
1573 handling of user rights on calendar folders.
1575 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1577 * SoObjects/Appointments/SOGoAppointmentFolder.m
1578 ([SOGoAppointmentFolder -groupDavResourceType]): return both
1579 "vevent-collection" and "vtodo-collection".
1581 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
1582 that implements the detailed editor of user rights per-object.
1584 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1586 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1587 -rolesForObject:objectinContext:context]): no longer query objects
1588 for "roleForUser:". Instead, all objects should implement
1591 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
1592 new method to comply with the new acl "protocol" in SOGoObject.
1593 Uses SOGoFolder's new facilities for ACLS.
1594 ([SOGoContentObject -aclsForUser:uid]): idem.
1595 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
1596 ([SOGoContentObject -removeAclsForUsers:users]): idem.
1598 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1599 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
1600 based folders. This method is derived from the code that was in
1601 UIxAclFolder before its removal.
1602 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
1605 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
1607 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
1608 ([SOGoFolder -setRoleForUsers:uidsto:role])
1609 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
1611 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
1612 that requires overriding by subclasses.
1613 ([SOGoObject -aclsForUser:uid]): idem.
1614 ([SOGoObject -defaultAclRoles]): idem.
1615 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
1616 ([SOGoObject -removeAclsForUsers:users]): idem.
1618 * UI/Common/UIxObjectActions.m: new module implementing the web
1619 actions common to SOGoObject and all its subclasses.
1620 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
1621 user with the clientObject defaults user rights to the object's
1624 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
1625 to the point where it will only list the users (and their name)
1626 associated with an object acl.
1628 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
1629 methods have been moved into SOGoObject and SOGoFolder during a
1632 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1633 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
1634 method made useless by the programmatic handling of iCalendar
1636 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
1637 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
1638 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
1640 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
1641 drop on all folder nodes, not just on leaves.
1643 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1644 ([SOGoContactLDAPFolder
1645 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
1647 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1649 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
1650 debugging facilities when the SOGoDebugObjectAllocation user
1653 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1655 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
1656 method that SOGo will need with non-gnustep Foundation
1658 ([NSString -stringByAppendingPathComponent:component]): new method
1659 that SOGo will need when building with libFoundation. Method
1660 removed later since it is available from
1661 Foundation/NSPathUtilities.h.
1663 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
1666 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
1667 every subclass to access [WOApplication context] without having to
1668 invoke it more than once.
1670 * SoObjects/Appointments/SOGoCalendarComponent.m
1671 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
1672 moved method from SOGoTaskObject and SOGoAppointmentObject up to
1675 * UI/Scheduler/UIxCalSelectTab.m: removed module.
1677 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1679 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1680 -vCard]): test the prefix of the card in a case-independent way.
1682 * OGoContentStore/OCSContactFieldExtractor.m
1683 ([OCSContactFieldExtractor
1684 -extractQuickFieldsFromContent:content]): we no longer accept
1685 records in a format other than versit vCard so we can get rid of a
1688 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1690 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1691 -selectorComponentClass]): restored method.
1693 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1695 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
1696 -shouldDisplayCurrentTask]): the current task is not displayed if
1697 it is NOT completed or if the "showCompletedTasks" flag is set.
1698 The logic was inverted in Lightning and is now in SOGo too.
1700 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1702 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
1703 want the "work" url instead of the "home".
1705 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1706 -_saveSnapshot]): save url values from snapshot.
1707 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
1709 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1710 -calendarList]): new method replacing "availableCalendars".
1712 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1713 -calendarFolders]): we now take the list of subscribed calendar
1716 * SoObjects/Appointments/SOGoAppointmentFolder.m
1717 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
1718 method derived from and replacing [UIxCalView calendarFolders].
1720 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1722 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1723 -toManyRelationshipKeys]): don't put the predefined folders in the
1724 list if they are returned by the server.
1726 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
1727 longer store the "flattenedBlocks" in a dictionary since the
1728 object will be deleted anyway and we don't need to put the folders
1731 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1732 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
1733 attachment path into account when computing the part urls.
1735 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1737 * UI/Contacts/UIxContactsListViewContainer.m
1738 ([UIxContactsListViewContainer -additionalFolders]): take the list
1739 of subscribed folders from the new property list used for the user
1740 settings. The value of its key is SubscribedFolders for the
1741 dictionary entry named "Contacts".
1743 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1744 -canAccessContentAction]): new method to override the one from
1745 UIxFoldersActions by taking into account the fact that, this time,
1746 the clientObject is an ldap folder. Removed many method that used
1747 to be related to the handling of the user selector.
1749 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
1750 to make sure they can be removed.
1752 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
1753 populate the calendar entries based on the user settings plist.
1755 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1756 -selectForMailerAction]): restored method.
1758 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
1759 from a simplified version of the old UIxContactEditor (removed).
1761 * UI/Contacts/UIxContactsUserFolders.m: new template module for
1762 selecting users or user folders through an LDAP search of which
1763 the results are displayed as a tree.
1765 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
1766 method "onContactAdd" here since the Mailer is now the only module
1767 to use it when composing emails.
1769 * UI/WebServerResources/generic.js: added code for handling the
1770 new scheme used for describing SOGo folders, common code to handle
1771 folder addition or removal.
1773 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1774 -activateFolderAction]): new method that change the "active"
1775 settings in the folder-related fields in the user settings.
1776 ([UIxFolderActions -deactivateFolderAction]): see above.
1778 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1779 -checkRightsAction]): removed method.
1781 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1782 -updateAdditionalAddressBooksAction]): removed method.
1784 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1785 -updateCalendarsAction]): removed method.
1787 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1789 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1790 -checkRightsAction]): removed method.
1792 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1793 -canAccessContentAction]): new method designed to replace
1794 [UIxCalMainView checkRightsAction] in a more universal way.
1796 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1798 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1799 -roleOfUser:uidinContext:context]): take all the subkeys into
1800 account, not only the "personal" folder.
1802 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1803 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
1804 to the new components.
1806 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
1809 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1810 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
1811 field of the sogo_user_profile table, where the user-customizable
1812 changes will be saved.
1813 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
1814 similar to the one above, using the "settings" field where the
1815 automatic settings will be saved.
1817 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
1818 module to bind the userdefaults to a property list contained in a
1819 specified field of the sogo_user_profile table.
1820 ([AgenorUserDefaults
1821 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
1822 added a "fieldName" parameter.
1824 * UI/Common/UIxFolderActions.m: new module implementing web
1825 actions common to all GCS-based folders.
1827 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1829 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
1830 put a carriage return after the day name.
1832 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1833 -readFreeBusyAction]): restored method.
1835 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1837 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1838 -defaultAction]): remade module to redirect automatically to the
1841 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
1843 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1845 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1846 -deleteAction]): new web method to delete personal addressbook
1849 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1850 -delete]): override method to refuse the deletion of the folder if
1851 its nameInContainer is "personal".
1853 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
1854 that forwards the deletion request to the folder manager.
1856 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1858 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
1859 -zoomList]): new method that returns the list of available zoom factors.
1861 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1862 -changeStatusAction]): rewrote method.
1864 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1865 -_handleAttendeesEdition]): make sure "attendeesNames" has a
1866 length > 0 before computing the attendees. Otherwise there will be
1867 an invalid empty entry.
1868 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
1869 organizer when there are attendees and remove it when the
1870 attendees are removed.
1872 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1874 * UI/Scheduler/UIxAttendeesEditor.m): new component.
1876 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
1877 the task and appointment editors. Now a container component
1878 handling the common elements of tasks and events.
1880 * UI/Scheduler/UIxTaskEditor.m: same as below.
1882 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
1883 a subclass of UIxComponentEditor but a subcomponent of it.
1885 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
1886 toolbar can have the special value "none" to indicate there is
1887 none attached to the window.
1889 * SoObjects/Appointments/SOGoCalendarComponent.m
1890 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
1892 ([SOGoCalendarComponent -isParticipant:email]): new method.
1893 ([SOGoCalendarComponent -calendar:create]): takes one parameter
1894 "create" which is a boolean indicating whether we want to create
1895 the calendar if it does not exist.
1897 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1899 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
1900 of a table, the same way the dayly and weekly views have been for
1903 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
1905 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
1908 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
1909 property to point at the user folder
1911 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1913 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1914 -userInContext:]): returns "SOGoUser".
1916 * SoObjects/Appointments/SOGoCalendarComponent.m
1917 ([SOGoCalendarComponent -contentAsString]): overriden method that
1918 takes the privacy into account and discard the relevant fields if
1919 needed by generating a new content string and caching it.
1920 ([SOGoCalendarComponent
1921 -saveContentString:contentStringbaseVersion:baseVersion]): if the
1922 new method above has cached a content string, release it and set
1923 it to nil so that it will have to be regenerated in the case it is
1925 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
1926 discard the fields that have to be hidden when the card is
1929 * SoObjects/Appointments/SOGoAppointmentFolder.m
1930 ([SOGoAppointmentFolder
1931 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
1932 sure the cards are now handled as instances of
1933 SOGoCalendarComponent instead of SOGoContentObject so that their
1934 content string is taking the privacy classifiction into account.
1935 ([SOGoAppointmentFolder -_privacySqlString]): new method that
1936 generates a query to determine what information can be given and
1937 if the card itself has to be shown.
1939 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
1940 -getICalPersonsFromValue:selectorValue]): removed useless
1941 "isAccessRestricted" method.
1943 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
1944 -setStyle:_style]): test whether the values of orgmail and
1945 partmails are null before manipulating them, otherwise SOGo sends
1946 a "rangeOfString:" message to an NSNull, which makes it crashes.
1948 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1949 -extractQuickFieldsFromEvent:_event]): we now use the new
1950 "symbolicAccessClass" method from iCalEntity to determine the
1951 value of the "classifiction" field.
1952 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
1955 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1957 * SoObjects/Appointments/SOGoAppointmentFolder.m
1958 ([SOGoAppointmentFolder
1959 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
1960 see below, the query is adapted consequently.
1962 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1963 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
1964 renamed to "classification" and can any integer as value.
1965 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
1968 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1970 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1971 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
1972 don't prepend anything to the class and id named. Instead, we
1973 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
1976 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1978 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1979 -rolesOfUser:logininContext:context]): if object does not exists
1980 (for example when it's being created), the current user has the
1981 same rights on it than he/she has on its parent container.
1983 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1984 -nameExistsInFolder:objectName]): methods that tests if a c_name
1985 corresponding to the name passed as parameter is present in the db
1988 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1990 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1991 -rolesForObject:objectinContext:context]): test for
1992 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
1994 * SoObjects/Appointments/SOGoCalendarComponent.m
1995 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
1996 returns the roles of the user on the container object if the event
1999 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2001 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
2002 alternativeViewer a multipart/related message is being handled.
2004 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
2007 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
2008 text/html component before text/plain.
2010 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2011 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
2012 fetching of HTML parts.
2014 * SoObjects/Appointments/SOGoCalendarComponent.m
2015 ([SOGoCalendarComponent -componentTag]): new template method that
2016 returns the vcalendar tag of the current object.
2017 ([SOGoCalendarComponent -component]): new method that returns the
2018 first object matching [self componentTag] within the current
2019 calendar object. This method replaces 'firstEventInCalendar:' as
2020 well as "firstTaskInCalendar:".
2021 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
2022 moved method from SOGoAppointmentObject.m.
2024 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2026 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
2027 module which shows each selected user's calendar in a different
2028 column instead of mixing their events together.
2030 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
2031 replaced use of [NSString stringByTrimmingWhiteSpaces] with
2032 [NSString stringByTrimmingSpaces].
2034 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
2035 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
2038 * UI/Scheduler/UIxCalDayOverview.m,
2039 UI/Scheduler/UIxCalDayChartview.m,
2040 UI/Scheduler/UIxCalDayListview.m,
2041 UI/Scheduler/UIxCalWeekOverview.m,
2042 UI/Scheduler/UIxCalWeekChartview.m,
2043 UI/Scheduler/UIxCalWeekListview.m,
2044 UI/Scheduler/UIxCalInlineMonthOverview.m,
2045 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
2047 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2049 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2050 -appendPersonalSourcesInContext:context]): release connectoin
2051 channel when everything is done.
2053 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2054 -newAbAction]): new action method to crate a new contact folder
2057 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
2058 that requests the folder manager to create a folder table with the
2059 specified type at the specified path. The type is taken from [self
2062 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2063 -folderType]): implemented.
2065 * SoObjects/Appointments/SOGoAppointmentFolder.m
2066 ([SOGoAppointmentFolder -folderType]): implemented.
2068 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2069 -appendPersonalSourcesInContext:context]): we now fetch all
2070 folders with type "Contact" that belong to the current user.
2071 ([SOGoContactFolders -newFolderWithName:name]): new method to
2072 create a new contact folder.
2074 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
2075 resulting url with [NSString+Utilities hostlessURL] instead of
2076 using NSURL. This is because the url in question sometimes has a
2077 hostname and sometimes not. "hostlessURL" ensure the hostname is
2079 ([UIxComponent -applicationPath]): same as above.
2081 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
2083 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
2084 folders before doing the one on messages.
2086 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2088 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
2089 makeObjectsPerform:withObject:withObject: for GNUstep
2092 * OGoContentStore/GNUmakefile, Protocols/common.make,
2093 SoObjects/common.make, UI/common.make: install in
2094 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
2096 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
2098 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
2101 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2103 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
2104 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
2107 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2108 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
2109 password would be accepted anyway as long as its length was > 0.
2110 This can be the case ONLY when LDAP is disabled otherwise we have
2111 a serious security issue...
2113 * SoObjects/Appointments/SOGoAppointmentObject.m
2114 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
2115 user is not an organizer nor a participant, he is declared as
2116 "Owner" if he owns the calendar the entry where the entry is
2117 contained. Other cases should not be possible.
2119 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2121 * UI/Contacts/UIxContactEditor.m: display and handle the new
2124 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2125 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
2128 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2129 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
2132 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2134 * SoObjects/Appointments/SOGoCalendarComponent.m
2135 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
2136 returns the value of ud "SOGoAppointmentSendEMailNotifications"
2138 ([SOGoCalendarComponent
2139 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
2141 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2143 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
2144 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
2145 so that the mailbox cache is refreshed everytime the user presses
2146 on "get mail". I doubt a mailbox cache really is useful in general
2149 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2151 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2152 -userInContext:]): if the lookup is on "freebusy.ifb" and the
2153 username is "anonymous" the user is automatically set to
2156 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2158 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
2159 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
2160 user with password "freebusy".
2162 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
2163 -contentAsString]): the default timerange is now 14 days before
2164 currentday and 1 month after.
2166 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2168 * SoObjects/Appointments/SOGoAppointmentFolder.m
2169 ([SOGoAppointmentFolder
2170 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
2171 escape the record string in a way suitable with XML encoding.
2173 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2175 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
2176 calendar view would not be updated properly.
2178 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2180 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2181 -newStartDate]): fix the handling of the component start date
2182 depending on the "hm" and the "day" parameters.
2184 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2185 -roleOfUser:uidinContext:context]): set role of current user to
2186 "Assistant" if the object that is accessed is "freebusy.ifb".
2188 * SoObjects/Appointments/SOGoAppointmentFolder.m
2189 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
2190 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
2191 ([SOGoAppointmentFolder
2192 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
2193 lookupCalendarFolderForUID: method, which doesn't do security
2196 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2198 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
2199 accessor that returns the comma-separated list of users with role
2201 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
2202 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
2203 "checkedUsers". Instead, each user is either classified in the
2204 list of assistants or the list of delegates.
2206 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2208 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
2209 -composeAction]): method imported from removed container modules.
2210 ([UIxMailMainFrame -mailFolderName]): method imported from removed
2213 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
2214 for wrapping UIxMailView with the "popupview" action.
2216 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
2217 since its the component that displays the same splash screen than
2218 the one in Thunderbird/Icedove.
2220 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
2221 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
2222 UI/MailerUI/UIxMailListViewContainer.[hm],
2223 UI/MailerUI/UIxMailViewContainer.[hm]: removed
2225 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2227 * UI/WebServerResources/HTMLElement.js: replaced the functional
2228 selectNode() and deselectNode() functions with select() and
2229 deselect() methods of HTMLElement.
2231 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
2232 events are initialized from here now instead of in the HTML code.
2234 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2235 -checkRightsAction]): new method similar to the one with the same
2236 name in UIxCalMainView.m.
2238 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
2239 code to handle the publishing of freebusy information.
2241 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2243 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2244 -checkRightsAction]): new action method that returns a
2245 comma-separated list of boolean values matching the right of the
2246 current user to "view" (as a permission) each foreign calendar
2247 stored in his preferences.
2249 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
2250 new method that sets a customOwner, which can be returned with
2251 ownerInContext it set.
2253 * SoObjects/Appointments/SOGoAppointmentFolder.m
2254 ([SOGoAppointmentFolder
2255 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
2257 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2259 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
2260 below, but for the Contacts and Calendar collections.
2262 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
2263 new acl facilities method from sope-gdl/GCSFolder.m.
2265 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2266 -roleOfUser:uidinContext:context]): new method that returns
2267 SOGoRole_Assistant when the user is an assistant or a delegate on
2268 the "personal" ab object. This is so that setting roles on the
2269 SOGoContactFolders object is not required.
2271 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2273 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
2275 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
2276 to the handling of the user selection for the acls.
2278 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
2279 values from SoPermissions with ones specific to SOGo.
2281 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
2282 handles the storage for the acls.
2284 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
2285 class for SOGoAppointmentObject and SOGoTaskObject.
2287 * UI/Common/UIxAclEditor.[hm]: new component that provides a
2288 general editor for folder acls.
2290 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
2292 ([NSString -davMethodToObjC]): method that returns the method name
2293 for a DAV property implementation.
2295 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
2297 ([NSArray -stringsWithFormat:format]): new method that returns
2298 formatted occurences of the strings stored in the array.
2300 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
2301 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
2302 subclass module of SoWebDAVValue that supports collections of
2303 properties of the same type.
2305 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2307 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
2308 -lookupFolder:ofClassNamed:inContext:]): added the ability to
2309 configure the name of the SOGoDraftFolders with the ud var
2310 "SOGoDraftsFolderName".
2312 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2314 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2315 -userTimeZone:username]): new method that returns the timezone for
2316 the specified user depending on his preferences and the server
2319 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2320 -stringForData:partInfo:]): take the encoding into account and
2321 translate the text to "normal" before processing the charset data.
2323 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2325 * UI/WebServerResources/generic.js: the progress indicator is on
2326 when loading the page so we turn it off, and we turn it back on
2327 whenever we switch to another module...
2329 * UI/WebServerResources/SchedulerUI.js: make sure the day view
2330 synchronization mechanism works everywhere.
2332 * UI/WebServerResources/generic.js: the log window is not only
2333 visible when UIxDebugEnabled is set.
2335 * UI/WebServerResources/SchedulerUI.js: the month overview's day
2336 cells are now initialized with the DOM event interface methods
2337 instead of with html attributes.
2339 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
2340 headers (should be made configurable at some point)...
2342 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
2343 "not null" constraint on startdate, enddate, isopaque,
2344 participants and partmails.
2346 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2348 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2349 -hoursToDisplay]): prevent a crash by retaining the
2350 "hoursToDisplay" array after it's created.
2351 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
2352 clickable hours DIV.
2354 * UI/WebServerResources/SchedulerUI.js: made the event
2355 participation status modification asynchronous, which also fixes a
2356 bug where the window would sometimes close before the accept or
2357 decline action was completed. Also, adapted the event handling
2358 related to the days or weeks view with the new DIV-based layout.
2360 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
2362 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
2363 DIV-based presentation of the days and weeks.
2365 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
2367 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
2368 might return an exception so we have to handle it if we don't
2371 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2373 * UI/WebServerResources/SchedulerUI.js: updated the list
2374 initialization code to use the new event management scheme, adding
2375 what was missing to be able to delete events and tasks again.
2377 * UI/WebServerResources/MailerUI.js: added code to activate the
2378 "Get mails" button. Fixed a bug which prevented messages to be
2381 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
2382 navigation and focus handling of INPUTs.
2384 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2386 * UI/WebServerResources/MailerUI.js: added code to handle the
2387 possible drag and drop events to manager in the mail module.
2388 Moving messages, opening parent folders, ...
2390 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
2391 the drag and drop manager as well as the interface to HTMLElement
2392 to trigger drag and drop events.
2394 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
2395 action to move the current message to the mailbox named after the
2396 value of parameter "tofolder".
2398 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
2399 -moveToFolderNamed:folderNameinContext:]): new method base on
2402 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2404 * UI/WebServerResources/generic.js: added and activated many
2405 "load" handlers to configure generic widgets used across the
2406 modules. More events are now handled in a DOM-fashion way instead
2407 of by setting the relative attributes in the templates.
2409 * UI/Templates/UIxSortableTableHeader.wox: all the events are
2410 declared from the javascript DOM onload handlers.
2412 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
2415 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
2416 declared from the javascript DOM onload handlers.
2418 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
2419 we want everything to be separated from each other, as much as
2422 * UI/WebServerResources/SOGoDragHandles.js: new module containing
2423 the "SOGoDragHandlesInterface", implementing methods that can be
2424 attributed to DIV so that they can be used as drag handles.
2426 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2427 -asQPSubjectString]): initialize the tmp strings with '0' to make
2428 sure they don't contain garbage.
2430 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2432 * UI/WebServerResources/MailerUI.js: register the messageList
2433 table as a dragging source and the leaf of the navigation tree as
2434 dnd destinations to the DNDManager.
2436 * UI/WebServerResources/generic.js: initialize tabs from the
2437 "unload" event listener that is added programmatically instead of
2438 from the template... Also, added the new DNDManager object.
2440 * UI/WebServerResources/HTMLTableElement.js: added code to
2441 simulate XUL drag n drop events. This code will possibly be moved
2442 to HTMLElement.js instead later...
2444 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2445 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
2448 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2449 -_qualifierForFilter:filter]): only search records which starts
2450 with the specified pattern.
2452 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2454 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
2455 -asQPSubjectString]): new method that returns the special QP
2456 string with its qp declaration for email subjects.
2457 ([SOGoDraftObject -bodyPartForText])
2458 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
2459 double-encode data in UTF-8.
2461 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2462 -newStartDate]): new method to determine the start date depending
2463 on the URL parameters, the current day and the current time.
2464 ([UIxComponentEditor -toolbar]): new method to determine the
2465 filename of the toolbar that should be drawn depending on the
2466 ownership and the list of attendees of the task/event wrt to the
2469 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2470 -setDayStartHour:aStartHour]): adjust the minutes to the next
2471 quarter of hour, if not already set to a quarter.
2473 * UI/WebServerResources/UIxAppointmentEditor.js,
2474 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
2477 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2479 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2480 -loadValuesFromComponent:component]): handles access class
2481 (privacy) and status.
2483 * UI/Contacts/UIxContactsListViewContainer.m
2484 ([UIxContactsListViewContainer -additionalFolders]): return nil if
2485 [self additionalAddressBooks] returns an empty string.
2487 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2489 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
2490 rangesOf7Days]): enhanced and debugged algorithm to feed the array
2491 with slices where the first day is still in the requested month.
2493 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
2496 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
2497 of events in the day boxes of the calendar's monthly view.
2499 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
2500 -davContentType]): declare "text/calendar".
2502 * SoObjects/Appointments/SOGoAppointmentObject.m
2503 ([SOGoAppointmentObject -davContentType]): declare
2506 * SoObjects/Appointments/SOGoAppointmentFolder.m
2507 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
2508 HTTP methods are handled by SOPE and requires nil to be returned,
2509 this method now invokes the new
2510 "requestNamedIsHandledLater:inContext:" method to check that.
2511 ([SOGoAppointmentFolder
2512 -requestNamedIsHandledLater:nameinContext:context]): new methods
2513 that returns "YES" only for the "OPTIONS" http method (for now...).
2514 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
2515 overloaded method to append the "access-control" and
2516 "calendar-access" DAV abilities to the initial declaration.
2518 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
2519 imitate the look of Sunbird/Lightning's monthly view.
2521 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
2522 UIxCalMonthViewOld.[hm].
2524 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2526 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
2527 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
2529 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
2530 returns an image name based on the participation status of the
2533 * UI/WebServerResources/SchedulerUI.js: same strip down as for
2536 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
2537 ([UIxContactsListViewContainer -additionalFolders])
2538 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
2539 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
2540 methods to handle the external addressbooks a user has subscribed
2541 too, by retriving them from his preferences.
2543 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2544 -updateAdditionalAddressBooksAction]): new method that updates the
2545 user settings with the list of addressbook he has subscribed to.
2547 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
2548 module for the address book selector.
2550 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
2551 a toolbar with two buttons ("add" and "remove") to manage the
2552 additional addressbooks a user might subscribe to.
2554 * UI/WebServerResources/ContactsUI.js: added code to handle
2555 "external addressbooks" from the Javascript point-of-view, by
2556 extending existing methods and adding code for the "add ab" and
2557 "remove ab" buttons.
2559 * UI/WebServerResources/generic.js: moved extensions methods to
2560 DOM elements to separate files for better clarity.
2562 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
2563 new method that returns "pageContent" as class, but also "popup"
2564 for the DIV where the page content lies, so that we can manipulate
2565 the content of popup's with CSS identifiers.
2567 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2569 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2570 -displayStyle]): new method that returns a string containing the
2571 css style relative to the current appointment cell. This code is
2572 currently inactive but might be reused later.
2574 * UI/WebServerResources/SchedulerUI.js: added code to handle the
2575 display of the selected day (the day pointed by the mouse, or the
2576 current day when changing the view).
2578 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
2579 -dayCellClasses]): new method that returns a string containing the
2580 css classes applicable to the current cell, depending on the
2581 position of the day in the week, the day of today and the
2584 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
2585 -currentContactAptBorder]): new method that returns the
2586 appropriate border color for the specified user.
2588 * SoObjects/Appointments/SOGoAppointmentObject.m
2589 ([SOGoAppointmentObject
2590 -saveContentString:contentStringbaseVersion:baseVersion]):
2591 overloaded method that parse new events and detects if they have
2592 an organizer or not. If they are new and have no organizer set
2593 (Sunbird/Lightning...), the owner of the event is set as
2596 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
2597 category that provides facility methods and interfaces to the
2600 * SoObjects/Contacts/product.plist: give full access to ANY
2601 authenticated user, not just the owner (to every objects...).
2603 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2605 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
2606 every replica widgets are declared as such to their master
2607 counterpart. Take the days into account when displaying the time
2608 range taken by the appointment.
2610 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
2611 -getICalPersonsFromValue:selectorValue]): method taken from
2612 UIxFreeBusyUserSelector, that is shared both by
2613 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
2615 * SoObjects/Appointments/SOGoAppointmentFolder.m
2616 ([SOGoAppointmentFolder
2617 -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.
2619 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
2620 derived and taken as a subset of UIxFreeBusyUserSelector that
2621 implements the table part of the FreeBusy view. Most of the
2622 methods of UIxFreeBusyUserSelector relative to that table were
2623 moved into UIxFreeBusyUserSelectorTable, which can also be used as
2624 a standalone view for AJAX operations.
2626 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2628 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2629 -vCard]): change reverted.
2631 * UI/Contacts/UIxContactEditor.m: check whether the client contact
2632 folder has selector "globallyUniqueObjectId" before calling that
2635 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2636 -vCard]): the "setVClass" NGVCard method really is "setClass"
2639 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2640 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
2641 request the "streetAddress" instead of the "streetaddress".
2642 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
2643 mails that *contain*, and not just *start with* the search
2646 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2647 -vCard]): mark address returned from LDAP as the work address.
2649 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
2650 span covered with the anchor, not only the textual information
2653 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
2654 argument (event or task) to newEvent in the appointmentListMenu.
2655 Make the appointmentsListView display the appointmentsListMenu.
2657 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
2658 12 to 50 before displaying "...".
2659 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
2660 if its length > 0, whether location itself is nil or not...
2661 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
2662 of which the length > 0.
2664 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2666 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
2667 french and ISO dates.
2669 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
2670 from UIxContactSelector to handle contact lists (current and
2671 additional contacts).
2673 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2674 -_freeBusyAsText]): added handling of an "additional"-named query
2675 parameter that describe the number of additional days after
2676 enddate that should be returned.
2678 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2679 -_responseForResults:results]): give priority to results with
2680 "c_uid" fields. If none returned, use the first contact received.
2682 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2683 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
2684 2 and "CANCELLED" to 0.
2686 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2688 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
2689 of start and end dates to short string dates.
2691 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2692 -readFreeBusyAction]): new method that returns an array of numbers
2693 corresponding to the state in the freebusy of each "quarter of an
2694 hour" between the "sday" and "eday" date parameters passed in the
2695 url. This permits to handle the display of the freebusy with Ajax
2697 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
2698 since the free busy displays 2 days ahead.
2700 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2701 -contactSearchAction]): new action that returns the uid and the
2702 username + email of the user whose name contain the value of the
2703 "search" url parameter.
2705 * SoObjects/Appointments/SOGoAppointmentFolder.m
2706 ([SOGoAppointmentFolder
2707 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
2708 useful for the computing of the status of the freebusy.
2710 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
2711 -init]): new component that incarnates a user selector for events
2712 inspired by the new one found in Thunderbird Lightning.
2714 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2716 * UI/WebServerResources/generic.js: added code to enable or
2717 disable anchor visually (following our internal algorithm).
2719 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
2720 added new "url" ivar with its classic accessors.
2721 ([UIxComponentEditor -urlButtonClasses]): new method that returns
2722 the class strings for the url button on the appointment/task
2723 editor (depending on the validity of the url).
2725 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
2726 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
2727 the template to match the Lightning's new task/appointment editor.
2729 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
2731 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
2733 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2735 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2736 ([SOGoContactLDAPFolder
2737 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
2739 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
2740 iCalEntityObject instances instead of just iCalEvent's.
2742 * SoObjects/Appointments/SOGoAppointmentFolder.m
2743 ([SOGoAppointmentFolder
2744 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
2746 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
2747 bad way of handling ownership that way.
2749 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2750 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
2751 on "cn", just like Mozilla.
2753 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2755 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
2756 "to" should be retained, otherwise it will be autoreleased and a
2759 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2760 -writeAction]): updated method to fetch the card before initing
2763 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2764 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
2767 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2768 -iCalStringTemplate]): start and due date are now optional.
2770 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2771 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
2772 appropriate accessors to be settable through the templates.
2774 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
2775 new "isDisabled" ivar with appropriate accessors to be
2776 settable through the templates.
2778 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2779 -availableCalendars]): new method that list the calendars to which
2780 the user has subscribed.
2781 ([UIxComponentEditor -componentOwner]): returns the owner of the
2784 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2785 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
2786 quickentries to null whenever each or all of them are null, by
2787 providing an impossible timestamp from with NSNotFound as value.
2789 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2791 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
2792 that handles the creation of new fields with the new APIs and the
2793 new node structure on the page.
2795 * UI/Scheduler/UIxAppointmentEditor.m,
2796 UI/Scheduler/UIxTaskEditor.m:
2797 refactored to user UIxComponentEditor as parent class.
2799 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
2800 containing the methods common to the UIxTaskEditor and the
2801 UIxAppointmentEditor.
2803 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2805 * SoObjects/Appointments/SOGoAppointmentFolder.m
2806 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
2807 the handling of time-ranges.
2809 * UI/WebServerResources/ContactsUI.js: specify a notification type as
2810 parameters when onConfirmContactSelection in invoked.
2812 * UI/WebServerResources/generic.js: specify a notification type as
2813 parameters when onContactRemove in invoked.
2815 * UI/WebServerResources/SchedulerUI.js: when the user deselects
2816 all calendars, select his entry.
2818 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2820 * UI/WebServerResources/SchedulerUI.js: edit and delete events
2821 with their owner-relative urls. Generate a correct entry in the
2822 css color table when a user is added to the calendars list. Put
2823 the same color next to the user id.
2825 * UI/WebServerResources/generic.js: implemented some new helper
2828 * SoObjects/Appointments/SOGoAppointmentFolder.m
2829 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
2830 entries if their owner is not the current user.
2832 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2833 -displayClasses]): return the correct class for the current event
2834 representation depending on its owner.
2836 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
2837 and associate a color for each user login depending on its
2838 position in the list.
2840 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
2841 -currentRowCSSClass]): return the correct class for the current
2842 row depending on the owner of the event.
2844 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
2845 -setColors:colors]): new method to associate a color table with
2846 each user in the list.
2848 * SoObjects/Appointments/SOGoAppointmentFolder.m
2849 ([SOGoAppointmentFolder
2850 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
2852 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
2853 NSObject to associate an instance with a user.
2855 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2857 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
2860 * UI/WebServerResources/ContactsUI.js: added handling of
2861 notification of changes to contact selectors.
2863 * UI/WebServerResources/generic.js: added handling of notification
2864 of changes to contact selectors.
2866 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2867 -updateCalendarsAction]): proxy method to update the user
2868 preference table with the new selected calendar uids.
2870 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2871 -calendarsContactsAction]): new method.
2873 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
2874 ([UIxContactSelector -setHasCheckBoxes:aBool])
2875 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
2876 permit the drawing of checkboxes instead of card icons.
2878 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
2879 wrap a selector the the "Calendars" tab.
2881 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
2882 new user calendar selector.
2884 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2886 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
2887 may cover hour 0 to hour 23.
2889 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2890 -iCalStringFromQueryParameter:format:]): dates explicitly set to
2893 * UI/WebServerResources/SchedulerUI.js: manage both lists of
2894 objects wrt to the toolbar actions.
2896 * UI/WebServerResources/generic.js: added code to the "String"
2897 class to decode number-encoded char entities.
2899 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2900 -batchDeleteAction]): new method to delete selected entries in the
2903 * SoObjects/Appointments/SOGoAppointmentFolder.m
2904 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
2905 that delete identified entries in batch.
2907 * UI/SOGoUI/UIxComponent.m ([UIxComponent
2908 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
2910 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
2911 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2912 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
2913 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2915 return a UIxJSClose component if everything went fine.
2917 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
2920 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
2921 UIxAppointmentEditor.m.
2923 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
2924 a very light page with javascript code to close a window, by
2925 calling a method on the opener if specified. This component is
2926 designed to work as a response to form postings.
2928 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2930 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
2931 SOGoAppointmentObject adapted for the handling of tasks.
2933 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
2934 extracted from SOGoAppointmentObject.
2936 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2937 -saveUrl]): returns the url needed to POST the new form to.
2938 redirect the user to <aptid>/editAsAppointment instead of /edit,
2939 so that SOGoAppointmentFolder can return the correct object type.
2941 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
2942 -compareAptsAscending:_other]): accept empty start or end dates.
2944 * SoObjects/Appointments/SOGoAppointmentFolder.m
2945 ([SOGoAppointmentFolder
2946 -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.
2947 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
2948 components of type "vtodo" as well as "vevent".
2949 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
2950 url specified ends with AsTask or AsAppointment, returns the
2951 an object of the appropriate class, otherwise deduce it from its
2952 content if the HTTP method is "PUT", otherwise read its type from
2955 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2956 -extractQuickFieldsFromTodo:_task]): extract quick fields from
2959 * UI/Scheduler/UIxCalView.m ([UIxCalView
2960 -fetchCoreAppointmentsInfos]): replacement methods for
2961 fetchCoreInfos but by retrieving object with component "vevent".
2962 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
2965 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
2966 UIxCalAptListView adapted for the handling of tasks.
2968 * UI/Scheduler/UIxTaskProposal.[hm],
2969 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
2970 clones of the UIxAppointment* classes for the handling of tasks.
2972 * UI/WebServerResources/UIxTaskEditor.js: clone of
2973 UIxAppointmentEditor adapted for the handling of tasks.
2975 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
2976 Scroll the daily view to the appropriate hour when an appointment
2977 is selected in the appointments list.
2979 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2981 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2982 -setDayStartHour:aStartHour]): specifies the user timezone on the
2985 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
2988 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
2989 ([NSCalendarDate -driftedDate]): methods made useless by a better
2990 comprehension of the NSTimeZone API...
2992 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2994 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
2995 new methods from the NSCalendarDate methods.
2997 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
2998 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
3000 +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).
3001 ([NSCalendarDate -adjustedDate]): this method returns another
3002 instance set to the correct hour after the original date was set
3003 from a non-GMT timezone. This date can be used for storage.
3004 ([NSCalendarDate -driftedDate]): this method does exactly the
3005 opposite of -adjutedDate, that is, it enables the method
3006 hourOfDay, minuteOfHour etc... to return the values according to
3007 the original date's timezone. This date CANNOT be used for storage.
3009 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
3010 -shortDateString]): new method that will return a "short date
3011 string" (yyyymmdd) from a calendar date object.
3013 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3014 -_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.
3016 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
3017 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
3019 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3021 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
3022 view of the day at the height of hour 8:00.
3024 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
3025 ([UIxCalView -dayEndHour]): returns 24.
3027 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
3028 ([UIxContactFoldersView -newAction]): invoke
3029 _selectActionForApplication: on self with the proper attribute too.
3031 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
3032 we now use the action mechanism in UIxContactsListView to keep the
3033 same view for the contact selectors and the regular contact view.
3035 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
3036 UIxContactsListViewContainerBase.[hm]
3038 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
3040 * UI/WebServerResources/generic.js: generalized emailstring
3041 handling functions. Generalized address book access functions.
3043 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3044 -isPopup]): return YES if the "popup" query parameter is set.
3046 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3047 -defaultAction]): keep the url parameters when redirecting.
3048 ([UIxContactFoldersView -selectForSchedulerAction])
3049 ([UIxContactFoldersView -selectForMailerAction]): new action
3050 methods for the /scheduler-contacts and /mailer-contacts invocations.
3052 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
3053 newly available NSString+URL category.
3055 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
3056 -asURLParameters]): handle dictionary entries which could be
3057 instances of NSArray rather than NSString.
3059 * SoObjects/SOGo/NSString+URL.m ([NSString
3060 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
3061 ([NSString -urlWithoutParameters]): new method that returns the
3062 url without its parameters.
3064 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
3066 * SoObjects/SOGo/NSDictionary+URL.[hm],
3067 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
3069 * UI/WebServerResources/UIxMailEditor.js: add support for
3070 additions of different types (to, cc, bcc) of recipients from the
3073 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
3076 * UI/Contacts/UIxContactsMailerSelection.m,
3077 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
3078 UI/Contacts/UIxContactsSelectionView.m to provide a different set
3079 of widgets depending on the application invoking the contact list.
3081 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3083 * UI/WebServerResources/ContactsUI.js: hide the current contact
3084 whenever the user changes of contact folder.
3086 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
3087 now provided by the template when loading the page.
3089 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3090 -iCalPersonWithUid:uid]): new method taken from removed module
3093 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3095 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
3096 -categoriesAsString]): same as below.
3098 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
3099 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
3101 * SoObjects/Appointments/SOGoAppointmentObject.m
3102 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
3103 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
3106 * SoObjects/Appointments/SOGoAppointmentFolder.m
3107 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
3108 hackish test to detect whether the request concernes VEVENT's or
3109 anything else. Return events only in the former case.
3110 ([SOGoAppointmentFolder
3111 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
3112 c_name quickfield so that the calendar list can identify the
3113 appointments with their complete "filename".
3115 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
3116 groupsOfClass:fromSource: to parse the given vcalendar.
3118 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
3120 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
3122 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
3125 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
3127 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3129 * SoObjects/Appointments/SOGoAppointmentFolder.m
3130 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
3131 sensitive to the CalDAV method names.
3132 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
3133 "calendar-query" CalDAV method name.
3135 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
3136 code coming originally from MailerUI.js.
3138 * UI/WebServerResources/UIxContactEditor.js: imitate the
3139 Thunderbird address book by completing the display name with the
3140 content of the first and last name fields, until the display name
3141 is modified manually.
3143 * UI/WebServerResources/generic.js: added a "trim" method to the
3146 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
3147 -displayName]): new method that returns the display name from "cn"
3148 or from the "displayName" key if found.
3150 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3151 -initSnapshot]): check if "[card n]" returns anything to avoid a
3154 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
3155 that returns an unparsed doctype definition for the pages.
3157 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3158 -vCard]): set the card's fn to attribute "displayName" if found
3161 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3163 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3164 -vCard]): handle the "streetAddress" and "l" fields.
3166 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
3167 header fields by converting the tables to DIVs and SPANs.
3169 * UI/WebServerResources/generic.css: attempted unification of font
3170 families and size across all the elements. changed the
3171 logConsole's "position" from "fixed" to "absolute" to avoid
3174 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3176 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
3177 empty the contact view when the current contact is being deleted.
3179 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
3180 parse the email field and provide the address full name if found
3181 as the "contactFN" parameter.
3183 * UI/WebServerResources/generic.js (openMailTo): do not give a
3184 name to the opened window so that serveral ones can be opened at
3187 * UI/MailPartViewers/UIxMailPartTextViewer.m
3188 ([UIxMailPartTextViewer -flatContentAsString]): override method by
3189 replacing carriage returns with "<br />" in the result string from
3190 super's implementation.
3192 * UI/Contacts/UIxContactView.m ([UIxContactView
3193 -_urlOfType:aType]): don't manage non-mailto urls through
3194 javascript, let the user decide what's best for him.
3196 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3197 -newAction]): transfer all the query parameters by using the
3198 "asURLParameters"'s result string from [self queryParameters].
3200 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
3201 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
3202 query parameters and put their values (if any) into the snapshot.
3204 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
3205 carriage-returns to "<br />".
3206 ([UIxContactView -workCompany]): explicitly initialize company to
3207 nil if org is nil or empty.
3209 * UI/WebServerResources/UIxContactEditor.js: updated validation
3210 code after we added and renamed some fields.
3212 * UI/WebServerResources/ContactsUI.js: added code to cache contact
3213 cards and to handle card updates.
3215 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3217 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
3218 test the length of the returned string since they will never be
3221 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
3222 return self if the process went successful, returns an exception
3223 otherwise (and only otherwise...).
3225 * OGoContentStore/OCSContactFieldExtractor.m
3226 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
3227 adapted method to the new VCard api. Since the cards are stored in
3228 vcard format, we no longer deal with a dictionary but with a
3231 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3233 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
3234 return a string with a "mailto" url.
3235 ([UIxContactView -_urlOfType:aType]): generic method to return a
3236 url string with a html anchor pointing to it.
3238 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
3239 since subclass "UIxContactEditor" did nothing. Implemented code to
3240 display and modify the values parsed from the vcards, displayed in
3241 a way similar to the Thunderbird addressbook.
3243 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3244 -save]): new dummy method.
3246 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3247 -save]): made method void.
3249 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3251 * UI/Contacts/UIxContactView.m: added many wrapper methods to
3252 display blocks of data à la Thunderbird Addressbook. If data is
3253 available, those wrappers (around the NGVCard methods) will
3254 enclose the results in a proper HTML output with the correct label
3255 (if present), otherwise it will return an empty string.
3256 ([UIxContactView -vcardAction]): new action to return the contact
3257 as text/vcard (for exporting).
3259 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
3260 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
3262 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
3263 -vCard]): create a new NGVCard instance when no data is available
3265 ([SOGoContactGCSEntry -save]): save the vCard using the new
3266 "versitString" API method/message.
3268 * UI/Contacts/UIxContactView.h: separated interface from
3271 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
3272 views and display them beneath the list.
3274 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3276 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
3277 the timezone even when it's the server timezone.
3279 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3280 -privateContacts:inContext:]): no long configure the calendar
3281 object with the user's timezone since it's now accessible
3282 application-wide throught the SOGoObject methods.
3284 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
3285 method. Removed the "backendTimeZone" method.
3287 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
3288 instead of SoComponent.
3290 * SoObjects/Appointments/SOGoAppointmentObject.m:
3291 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
3292 [self serverTimeZone] instead of "EST" (which was removed).
3294 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
3295 "timeZone" ivar and its accessors.
3297 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
3298 centralized method returing the timezone configured in the
3299 userdefaults db or "Canada/Eastern" if missing.
3300 ([SOGoObject -userTimeZone]): new centralized method returing the
3301 timezone of the current user or the server timezone if missing
3302 from the user configuration table.
3304 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3306 * UI/WebServerResources/SchedulerUI.js: implemented caching of
3309 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
3310 return a path based on the object's context instead of the first
3311 level in SOGo's object hierarchy...
3313 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3315 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
3318 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
3319 timezone ([self viewTimeZone]) to the WEMonthOverview component to
3320 avoid a confusion with the days.
3322 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
3325 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
3326 imitate Sunbird's synchronization between the 3 visible views.
3328 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
3329 sure the numbers in dateString are formatted so as to take 4 chars
3330 for the year and 2 for the day and the month, otherwise
3331 NSCalendarDate will return a nil date.
3332 ([UIxComponent -applicationPath]): return a path based on the
3333 object's context instead of the second level in SOGo's object
3336 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3338 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
3339 user's timezone abbreviation to the date string passed as parameter to
3340 NSCalendarDate to generate an accurate date instance. Do the same
3341 when no date is specified and today is chosen.
3343 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
3344 form's time values to integers before comparing them.
3346 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
3347 ([UIxCalAptListView -currentEndTime]): initialize the resulting
3348 dates timezone with [self viewTimeZone].
3350 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
3351 "viewTimeZone" ivar destined to hold an instance of the user's
3353 ([UIxComponent -viewTimeZone]): take the timezone from the user's
3356 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3358 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
3359 rearranged the layout.
3361 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
3362 manage showing and hiding appointment details.
3364 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3365 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
3366 timezone by taking the current user's timezone setting.
3368 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
3370 * SoObjects/Appointments/SOGoAppointmentObject.m
3371 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
3372 set default timezone to EST, although this code should be
3373 rewritten to handle a system and a user default value.
3375 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
3376 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
3377 take the values from the hour and minute INPUTs when data is
3378 POSTed since we no longer use the UIxTimeSelector component.
3379 ([UIxTimeDateControl -selectableHours])
3380 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
3381 template SELECTs to display reasonable and acceptable values
3382 instead of all the possibilities.
3384 * UI/WebServerResources/generic.js: adapted code for the new
3385 implementation of the UIxContactSelector component (added a
3386 "remove" button, removed the previous INPUT and replaced them with
3387 links of class "button").
3389 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
3390 UIxTimeDateControl.m.
3392 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
3393 ([UIxCalDayTable -currentAppointmentHour]): new methods that
3394 returns correctly formatted values used as attributes for JS code.
3396 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
3397 -initialContactsAsString]): renamed implementation of
3398 initialParticipants.
3399 ([UIxContactSelector -currentContactId])
3400 ([UIxContactSelector -currentContactName]): new methods used when
3401 listing the initial contacts in the widget. Currently, both return
3402 the person's cn but the latter should ultimately return a user
3405 * UI/Contacts/UIxContactSelector.h: separated interface from
3406 UIxContactSelector.m.
3408 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
3409 all javascript code is now put in Scheduler.js/generic.js.
3411 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
3412 moved into NSCalendarDate+Scheduler instead.
3414 * SoObjects/Appointments/SOGoAppointmentFolder.m
3415 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
3416 configure the timezone from SOGoUserFolder when the instance is
3418 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
3419 the value of the new "timezone" ivar.
3421 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3423 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
3424 the date selector in the first page and the container of the
3425 future calendar selector in the second page.
3427 * UI/WebServerResources/generic.js: added code for handling tabbed
3430 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
3431 returns the bundle name associated to the current running product.
3433 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3435 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
3436 exception by invoking a timeout on the opener rather than invoking
3437 the list refresh method.
3439 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
3442 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
3443 ([UIxCalWeekView -prevWeekQueryParameters])
3444 ([UIxCalWeekView -nextWeekQueryParameters])
3445 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
3446 that return the dates relatively to the current day.
3447 ([UIxCalWeekView -lastWeekName])
3448 ([UIxCalWeekView -currentWeekName])
3449 ([UIxCalWeekView -nextWeekName])
3450 ([UIxCalWeekView -weekAfterNextWeekName])
3451 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
3452 methods that returns the label for the corresponding weeks.
3454 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
3455 used by UIxCalDayView and UIxCalWeekView to display the events
3456 occuring in one or more days.
3458 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3460 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
3461 entries in the new "monthMenu" and "yearMenu".
3463 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
3464 method to return the current day as a string formatted depending
3465 on the current locale.
3467 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
3468 ([UIxCalAptListView -endDate]): "today" is now the default filter
3469 for displayed events.
3470 ([UIxCalAptListView -currentSerialDay]): new method returning the
3471 date of the current enumerated appointment in serial form
3474 * UI/WebServerResources/SchedulerUI.js: added code to select the
3475 relevant day when an appointment is selected. Added code to popup
3476 a month and a year menu whenever the header entries are clicked in
3477 the calendar widget.
3479 * UI/WebServerResources/generic.js: made addClassName and
3480 removeClassName methods of HTMLElement.
3482 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3484 * UI/WebServerResources/MailerUI.js: fixed the contact creation
3485 from email addresses.
3487 * UI/WebServerResources/generic.js: centralized the search-related
3488 functions here since the same code was used across the 3
3491 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
3492 ([UIxCalAptListView -endDate]): return the required dates needed
3493 depending on the value given to the "filterpopup" url parameter.
3495 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
3496 code by invoking UIxComponent's labelForKey:.
3498 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
3499 [self pageResourceManager] instead of [self resourceManager].
3501 * UI/Contacts/UIxContactEditorBase.m: invokes
3502 globallyUniqueObjectId on the clientobject's class instead of the
3503 hardcoded "SOGoFolder".
3505 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
3506 -newAction]): redirect the "new" action to the personal (default)
3509 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
3510 +objectWithName:inContainer:]): new constructor.
3512 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3513 -lookupContactWithId:recordId]): always create a contact object,
3514 even if it does not exist.
3516 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3518 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
3519 component that lays out the different components of SOGoCalendar.
3520 Only serves as an Objective-C counterpart to its xml template.
3522 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
3525 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
3526 display a widget to handle the information displayed in the
3527 appointments list. Not currently used, lacks implementation.
3529 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
3530 display a calendar as a dynamic widget from where one can select
3531 the current visible day.
3533 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
3534 extracted from UIxCalInlineMonthOverview.m.
3536 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
3537 calendarPageURL methods. The javascript code is handled by .js
3538 files as much as possible...
3540 * UI/WebServerResources/ContactsUI.js,
3541 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
3544 * UI/WebServerResources/SchedulerUI.js: implemented functions to
3545 handle the new widgets. XmlHTTPRequest code taken from
3548 * UI/WebServerResources/generic.js: put some functions related to
3549 element selections as methods to HTMLElement and HTMLTableElement.
3551 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
3552 display the list of appointments (embodies the code-size of
3553 UIxCalAptListView; answers to the "aptlist" method).
3555 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3557 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
3558 -correctURLAction]): new short action method replacing the method
3559 below by taking far less code.
3561 * SoObjects/Appointments/SOGoAppointmentFolder.m
3562 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
3563 with an action in the view-related code.
3565 * UI/Scheduler/UIxAppointmentEditor.m: invoke
3566 "stringByEscapingHTMLString" on the resulting value to avoid
3567 issues with accented characters.
3568 ([-jsCode]): removed method since the javascript code was merged
3569 into SchedulerUI.js.
3571 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3573 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
3574 new class method that returns an iCalPerson based on the UID given
3577 * UI/Contacts/UIxContactsListViewContainerBase.m:
3578 UIxContactsListViewContainer renamed to serve as a base class for
3579 the contact lists in both the contact editor and the contact
3582 * SoObjects/Contacts/SOGoContactLDAPFolder.m
3583 ([SOGoContactLDAPFolder
3584 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
3585 setUserIdentifier:setRootDN:]): an LDAP field specifying the
3586 loginname of the users can now be specified.
3588 * UI/WebServerResources/generic.js: added code to manage contact
3589 lists through the new implementation of the UIxContactSelector.
3591 * UI/Templates: put the templates related to SchedulerUI in its
3594 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3595 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
3596 entry for "uid" with the field name representing the login name of
3597 the user in the corresponding LDAP branch.
3599 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3601 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
3602 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
3603 request is a PUT, always create an entry, even if we're not sure
3606 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3608 * UI/WebServerResources/ContactsUI.js: implemented live-search.
3610 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
3611 -appendSystemSourcesInContext:context]): populated method with
3612 code that creates entries mapped to instances SOGoContactFolder,
3613 based on the configuration found in the NSUserDefaults under the
3614 key "SOGoLDAPAddressBooks".
3615 ([SOGoContactFolders
3616 -lookupName:nameinContext:contextacquire:acquire]):
3617 "contactsources" do not exist anymore, SOGoContactFolder was split
3618 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
3619 and one protocol: SOGOContactFolder, instead.
3620 ([SOGoContactFolders -contactFolders]): new accessor used by the
3621 views of SOGoContactXXXFolder to list the possible sources.
3623 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
3624 defines the methods that UIxContactsView, ..Editor and so on...
3627 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
3628 defines the methods that UIxContactsListViewBase expects as well
3629 as the data fields returned in the contact lists.
3631 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
3632 returns entries an LDAP server. Conforms to the new
3633 SOGOContactFolder protocol.
3635 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
3636 returns a vCard based on contact entries from an LDAP server.
3637 Conforms to the new SOGOContactObject protocol.
3639 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
3640 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
3641 entry for the textual representation of the vCard.
3643 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
3646 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
3647 "SOGoContactObject".
3649 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
3650 method that generates a textual representation of the vcard.
3652 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
3654 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
3655 "SOGoContactFolder".
3657 * SoObjects/Contacts/SOGoContactSource.h,
3658 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
3661 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
3662 -singleAttributeWithName:key]): new method that returns the first
3663 object associated with an ldap key (where generally one value is
3666 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
3667 map the entry into an NSDictionary for processing by
3668 UIxContactsListViewBase.m with the least possible overhead.
3670 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
3673 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3675 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3676 -privateContacts:inContext:]): now returns an instance of
3679 * UI/Contacts/UIxContactsListViewContainer.m
3680 ([UIxContactsListViewContainer -contactFolderName]): new method to
3681 return the absolute path to the current contact folder, called
3682 from within the template.
3684 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3685 JS code to initialize the 'currentContactFolder' generic var.
3687 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
3688 +contactFolderWithSource:inContainer:andName:]): new class
3689 method meant to return an instance connected to the specified
3690 source. Currently useless but won't be anymore in the next few
3693 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
3694 the "lookupFreeBusyObject" method since it does not exist.
3696 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
3697 as a "view" for the SOGoContactFolders object. Does nothing but
3698 redirect the browser to the URL of the personal address book of
3699 the user. It does not even have a template.
3701 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
3702 implementing the SOGoContactSource protocol. Does nothing
3703 currently but will be used to implement access to the personal
3704 address book of the user stored in the SOGo database.
3706 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
3707 protocol defining an API common to all possible types of contact
3710 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
3711 serving as the root of the contact folders available to the
3712 current user. Correctly lists the contact sources in webdav.
3714 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3716 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
3717 -composeAction]): new action method that permits external object
3718 to write a message from the default (primary) account.
3720 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3721 -initSnapshot]): new method with code taken from "defaultAction"
3722 but needed for others.
3723 ([UIxContactEditorBase -writeAction]): new action designed to
3724 compose the correct URL needed to obtain the MailerUI's email
3725 editor with the correct "mailto" parameter.
3727 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
3728 Common so that other modules can use it.
3730 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
3731 easier to manage both ajax and non-ajax requests.
3733 * UI/Contacts/UIxContactsFilterPanel.m: clone of
3734 UIxMailFilterPanel, but applicable to contact lists.
3736 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
3737 -vcardContentFromSOGoContactRecord]): use the new standard methods
3738 created for each type of entry. If a line is determined to not
3739 contain information, it will be skipped.
3741 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3742 +initialize]): init defaultMailDomain with the user default
3743 "SOGoDefaultMailDomain".
3745 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3747 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3748 -saveAction]): reorganized methods to only have ONE return point.
3749 Invoke saveRecord: directly on the clientObject instead of
3750 saveContentString, which does the same thing anyway.
3752 * SoObjects/Contacts/NSDictionary+Contact.m
3753 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
3754 method to convert the dictionary returned with the user submission
3755 to a record in VCARD format to be stored in the database.
3757 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3759 * UI/WebServerResources/MailerUI.js: when opening the context menu
3760 of the message list, select the message below the mouse cursor and
3761 deselect the other selected messages temporarily. This mimics the
3762 behaviour of Thunderbird for that matter and was already
3763 implemented for the entries of the folder tree.
3765 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
3766 -iconForMenuItem]): new method that returns the fully qualified
3767 relative URL to the icon representing the mailbox, or the default
3768 mailbox icon if needed.
3770 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3771 -urlForResourceFilename:filename]): automatically return an empty
3772 string whenever the filename passed as argument is nil.
3774 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
3775 "desc" parameter set to 1 so that they are sorted in descending
3776 order by default. Also, added "onHeaderClick()", triggered by
3777 clicking on the message list header elements.
3779 * UI/MailerUI/UIxMailSortableTableHeader.m
3780 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
3782 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3783 -isSortedDescending]): defaults to "YES" when the sort order is
3786 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3788 * UI/WebServerResources/MailerUI.js:
3789 - message cache: set the max num of cached messages to 20. Limit
3790 the cached message size to 30000 bytes.
3791 - ajax: when a message request is called while one is already
3792 being performed, the latter will be cancelled. Idem when
3793 retrieving the content of a mailbox.
3794 - folder tree: when a mailbox is selected because of the URL
3795 requested (initMailboxSelection), the dtree is expanded throughout
3796 the mailbox entry's parent hierarchy to ensure it is made visible
3797 when the page is being displayed. (new function: expandUpperTree).
3798 - mailbox loading: when loading a mailbox where a message was
3799 previously selected, we invoke its url with the "pageforuid"
3800 parameter correctly specified. During callback processing, we scan
3801 the table for the related row and reselect it.
3802 Also, the message area is set blank before loading any mailbox.
3804 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3805 -defaultAction]): if the "pageforuid" parameter is passed in the
3806 url, take its value and invoke [self firstMessageOfPageFor:]
3807 consequently to deduce the first message to display. Otherwise,
3808 set it to "idx", otherwise set it to 0.
3809 ([UIxMailListView -firstMessageOfPageFor:]): new method
3810 that determines the first message of the page where the message
3811 passed as parameter is contained.
3813 * UI/WebServerResources/UIxMailListView.js: removed this module,
3814 its code was put in MailerUI.js instead.
3816 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3818 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
3819 which returns the nodes for the parent specified in "parentMenu".
3820 Used to generate the javascript code for the folder dtree.
3822 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
3823 using that container-template are now using UIxMailMainFrame
3824 since UIxMailPanelFrame had no real interest. File removed.
3826 * UI/WebServerResources/dtree.{css,js}: new files to handle
3827 javascript-generated mailbox tree. Modified from original version
3828 by integrating the previous code with the one we are using for
3829 selections and mailbox handling. Minor visual enhancements too...
3831 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3833 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
3834 returned, put it in an NSArray before returning it (fixes
3837 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3839 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
3840 that returns a url string stripped from its "http://hostname"
3843 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
3845 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
3847 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3849 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
3850 -mailDateFormatter]): retrieve the timezone from the user settings
3851 and pass it to the returned dateFormatter. Also, the dateFormatter
3852 is kept in a static variable to avoid useless
3853 creations/destructions.
3855 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
3856 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
3858 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
3859 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
3860 s/Criteria/Text/ to handle the "criteria" form parameter.
3862 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3864 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
3865 to integrate better with the firefox look&feel. Added entries for
3866 the new "menu" DIV class (popup menus).
3868 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
3869 takes any chunk of text as param, detects the user email and the
3870 optional first and last names and return them in a well-formatted
3871 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
3872 namespace conflict. Added "onMenuClick(node, event, menuId)" to
3873 handle popup menus through "onclick" element attributes (node =
3874 this, event = event and menuId = name of the menu DIV id to
3877 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3878 -snapshot]): add an entry for "email" into the snapshot
3879 dictionary if a "contactEmail" URL parameter was detected and if
3880 the entry for "email" is empty.
3882 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
3883 button now invokes the newContact() js function in ContactsUI.js
3884 instead of opening "new" directly. newContact() pops up a window
3885 stripped from its navigation bar.
3887 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
3888 bundle (AddressBook).
3890 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
3891 "menu" and id "addressMenu" have the header email addresses
3892 display it with the new menu code in generic.js.
3894 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
3895 replaced the body tables with a div of class "pageContent"
3896 (standardization across the page templates).
3898 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
3899 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
3900 those are now inherited from UIxPageFrame.
3902 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
3904 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
3905 a "mailto" URL parameter is detected and the "to" array is empty,
3906 initialize "to" with the value of "mailto" before returning it.
3908 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
3909 -composeAction]): rewrote method in a cleaner way and with usage
3910 of the URL extensions to NSString and NSDictionary (see below).
3911 Also, if a "mailto" url parameter is detected, pass it to the
3914 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
3917 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
3918 returns a parameter string to add to a base URL.
3920 * UI/Common/NSString+URL.m ([NSString
3921 -composeURLWithAction:parameters:andHash:useHash]): new method to
3922 compose a complete URL from an object URL with parameters and an
3923 optional '#' character.
3925 * UI/Common/UIxPageFrame.h: separated interface from
3928 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
3930 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
3932 * UI/WebServerResources/generic.js: added code to manage
3933 selections within HTML containers.
3935 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
3936 added method to determine the possible URL for a product-specific
3937 javascript filename of the forme <productname>.js.
3938 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
3939 ([UIxPageFrame -isPopup]): new method to determine whether the
3940 application navigator bar should be displayed (main page) or not
3943 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3944 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
3945 the user through LDAP.
3947 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3949 * The toolbar code from the MailerUI product was taken, renamed as
3950 "UIxToolBar" and put into UI/Common. Toolbar plists were created
3951 for the Contacts and Scheduler products and put in their respectir
3952 Toolbars/ subdirectories. Finally,
3953 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
3954 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
3955 and an invocation to the UIxToolbar component was put at the top
3956 of UI/Templaces/UIxPageFrame.wox.
3958 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
3959 within the templates whether a separator should be displayed.
3961 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
3962 that returns NO if the toolbar is empty.
3964 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3966 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
3968 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
3969 new toolbar objects.
3971 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
3973 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
3974 linkbanner as a DIV instead of a TABLE.
3976 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
3978 returns 'YES' to request the display of the navigation bar between
3981 2006-06-15 ludovic@inverse.ca
3983 * It's now possible to set the default
3984 domain using for email using the
3985 SOGoDefaultMailDomain preference key.
3987 2006-06-15 ludovic@inverse.ca
3989 * Initial import of SOGo from trunk.