1 2007-06-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
4 -setCurrentPassword:newPassword]): new stub method.
5 ([SOGoUser -dateFormatterInContext:context]): new method that
6 returns an instance of SOGoDateFormatter configured based on the
9 * UI/Common/UIxPageFrame.m ([UIxPageFrame
10 -relativePreferencesPath]): new method.
12 * UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
13 removed useless method.
15 * SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
16 different configurable formats (long and short date + time).
18 * SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
20 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
21 -isInternetRequest]): removed method.
23 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
24 -jsonRepresentation]): new method with an explicit name.
26 * UI/PreferencesUI/product.plist: new bundle that provides a web
27 ui for handling user defaults.
29 * UI/Scheduler/UIxTaskView.[hm]: removed unused module.
31 * UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
33 * SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
35 2007-06-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
37 * SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
39 2007-06-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
41 * UI/Scheduler/NSArray+Scheduler.m ([NSArray
42 -compareEventsAscending:otherEvent]): no longer use compare: on
43 the time objects since one of them could be an NSNull, which
44 crashes when comparing with anything.
46 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
47 -eventsListAction]): sort events from here.
48 ([UIxCalListingActions -tasksListAction]): sort tasks from here.
50 * SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
51 module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
53 * SoObjects/Appointments/SOGoAppointmentFolder.m
54 ([SOGoAppointmentFolder
55 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
56 no longer sort elements from here.
58 2007-06-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
60 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
61 -aclsForUser:uid]): implemented method by forwarding the request
62 to the container. This fixes a bug where users could no longer
63 read emails from shared folders.
65 * SoObjects/Appointments/SOGoCalendarComponent.m
66 ([SOGoCalendarComponent -init]): "isNew" is no longer defined
67 here, but rather in its parent class.
69 * UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
70 -stringForSecondsSinceThe70s:seconds]): new utility method.
72 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
73 -eventsListAction]): no longer reduce the end day of one day for
74 all day events since everything has been fixed in
75 OCSiCalFieldExtractor.
77 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
78 -extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
79 the end date of all day events of 1 so that they stay on their
82 2007-06-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
84 * UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
86 * UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
88 ([-fetchCoreTasksInfos]): removed method.
90 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
91 -init]): initialize an instance of SOGoDateFormatter.
92 ([UIxCalListingActions -eventsListAction]): the display start and
93 end dates are added to the listing for each event.
95 * UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
97 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
98 -isAllDay]): returns YES if the "hm" url parameter is set to
100 ([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
101 is displayed one day earlier.
103 2007-06-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
105 * UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
106 -_setupContext]): take the range of dates specified by the popup
109 * UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
110 WODirectAction that returns WOResponse objects with the events or
111 todos satisfying the parameters passed in the url.
113 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
114 -takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
115 "isAllDay" into account and compute the amount of days to pass to
118 2007-06-06 Francis Lachapelle <flachapelle@inverse.ca>
120 * SoObjects/SOGo/NSNumber+Utilities.m: initial import.
121 * SoObjects/SOGo/NSNull+Utilities.m: initial import.
122 * UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
123 new method that returns a json-formatted array of the visible tasks
124 for the current user.
126 2007-06-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
128 * SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
129 object must be present in the list of UIDs we delete the object
130 from. Otherwise Calendar objects having no organizer and no
131 attendees will remain in their owner's Calendar.
133 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
134 -_urlPreferringParticle:expectedoverThisOne:possible]): remove the
135 first 3 elements of the path array if the url returned by
136 baseURLInContext: returns a hostname.
138 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
139 -_adjustOwner]): sharedFolderName and otherUsersFolderName may be
140 nil, in which case a crash happens when calling hasPrefix:.
141 ([SOGoMailFolder -_sharesACLs]): same as above.
142 ([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
143 otherUsersFolderName is nil, we return nil.
144 ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
145 nil from [self otherUsersPathToFolder], we return nil too.
147 2007-06-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
149 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
150 -_urlPreferringParticle:expectedoverThisOne:possible]): unescape
151 the result of [self baseURLInContext:] to avoid a double escaping
152 in the resulting string.
154 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
155 the user has the "ObjectReader" role on the parent container, then
156 he is granted the "ObjectViewer" role on this object. Same for
157 "ObjectEraser", although this might change later.
159 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
160 -toolbar]): determine the toolbar filename based on the
161 permissions declared by the securitymanager. The role mechanism
162 has been adjusted on a lowerlevel so we can simplify the code.
164 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
165 -initWithName:newNameinContainer:newContainer]): read the content
166 directly from here. That way we can determine whether the object
168 ([SOGoContentObject -aclsForUser:uid]): if the object is new and
169 the ObjectCreator role is enabled, we also grant the ObjectEditor
170 role to the current user.
172 * UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
173 changed the method paradigm to only return HTTP code 204. Not test
174 is done whatsoever since the security manager does it for us.
176 * UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
177 removed method because the same exists in UIxFolderActions.m
179 * UI/Contacts/UIxContactsUserRightsEditor.m
180 ([UIxContactsUserRightsEditor
181 -setUserCanReadObjects:userCanReadObjects]): new method.
183 * SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
184 "FolderEraser" and special permission "Access Object". Removed
185 role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
186 can be used instead. Removed "FolderReader" since it is useless.
188 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
189 -vCard]): directly use the "content" ivar since it is initialized
190 during object creation.
192 * SoObjects/Contacts/SOGoContactLDAPFolder.m
193 ([SOGoContactLDAPFolder -init]): no longer handle the
194 nameInContainer no the container ivars. They were removed because
195 this class is a descendant of SOGoObject which already has them.
196 ([SOGoContactLDAPFolder -davDisplayName]): new overriden method
197 returning "displayName".
198 ([SOGoContactLDAPFolder -isFolderish]): new overriden method
201 * SoObjects/Appointments/SOGoCalendarComponent.m
202 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
203 ([SOGoCalendarComponent -findParticipant:user]): new name for
204 method "participant:".
205 ([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
206 findparticipant but taking a uid string as parameter.
207 ([SOGoCalendarComponent -contentAsString]): don't regenerate the
208 iCalendar automatically. Instead, this is done only when the user
209 is a "date and time viewer".
210 ([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
211 (modifier and responder) into account by compiling them with the
214 * SoObjects/Contacts/SOGoContactFolder.h: removed
215 "nameInContainer" from the list of required methods.
217 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
218 -davContentType]): returns "text/calendar".
220 * SoObjects/Contacts/SOGoContactLDAPFolder.m
221 ([SOGoContactLDAPFolder -davResourceType]): declare the correct
222 groupdav resource-type.
224 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
225 -davContentType]): same as below.
227 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
228 -initWithName:newNameinContainer:newContainer]): new overriden
229 method setting the custom owner directly.
231 * SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
232 -davContentType]): same as below.
234 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
235 -davContentType]): same as below.
237 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
238 declare "httpd/unix-directory".
240 * SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
241 "UTC" as fallback timezone instead of "Canada/Eastern".
242 ([-hasEmail:email]): make use of the new NSArray's
243 containsCaseInsensitiveString: method.
245 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
246 -davContentType]): declare "message/rfc822" as content type.
248 * SoObjects/Appointments/SOGoAppointmentFolder.m
249 ([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
251 ([SOGoAppointmentFolder
252 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
253 ([-fetchContentObjectNames]): commented out method since it was
254 usefull only for testing Funambol.
256 * SoObjects/SOGo/NSArray+Utilities.m ([NSArray
257 -containsCaseInsensitiveString:match]): an enhanced version of
260 * UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
262 ([-showMarkDeletedButton]): removed useless method.
263 ([-showTrashButton]): removed useless method.
265 * SoObjects/Appointments/iCalEntityObject+SOGo.m
266 ([iCalEntityObject -userIsParticipant:user]): new proxy method
267 that invoked isParticipant on self for each possible email
268 addresses of the user passed as parameter.
269 ([iCalEntityObject -userIsOrganizer:user]): same as above.
271 * SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
274 * SoObjects/Appointments/SOGoAppointmentObject.m
275 ([SOGoAppointmentObject
276 -saveContentString:contentStringbaseVersion:baseVersion]): remove
277 method since an event may not have an organizer.
279 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
280 -GETAction:localContext]): clarified method. Added support for
281 content-type (thanks to Helge Hess).
282 ([SOGoObject -initWithName:_nameinContainer:_container]):
283 initialize and retain the owner.
284 ([SOGoObject -davContentType]): returns "text/plain".
286 2007-05-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
288 * UI/Common/UIxObjectActions.m ([UIxObjectActions
289 -addUserInAclsAction]): send an acl addition mail.
290 ([UIxObjectActions -removeUserFromAclsAction]): send an acl
293 * UI/Common/UIxFolderActions.m ([UIxFolderActions
294 -_realActionWithFolderName:folderDict]): handle the possible
295 presence of the "mail-invitation" url parameter. If present, the
296 user will be redirected to the relevant folder.
298 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
299 ([SOGoUser -language]): new method that returns the user's
300 preferred language, or the system's if none has been set yet.
302 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
303 that returns the full dav url to self.
304 ([SOGoObject -soURL]): same as above but for the so url (Web UI).
305 ([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
306 returns the full so url to the base of the SOGo module to which
307 self belongs, and for the specified user.
308 ([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
309 but for the current user.
310 ([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
311 required by the acl advisory templates and which returns a link
312 the target user can click to activate its new subscription.
313 ([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
314 but for inclusion of the application/x-sogo-notification part,
315 which will be handled by the Lightning enhancer plugin.
317 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
318 ([UIxMailFolderActions -unsubscribeAction]): new stub methods that
319 do nothing yet since imap folder subscription is not handled yet.
321 * SoObjects/SOGo/SOGoContentObject.m
322 ([-hasSupportForDefaultRoles]): removed method.
324 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
325 -getFullEmailForUID:uid]): new method that returns the username +
328 * SoObjects/Appointments/SOGoCalendarComponent.m
329 ([SOGoCalendarComponent +initialize]): the default language for
330 mail templates is now set to English.
332 * UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
333 SOGoACLAdvisory implementing the french template for user removal
336 * UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
337 SOGoACLAdvisory implementing the french template for user
340 * UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
341 SOGoACLAdvisory implementing the english template for user removal
344 * UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
345 SOGoACLAdvisory implementing the english template for user
348 * UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
349 supercall of all the acl advistory templates. The model is based
350 on SOGoAptMailNotification except that the template encapsulates
351 the message to be sent. Later, we might create a superclass common
352 to all template-based emails.
354 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
355 -addRange:newRange]): new method that store a string
356 representation of the NSRange passed as parameter.
357 ([NSMutableArray -hasRangeIntersection:testRange]): tests whether
358 any range contained in self intersect with the one passed as parameter.
360 * SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
361 store ranges in an array to prevent them from intersecting with
362 each other during the passes.
364 2007-05-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
366 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
367 -primaryFetchMailboxInfo]): useless method. Removed.
369 2007-05-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
371 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
372 -toManyRelationshipKeys]): invoke [self subfolders].
373 ([SOGoMailFolder -subfolders]): new method containing what used to
374 be in toManyRelationshipKeys.
375 ([SOGoMailFolder -subfoldersURL]): same as above but returns imap
378 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
379 -allFolderPaths]): renamed version of "allFolderPathes", sorted by
380 named and at the beginning of which we put the predefined folders.
382 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
383 -emptyTrashAction]): new method inspired by a similar one from
384 UIxMailListView, to which we added the ability to remove
387 * UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
388 method. Replaced with a similar one in UIxMailFolderActions.
390 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
391 -renameFolderAction]): implemented method.
392 ([UIxMailFolderActions -deleteFolderAction]): no longer delete the
393 specified folder. Instead, we put it in the trash folder.
395 * UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
396 method, replaced with a similar method in the new
397 UIxMailFolderAction class module.
398 ([-deleteFolderAction]): idem.
400 * UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
401 -createFolderAction]): new method implementing subfolder creation.
402 ([UIxMailFolderActions -renameFolderAction]): new method
403 implementing subfolder renaming (basic implementation to be
405 ([UIxMailFolderActions -deleteFolderAction]): new method
406 implementing folder deletion.
408 * UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
409 web actions related to the handling of imap folder.
411 2007-05-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
413 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
414 -ownerInContext:localContext]): overriden method because we are an
415 IMAP4 client and we need a bit more intelligence to deduce the
416 owner of the current folder.
417 ([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
418 return an NSException so we need to be careful here to avoid a
420 ([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
421 NSException so we need to be careful here to avoid a crash.
423 * SoObjects/Mailer/SOGoMailAccounts.m
424 ([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
425 there is no longer any concept of Intranet or Internet connection
428 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
429 -sharedFolderName]): new method.
430 ([SOGoMailAccount -otherUsersFolderName]): new method.
432 * UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
433 new javascript code and the new UIxMailAccountActions class.
435 * UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
436 javascript code and the new UIxMailAccountActions class.
438 * UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
439 new javascript code and the new UIxMailAccountActions class.
441 * UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
442 -listMailboxesAction]): new method that returns a json-formatted
443 tree of all the mailboxes available to the current user.
445 * UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
446 web actions related to the handling of mail accounts.
448 * SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
451 * SoObjects/SOGo/NSObject+Utilities.m ([NSObject
452 -jsonRepresentation]): new interface method meant to be overriden
453 by the primitive classes.
455 2007-05-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
457 * UI/MailerUI/UIxMailSplashView.m: removed.
459 * SoObjects/Appointments/SOGoCalendarComponent.m
460 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
461 the uid to the list only when the user email is recognized by the
464 2007-05-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
466 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
467 -isDeletionAllowed]): completed method with the new imap acl api.
469 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
472 * SoObjects/SOGo/SOGoPermissions.m: added the new role
473 "SOGoMailRole_MessageEraser".
475 * UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
476 ([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
477 "defaultUserID" method into account.
479 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
480 ([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
481 "defaultUserID" method into account.
483 * UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
484 methods to support the IMAP acls mentionned in the RFC 4314,
485 removed the ones specific to Cyrus.
487 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
488 mandatory method for subclasses. Removed the SOGoDefaultUserID
491 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
492 overriden method to return @"<default>".
494 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
495 -defaultUserID]): overriden method to return @"<default>".
497 * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
498 -aclsForUser:uid]): overriden method.
499 ([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
500 ([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
501 ([SOGoMailFolder -defaultUserID]): overriden method.
502 ([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
504 2007-05-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
506 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
507 -aclUsersForObjectAtPath:objectPathArray]): new method that being
508 forwarded the calles to aclUsers for the GCS-based subclasses of
511 * SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
512 methods that would have been used to support IMAP acls. Replaced
513 them with the new protocol for them that has been implemented in
514 SOGo during the last few weeks.
516 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
517 -hasSupportForDefaultRoles]): override method by returning "YES".
519 * SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
520 -addObjectUniquely:object]): new method with an explicit name.
522 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
523 "acl" to "aclUsers". Now designed to return only the uid of the
524 users involved in an ACL.
525 ([SOGoObject -hasSupportForDefaultRoles]): new method returning
526 "NO" by default. To indicate to the acl editor that we don't want
527 to handle a default user.
529 * SoObjects/SOGo/SOGoPermissions.[hm]: added the
530 SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
533 * UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
534 provides a view to the IMAP acls.
536 * UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
538 * UI/WebServerResources/MailerUI.js: replaced all invocations of
539 addEventListener to the use of prototype's Event object. Also,
540 configured all menus programmatically following descriptions lists
541 containing their callbacks, or nulls, submenus id or separators.
543 2007-05-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
545 * UI/Common/UIxObjectActions.m ([UIxObjectActions
546 -addUserInAclsAction]): save the previous roles of the user
547 (unlikely) or the default roles, or None instead of saving the
548 roles that should appear the first time in the role editor when no
549 default has been set...
551 * SoObjects/SOGo/SOGoObject.m: defined a new constant
554 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
555 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
556 ignore the "AuthorizedSubscriber" role and add the "None" role
557 when no other role is found.
559 * UI/Common/UIxAclEditor.m: added a button for the new default
562 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
563 -_initRights]): don't take the "None" role into account when
564 initializing the list of current roles.
566 * SoObjects/SOGo/SOGoPermissions.m: added a new void role
569 2007-05-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
571 * SoObjects/SOGo/NSString+Utilities.m ([NSString
572 -_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
573 There is no need to subscract the start from the length if a space
574 is not found since the range has not changed either. Finally, the
575 first character before the url might also be a tab or a cr, so we
576 match it against the "urlAfterEndingChars" custom NSCharacterSet.
577 ([NSString -stringByDetectingURLs]): modified to handle email
578 addresses and add a correct "mailto:" link.
580 2007-05-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
582 * SoObjects/Appointments/SOGoAppointmentFolder.m
583 ([SOGoAppointmentFolder -fetchContentObjectNames]): override
584 method to return the events in the range of 2 weeks ago up to 4
587 * UI/MailPartViewers/UIxMailPartTextViewer.m
588 ([UIxMailPartTextViewer -flatContentAsString]): use the new
589 "stringByDetectingURLs" method to offer clickable urls.
591 * SoObjects/SOGo/NSString+Utilities.m ([NSString
592 -stringByDetectingURLs]): this new method replaces passive URLS
593 with active ones for HTML resolution of the text.
595 2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
597 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
598 -asQPSubjectString:encoding]): simplified method.
599 The headers indicates "utf-8" again thank to our fix in
602 * SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
605 2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
607 * UI/Common/UIxObjectActions.m ([UIxObjectActions
608 -removeUserFromAclsAction]): implemented this method which was
609 missing and is required to remove users from ACLs.
611 * UI/Common/UIxFolderActions.m ([UIxFolderActions
612 -subscribeAction]): folderDict was not autoreleased, resulting in
615 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
616 -primaryFetchProfile]): when building with libFoundation, don't
617 use the "propertyList" method from NSString. Rather, we convert
618 the string to an NSData instance and passit as parameter to
619 NSDeserializer. This way, we obtain a mutable dictionary rather
620 than an immutable one.
622 * SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
623 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
624 constant string "contentTypeValue".
625 contentTypeValue is now set back to iso-8859-1 since NGMime
626 converts extracts the data in that encoding.
628 2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
630 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
631 -checkLogin:loginToCheckandPassword:passwordToCheck]): if a
632 "bindFields" value is present in the user defaults, use the
633 specified fields to find the dn of the user to bind.
634 ([LDAPSource -allEntryIDs])
635 ([LDAPSource -fetchContactsMatching:match])
636 ([LDAPSource -lookupContactEntry:entryID])
637 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
638 bind and unbind the connection on each request.
640 * UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
642 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
643 -contactSearchAction]): simplified method to use the facilities
644 provided by the LDAPUserManager. No longer takes care of the
645 "ldap-only" url parameter since all requests are handled by the
648 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
649 -primaryFetchProfile]): check that the value returned is not null
650 before interpreting it.
652 * SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
653 -contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
654 ([LDAPUserManager -_fillContactMailRecords:contact]): if the
655 system email is already present, remove it before adding it.
657 * SoObjects/SOGo/LDAPSource.m ([LDAPSource
658 -checkLogin:loginToCheckandPassword:passwordToCheck]): check that
659 loginToCheck is not empty.
660 ([LDAPSource -fetchContactsMatching:match]): check that match is
662 ([LDAPSource -lookupContactEntry:entryID]): check that entryID is
664 ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
667 2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
669 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
671 ([SOGoUser -systemEmail]): returns the email formed from the
672 username and the default mail domain.
673 ([SOGoUser -hasEmail:email]): test whether the user has the
674 specified email, in a case-insensitive way.
676 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
677 -LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
678 check login information.
680 * SoObjects/Contacts/SOGoContactLDAPFolder.m
681 ([SOGoContactLDAPFolder
682 +contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
683 no longer manage LDAP connections. The requests are forwarded to
684 the relevant LDAPSource instead.
686 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
687 -appendSystemSources]): pass LDAPSource objects to
688 SOGoContactLDAPFolder instances.
690 * SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
691 address of the "from" field before sending the message. Otherwise,
692 sending the mail won't work.
694 * UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
695 rewrote this method to request all the available email identities
696 for the current user. Also, the from field also contains the full
697 name of the user, not just his/her email address.
699 * SoObjects/Appointments/SOGoCalendarComponent.m
700 ([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
701 from the previous module iCalEntityObject+Agenor.
702 ([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
703 ([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
706 * SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
707 replacing the SOGoContactLDAPEntry module. It was renamed as such
708 because it now receives a dictionary instead of an NGLdapEntry.
709 It thus can now handle data from any source of LDIF data, not
710 only coming from LDAP.
712 * SoObjects/SOGo/LDAPUserManager.[hm]: new class module
713 implementing most of what used to be the AgenorUserManager class.
714 The difference is that users are cached in the forme of
715 dictionaries and many sources are used. Also, it can be used to
716 search LDAP contacts.
718 * SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
719 the concept of "ldap source", to be used by all the classes
720 needing access to LDAP-provided information: addressbooks and the
721 user manager. Most the method thereing are transcriptions of
722 methods previously found in SOGoContactLDAPFolder. It also contain
723 utility methods for user matching and authentification.
725 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
726 module, rendered useless by code refactoring.
728 * SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
729 with the freshly written "LDAPUserManager".
731 2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
733 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
734 SOGOContactLDIFEntry.
736 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
737 module, obsoleted by code in SOGo/LDAPSource.[hm].
739 2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
741 * UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
742 new method with an explicit name.
744 2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
746 * SoObjects/Appointments/SOGoCalendarComponent.m
747 ([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
748 replacing "isOrganizer:orOwner:" by taking only one instance of
749 SOGoUser as parameter.
750 ([SOGoCalendarComponent -participant:user]): new method replacing
751 the previous "isParticipant" boolean method by returning the first
752 participant matching the user passed as parameter. This method is
753 used so that both the regular email address and the "system email
754 address" of the user are matched against the participants emails.
756 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
757 -getSystemEMailForUID:uid]): new method that returns the email
758 formed with the user's uid and the default mail domain.
760 * SoObjects/Appointments/SOGoCalendarComponent.m
761 ([SOGoCalendarComponent -rolesOfUser:login]): removed method that
762 was previously commented out.
764 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
765 forwared to [AgenorUserManager getSystemEmailForUID:].
767 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
768 -toolbar]): method replacing the one with the same name in the
769 task and appointment editor classes. This method makes also use of
770 the new method "isOrganizerOrOwner:" and "participant:" in
771 SOGoCalendarComponent.
773 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
774 -toolbar]): removed method, replaced with a method with the same
775 name in UIxComponentEditor.
777 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
778 method, replaced with a method with the same name in
781 * SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
782 -primaryFetchProfile]): the values returned from the database are
783 converted to a put dictionary first, since the dictionary returned
784 is actually an immutable one, which can cause a crash afterwards.
786 2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
788 * SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
789 and "SOGoRole_ObjectEditor".
791 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
792 -prepareRightsForm]): this method is no longer mandatory.
794 * UI/Contacts/UIxContactsUserRightsEditor.m
795 ([UIxContactsUserRightsEditor
796 -setUserCanCreateObjects:userCanCreateObjects]): new subclass
797 module to handle acls related to the address books. Partial
800 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
801 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
804 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
805 specified roles from cache.
806 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
807 put resulting roles in cache.
809 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
810 initWithName:inContainer:. Instead, directly initialize the ivars
811 as it is supposed to be to avoid an infinite loop whenever one of
812 those two methods are overriden.
814 * SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
817 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
818 -aclsForUser:uid]): override method so that SOGo won't crash when
819 loading the contact card.
821 2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
823 * SoObjects/Appointments/SOGoAppointmentFolder.m
824 ([SOGoAppointmentFolder -_privacySqlString]): the string for the
825 "freebusy" special user should only require opaque elements.
827 2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
829 * SoObjects/Appointments/SOGoAppointmentFolder.m
830 ([SOGoAppointmentFolder -davResourceType]): fixed a problem with
831 our double declaration where the resulting XML would be screwed.
832 There is only one collection per namespace.
834 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
835 rfc822DateString]): new method that returns a string conform to
836 rfc 822 and suitable for email headers.
838 * SoObjects/Mailer/SOGoDraftObject.m: invoke the new
839 "rfc822DateString" category method on the date we put in the
842 2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
844 * UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
845 ([UIxUserRightsEditor -saveUserRightsAction]): new action methods
846 which should never be overriden.
847 ([UIxUserRightsEditor -appendRight:newRight])
848 ([UIxUserRightsEditor -removeRight:right])
849 ([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
850 ([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
851 methods that can be used by the subclasses.
852 ([UIxUserRightsEditor -prepareRightsForm]): new method that should
853 mandatorily be overriden to prepare the elements of the subclassed
855 ([UIxUserRightsEditor -updateRights]): new method that should
856 mandatorily be overriden to update the user rights from the
857 elements of the subclassed form.
859 * UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
860 check if the uid is already listed before adding it to our array.
861 This is because the acl table can contain more than one record per
862 user/object relationship.
864 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
865 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
866 "roles" parameter is now an NSArray instead of a string. Therefore
867 we loop throughout the array to populate the table. All the
868 relevant records are removed prior to the addition of the new
871 * SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
872 -aclsForUser:uid]): new override that returns nil until we add
873 support for IMAP acls.
875 * SoObjects/Mailer/SOGoMailAccounts.m
876 ([SOGoMailAccounts -aclsForUser:uid]): same as below.
878 * SoObjects/Contacts/SOGoContactLDAPFolder.m
879 ([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
881 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
882 -aclsForUser:uid]): override this method which will always return
885 * SoObjects/SOGo/SOGoPermissions.[hm]: added
886 [Public,Private,Confidential]
887 x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
888 SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
889 ..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
891 * SoObjects/Appointments/SOGoAppointmentFolder.m
892 ([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
893 that defines default roles for new elements in the acl.
895 * UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
896 module and subclass of UIxUserRightsEditor specific to the
897 handling of user rights on calendar folders.
899 2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
901 * SoObjects/Appointments/SOGoAppointmentFolder.m
902 ([SOGoAppointmentFolder -groupDavResourceType]): return both
903 "vevent-collection" and "vtodo-collection".
905 * UI/Common/UIxUserRightsEditor.[hm]: new template class module
906 that implements the detailed editor of user rights per-object.
908 2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
910 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
911 -rolesForObject:objectinContext:context]): no longer query objects
912 for "roleForUser:". Instead, all objects should implement
915 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
916 new method to comply with the new acl "protocol" in SOGoObject.
917 Uses SOGoFolder's new facilities for ACLS.
918 ([SOGoContentObject -aclsForUser:uid]): idem.
919 ([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
920 ([SOGoContentObject -removeAclsForUsers:users]): idem.
922 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
923 -aclsForObjectAtPath:objectPathArray]): new method generic to GCS
924 based folders. This method is derived from the code that was in
925 UIxAclFolder before its removal.
926 ([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
929 -removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
931 -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
932 ([SOGoFolder -setRoleForUsers:uidsto:role])
933 ([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
935 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
936 that requires overriding by subclasses.
937 ([SOGoObject -aclsForUser:uid]): idem.
938 ([SOGoObject -defaultAclRoles]): idem.
939 ([SOGoObject -setRoles:rolesforUser:uid]): idem.
940 ([SOGoObject -removeAclsForUsers:users]): idem.
942 * UI/Common/UIxObjectActions.m: new module implementing the web
943 actions common to SOGoObject and all its subclasses.
944 ([UIxObjectActions -addUserInAclsAction]): new method that adds a
945 user with the clientObject defaults user rights to the object's
948 * UI/Common/UIxAclEditor.m: modified module so as to simplify it
949 to the point where it will only list the users (and their name)
950 associated with an object acl.
952 * SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
953 methods have been moved into SOGoObject and SOGoFolder during a
956 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
957 -iCalParticipantsAndResourcesStringFromQueryParameters]): removed
958 method made useless by the programmatic handling of iCalendar
960 ([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
961 ([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
962 ([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
964 * UI/WebServerResources/MailerUI.js (initDnd): enable drag and
965 drop on all folder nodes, not just on leaves.
967 * SoObjects/Contacts/SOGoContactLDAPFolder.m
968 ([SOGoContactLDAPFolder
969 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
971 2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
973 * Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
974 debugging facilities when the SOGoDebugObjectAllocation user
977 2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
979 * SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
980 method that SOGo will need with non-gnustep Foundation
982 ([NSString -stringByAppendingPathComponent:component]): new method
983 that SOGo will need when building with libFoundation. Method
984 removed later since it is available from
985 Foundation/NSPathUtilities.h.
987 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
990 * SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
991 every subclass to access [WOApplication context] without having to
992 invoke it more than once.
994 * SoObjects/Appointments/SOGoCalendarComponent.m
995 ([SOGoCalendarComponent -changeParticipationStatus:_status]):
996 moved method from SOGoTaskObject and SOGoAppointmentObject up to
999 * UI/Scheduler/UIxCalSelectTab.m: removed module.
1001 2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1003 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1004 -vCard]): test the prefix of the card in a case-independent way.
1006 * OGoContentStore/OCSContactFieldExtractor.m
1007 ([OCSContactFieldExtractor
1008 -extractQuickFieldsFromContent:content]): we no longer accept
1009 records in a format other than versit vCard so we can get rid of a
1012 2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1014 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1015 -selectorComponentClass]): restored method.
1017 2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1019 * UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
1020 -shouldDisplayCurrentTask]): the current task is not displayed if
1021 it is NOT completed or if the "showCompletedTasks" flag is set.
1022 The logic was inverted in Lightning and is now in SOGo too.
1024 2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1026 * UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
1027 want the "work" url instead of the "home".
1029 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1030 -_saveSnapshot]): save url values from snapshot.
1031 ([UIxContactEditor -initSnapshot]): load url values from snapshot.
1033 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1034 -calendarList]): new method replacing "availableCalendars".
1036 * UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
1037 -calendarFolders]): we now take the list of subscribed calendar
1040 * SoObjects/Appointments/SOGoAppointmentFolder.m
1041 ([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
1042 method derived from and replacing [UIxCalView calendarFolders].
1044 2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1046 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1047 -toManyRelationshipKeys]): don't put the predefined folders in the
1048 list if they are returned by the server.
1050 * UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
1051 longer store the "flattenedBlocks" in a dictionary since the
1052 object will be deleted anyway and we don't need to put the folders
1055 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1056 ([UIxMailPartHTMLViewer -_attachmentIds]): take the current
1057 attachment path into account when computing the part urls.
1059 2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1061 * UI/Contacts/UIxContactsListViewContainer.m
1062 ([UIxContactsListViewContainer -additionalFolders]): take the list
1063 of subscribed folders from the new property list used for the user
1064 settings. The value of its key is SubscribedFolders for the
1065 dictionary entry named "Contacts".
1067 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1068 -canAccessContentAction]): new method to override the one from
1069 UIxFoldersActions by taking into account the fact that, this time,
1070 the clientObject is an ldap folder. Removed many method that used
1071 to be related to the handling of the user selector.
1073 * UI/Scheduler/UIxCalDayView.m: commented out many unused methods
1074 to make sure they can be removed.
1076 * UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
1077 populate the calendar entries based on the user settings plist.
1079 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1080 -selectForMailerAction]): restored method.
1082 * UI/Scheduler/UIxCalendarSelector.m: new template module derived
1083 from a simplified version of the old UIxContactEditor (removed).
1085 * UI/Contacts/UIxContactsUserFolders.m: new template module for
1086 selecting users or user folders through an LDAP search of which
1087 the results are displayed as a tree.
1089 * UI/WebServerResources/UIxMailEditor.js: moved previous generic
1090 method "onContactAdd" here since the Mailer is now the only module
1091 to use it when composing emails.
1093 * UI/WebServerResources/generic.js: added code for handling the
1094 new scheme used for describing SOGo folders, common code to handle
1095 folder addition or removal.
1097 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1098 -activateFolderAction]): new method that change the "active"
1099 settings in the folder-related fields in the user settings.
1100 ([UIxFolderActions -deactivateFolderAction]): see above.
1102 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1103 -checkRightsAction]): removed method.
1105 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1106 -updateAdditionalAddressBooksAction]): removed method.
1108 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1109 -updateCalendarsAction]): removed method.
1111 2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1113 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1114 -checkRightsAction]): removed method.
1116 * UI/Common/UIxFolderActions.m ([UIxFolderActions
1117 -canAccessContentAction]): new method designed to replace
1118 [UIxCalMainView checkRightsAction] in a more universal way.
1120 2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1122 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1123 -roleOfUser:uidinContext:context]): take all the subkeys into
1124 account, not only the "personal" folder.
1126 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1127 -takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
1128 to the new components.
1130 * SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
1133 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1134 -getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
1135 field of the sogo_user_profile table, where the user-customizable
1136 changes will be saved.
1137 ([AgenorUserManager -getUserSettingsForUID:uid]): new method
1138 similar to the one above, using the "settings" field where the
1139 automatic settings will be saved.
1141 * SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
1142 module to bind the userdefaults to a property list contained in a
1143 specified field of the sogo_user_profile table.
1144 ([AgenorUserDefaults
1145 -initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
1146 added a "fieldName" parameter.
1148 * UI/Common/UIxFolderActions.m: new module implementing web
1149 actions common to all GCS-based folders.
1151 2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1153 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
1154 put a carriage return after the day name.
1156 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1157 -readFreeBusyAction]): restored method.
1159 2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1161 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1162 -defaultAction]): remade module to redirect automatically to the
1165 * SoObjects/Contacts/NSDictionary+Contact.m: removed module.
1167 2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1169 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
1170 -deleteAction]): new web method to delete personal addressbook
1173 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1174 -delete]): override method to refuse the deletion of the folder if
1175 its nameInContainer is "personal".
1177 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
1178 that forwards the deletion request to the folder manager.
1180 2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1182 * UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
1183 -zoomList]): new method that returns the list of available zoom factors.
1185 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
1186 -changeStatusAction]): rewrote method.
1188 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1189 -_handleAttendeesEdition]): make sure "attendeesNames" has a
1190 length > 0 before computing the attendees. Otherwise there will be
1191 an invalid empty entry.
1192 ([UIxComponentEditor -_handleOrganizer]): new method that adds the
1193 organizer when there are attendees and remove it when the
1194 attendees are removed.
1196 2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1198 * UI/Scheduler/UIxAttendeesEditor.m): new component.
1200 * UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
1201 the task and appointment editors. Now a container component
1202 handling the common elements of tasks and events.
1204 * UI/Scheduler/UIxTaskEditor.m: same as below.
1206 * UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
1207 a subclass of UIxComponentEditor but a subcomponent of it.
1209 * UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
1210 toolbar can have the special value "none" to indicate there is
1211 none attached to the window.
1213 * SoObjects/Appointments/SOGoCalendarComponent.m
1214 ([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
1216 ([SOGoCalendarComponent -isParticipant:email]): new method.
1217 ([SOGoCalendarComponent -calendar:create]): takes one parameter
1218 "create" which is a boolean indicating whether we want to create
1219 the calendar if it does not exist.
1221 2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1223 * UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
1224 of a table, the same way the dayly and weekly views have been for
1227 2007-02-09 Helge Hess <helge.hess@opengroupware.org>
1229 * SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
1232 * SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
1233 property to point at the user folder
1235 2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1237 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1238 -userInContext:]): returns "SOGoUser".
1240 * SoObjects/Appointments/SOGoCalendarComponent.m
1241 ([SOGoCalendarComponent -contentAsString]): overriden method that
1242 takes the privacy into account and discard the relevant fields if
1243 needed by generating a new content string and caching it.
1244 ([SOGoCalendarComponent
1245 -saveContentString:contentStringbaseVersion:baseVersion]): if the
1246 new method above has cached a content string, release it and set
1247 it to nil so that it will have to be regenerated in the case it is
1249 ([SOGoCalendarComponent -_filterPrivateComponent:component]):
1250 discard the fields that have to be hidden when the card is
1253 * SoObjects/Appointments/SOGoAppointmentFolder.m
1254 ([SOGoAppointmentFolder
1255 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
1256 sure the cards are now handled as instances of
1257 SOGoCalendarComponent instead of SOGoContentObject so that their
1258 content string is taking the privacy classifiction into account.
1259 ([SOGoAppointmentFolder -_privacySqlString]): new method that
1260 generates a query to determine what information can be given and
1261 if the card itself has to be shown.
1263 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
1264 -getICalPersonsFromValue:selectorValue]): removed useless
1265 "isAccessRestricted" method.
1267 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
1268 -setStyle:_style]): test whether the values of orgmail and
1269 partmails are null before manipulating them, otherwise SOGo sends
1270 a "rangeOfString:" message to an NSNull, which makes it crashes.
1272 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1273 -extractQuickFieldsFromEvent:_event]): we now use the new
1274 "symbolicAccessClass" method from iCalEntity to determine the
1275 value of the "classifiction" field.
1276 ([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
1279 2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1281 * SoObjects/Appointments/SOGoAppointmentFolder.m
1282 ([SOGoAppointmentFolder
1283 -fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
1284 see below, the query is adapted consequently.
1286 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
1287 -extractQuickFieldsFromTodo:_task]): the field "ispublic" was
1288 renamed to "classification" and can any integer as value.
1289 ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
1292 2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1294 * UI/MailPartViewers/UIxMailPartHTMLViewer.m
1295 ([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
1296 don't prepend anything to the class and id named. Instead, we
1297 make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
1300 2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1302 * SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
1303 -rolesOfUser:logininContext:context]): if object does not exists
1304 (for example when it's being created), the current user has the
1305 same rights on it than he/she has on its parent container.
1307 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
1308 -nameExistsInFolder:objectName]): methods that tests if a c_name
1309 corresponding to the name passed as parameter is present in the db
1312 2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1314 * SoObjects/SOGo/SOGoUser.m ([SOGoUser
1315 -rolesForObject:objectinContext:context]): test for
1316 "rolesOfUser:inContext:" in addition to "roleOfUser:...".
1318 * SoObjects/Appointments/SOGoCalendarComponent.m
1319 ([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
1320 returns the roles of the user on the container object if the event
1323 2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1325 * UI/MailPartViewers/UIxMailRenderingContext.m: returns the
1326 alternativeViewer a multipart/related message is being handled.
1328 * UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
1331 * UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
1332 text/html component before text/plain.
1334 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1335 -addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
1336 fetching of HTML parts.
1338 * SoObjects/Appointments/SOGoCalendarComponent.m
1339 ([SOGoCalendarComponent -componentTag]): new template method that
1340 returns the vcalendar tag of the current object.
1341 ([SOGoCalendarComponent -component]): new method that returns the
1342 first object matching [self componentTag] within the current
1343 calendar object. This method replaces 'firstEventInCalendar:' as
1344 well as "firstTaskInCalendar:".
1345 ([SOGoCalendarComponent -roleOfUser:logininContext:context]):
1346 moved method from SOGoAppointmentObject.m.
1348 2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1350 * UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
1351 module which shows each selected user's calendar in a different
1352 column instead of mixing their events together.
1354 * UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
1355 replaced use of [NSString stringByTrimmingWhiteSpaces] with
1356 [NSString stringByTrimmingSpaces].
1358 * UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
1359 "cnWithoutQuotes" instead of "cnForDisplay", which no longer
1362 * UI/Scheduler/UIxCalDayOverview.m,
1363 UI/Scheduler/UIxCalDayChartview.m,
1364 UI/Scheduler/UIxCalDayListview.m,
1365 UI/Scheduler/UIxCalWeekOverview.m,
1366 UI/Scheduler/UIxCalWeekChartview.m,
1367 UI/Scheduler/UIxCalWeekListview.m,
1368 UI/Scheduler/UIxCalInlineMonthOverview.m,
1369 UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
1371 2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1373 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1374 -appendPersonalSourcesInContext:context]): release connectoin
1375 channel when everything is done.
1377 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1378 -newAbAction]): new action method to crate a new contact folder
1381 * SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
1382 that requests the folder manager to create a folder table with the
1383 specified type at the specified path. The type is taken from [self
1386 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1387 -folderType]): implemented.
1389 * SoObjects/Appointments/SOGoAppointmentFolder.m
1390 ([SOGoAppointmentFolder -folderType]): implemented.
1392 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1393 -appendPersonalSourcesInContext:context]): we now fetch all
1394 folders with type "Contact" that belong to the current user.
1395 ([SOGoContactFolders -newFolderWithName:name]): new method to
1396 create a new contact folder.
1398 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
1399 resulting url with [NSString+Utilities hostlessURL] instead of
1400 using NSURL. This is because the url in question sometimes has a
1401 hostname and sometimes not. "hostlessURL" ensure the hostname is
1403 ([UIxComponent -applicationPath]): same as above.
1405 2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
1407 * SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
1408 folders before doing the one on messages.
1410 2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1412 * SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
1413 makeObjectsPerform:withObject:withObject: for GNUstep
1416 * OGoContentStore/GNUmakefile, Protocols/common.make,
1417 SoObjects/common.make, UI/common.make: install in
1418 GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
1420 2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
1422 * UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
1425 2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1427 * UI/MailerUI/UIxMailTree.m ([UIxMailTree
1428 -getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
1431 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1432 -checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
1433 password would be accepted anyway as long as its length was > 0.
1434 This can be the case ONLY when LDAP is disabled otherwise we have
1435 a serious security issue...
1437 * SoObjects/Appointments/SOGoAppointmentObject.m
1438 ([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
1439 user is not an organizer nor a participant, he is declared as
1440 "Owner" if he owns the calendar the entry where the entry is
1441 contained. Other cases should not be possible.
1443 2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1445 * UI/Contacts/UIxContactEditor.m: display and handle the new
1448 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1449 ([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
1452 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1453 -vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
1456 2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1458 * SoObjects/Appointments/SOGoCalendarComponent.m
1459 ([SOGoCalendarComponent -sendEMailNotifications]): new method that
1460 returns the value of ud "SOGoAppointmentSendEMailNotifications"
1462 ([SOGoCalendarComponent
1463 -sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
1465 2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1467 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1468 -defaultAction]): invoke "flushMailCaches" on [self clientObject]
1469 so that the mailbox cache is refreshed everytime the user presses
1470 on "get mail". I doubt a mailbox cache really is useful in general
1473 2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1475 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1476 -userInContext:]): if the lookup is on "freebusy.ifb" and the
1477 username is "anonymous" the user is automatically set to
1480 2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1482 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1483 -checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
1484 user with password "freebusy".
1486 * SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
1487 -contentAsString]): the default timerange is now 14 days before
1488 currentday and 1 month after.
1490 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1492 * SoObjects/Appointments/SOGoAppointmentFolder.m
1493 ([SOGoAppointmentFolder
1494 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
1495 escape the record string in a way suitable with XML encoding.
1497 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1499 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
1500 calendar view would not be updated properly.
1502 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1504 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1505 -newStartDate]): fix the handling of the component start date
1506 depending on the "hm" and the "day" parameters.
1508 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1509 -roleOfUser:uidinContext:context]): set role of current user to
1510 "Assistant" if the object that is accessed is "freebusy.ifb".
1512 * SoObjects/Appointments/SOGoAppointmentFolder.m
1513 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
1514 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
1515 ([SOGoAppointmentFolder
1516 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
1517 lookupCalendarFolderForUID: method, which doesn't do security
1520 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1522 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
1523 accessor that returns the comma-separated list of users with role
1525 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
1526 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
1527 "checkedUsers". Instead, each user is either classified in the
1528 list of assistants or the list of delegates.
1530 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1532 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
1533 -composeAction]): method imported from removed container modules.
1534 ([UIxMailMainFrame -mailFolderName]): method imported from removed
1537 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
1538 for wrapping UIxMailView with the "popupview" action.
1540 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
1541 since its the component that displays the same splash screen than
1542 the one in Thunderbird/Icedove.
1544 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
1545 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
1546 UI/MailerUI/UIxMailListViewContainer.[hm],
1547 UI/MailerUI/UIxMailViewContainer.[hm]: removed
1549 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1551 * UI/WebServerResources/HTMLElement.js: replaced the functional
1552 selectNode() and deselectNode() functions with select() and
1553 deselect() methods of HTMLElement.
1555 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
1556 events are initialized from here now instead of in the HTML code.
1558 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1559 -checkRightsAction]): new method similar to the one with the same
1560 name in UIxCalMainView.m.
1562 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
1563 code to handle the publishing of freebusy information.
1565 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1567 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
1568 -checkRightsAction]): new action method that returns a
1569 comma-separated list of boolean values matching the right of the
1570 current user to "view" (as a permission) each foreign calendar
1571 stored in his preferences.
1573 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
1574 new method that sets a customOwner, which can be returned with
1575 ownerInContext it set.
1577 * SoObjects/Appointments/SOGoAppointmentFolder.m
1578 ([SOGoAppointmentFolder
1579 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
1581 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1583 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
1584 below, but for the Contacts and Calendar collections.
1586 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
1587 new acl facilities method from sope-gdl/GCSFolder.m.
1589 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1590 -roleOfUser:uidinContext:context]): new method that returns
1591 SOGoRole_Assistant when the user is an assistant or a delegate on
1592 the "personal" ab object. This is so that setting roles on the
1593 SOGoContactFolders object is not required.
1595 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1597 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
1599 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
1600 to the handling of the user selection for the acls.
1602 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
1603 values from SoPermissions with ones specific to SOGo.
1605 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
1606 handles the storage for the acls.
1608 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
1609 class for SOGoAppointmentObject and SOGoTaskObject.
1611 * UI/Common/UIxAclEditor.[hm]: new component that provides a
1612 general editor for folder acls.
1614 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
1616 ([NSString -davMethodToObjC]): method that returns the method name
1617 for a DAV property implementation.
1619 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
1621 ([NSArray -stringsWithFormat:format]): new method that returns
1622 formatted occurences of the strings stored in the array.
1624 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
1625 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
1626 subclass module of SoWebDAVValue that supports collections of
1627 properties of the same type.
1629 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1631 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
1632 -lookupFolder:ofClassNamed:inContext:]): added the ability to
1633 configure the name of the SOGoDraftFolders with the ud var
1634 "SOGoDraftsFolderName".
1636 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1638 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1639 -userTimeZone:username]): new method that returns the timezone for
1640 the specified user depending on his preferences and the server
1643 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1644 -stringForData:partInfo:]): take the encoding into account and
1645 translate the text to "normal" before processing the charset data.
1647 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1649 * UI/WebServerResources/generic.js: the progress indicator is on
1650 when loading the page so we turn it off, and we turn it back on
1651 whenever we switch to another module...
1653 * UI/WebServerResources/SchedulerUI.js: make sure the day view
1654 synchronization mechanism works everywhere.
1656 * UI/WebServerResources/generic.js: the log window is not only
1657 visible when UIxDebugEnabled is set.
1659 * UI/WebServerResources/SchedulerUI.js: the month overview's day
1660 cells are now initialized with the DOM event interface methods
1661 instead of with html attributes.
1663 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
1664 headers (should be made configurable at some point)...
1666 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
1667 "not null" constraint on startdate, enddate, isopaque,
1668 participants and partmails.
1670 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1672 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
1673 -hoursToDisplay]): prevent a crash by retaining the
1674 "hoursToDisplay" array after it's created.
1675 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
1676 clickable hours DIV.
1678 * UI/WebServerResources/SchedulerUI.js: made the event
1679 participation status modification asynchronous, which also fixes a
1680 bug where the window would sometimes close before the accept or
1681 decline action was completed. Also, adapted the event handling
1682 related to the days or weeks view with the new DIV-based layout.
1684 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
1686 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
1687 DIV-based presentation of the days and weeks.
1689 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
1691 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
1692 might return an exception so we have to handle it if we don't
1695 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1697 * UI/WebServerResources/SchedulerUI.js: updated the list
1698 initialization code to use the new event management scheme, adding
1699 what was missing to be able to delete events and tasks again.
1701 * UI/WebServerResources/MailerUI.js: added code to activate the
1702 "Get mails" button. Fixed a bug which prevented messages to be
1705 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
1706 navigation and focus handling of INPUTs.
1708 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1710 * UI/WebServerResources/MailerUI.js: added code to handle the
1711 possible drag and drop events to manager in the mail module.
1712 Moving messages, opening parent folders, ...
1714 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
1715 the drag and drop manager as well as the interface to HTMLElement
1716 to trigger drag and drop events.
1718 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
1719 action to move the current message to the mailbox named after the
1720 value of parameter "tofolder".
1722 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
1723 -moveToFolderNamed:folderNameinContext:]): new method base on
1726 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1728 * UI/WebServerResources/generic.js: added and activated many
1729 "load" handlers to configure generic widgets used across the
1730 modules. More events are now handled in a DOM-fashion way instead
1731 of by setting the relative attributes in the templates.
1733 * UI/Templates/UIxSortableTableHeader.wox: all the events are
1734 declared from the javascript DOM onload handlers.
1736 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
1739 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
1740 declared from the javascript DOM onload handlers.
1742 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
1743 we want everything to be separated from each other, as much as
1746 * UI/WebServerResources/SOGoDragHandles.js: new module containing
1747 the "SOGoDragHandlesInterface", implementing methods that can be
1748 attributed to DIV so that they can be used as drag handles.
1750 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1751 -asQPSubjectString]): initialize the tmp strings with '0' to make
1752 sure they don't contain garbage.
1754 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1756 * UI/WebServerResources/MailerUI.js: register the messageList
1757 table as a dragging source and the leaf of the navigation tree as
1758 dnd destinations to the DNDManager.
1760 * UI/WebServerResources/generic.js: initialize tabs from the
1761 "unload" event listener that is added programmatically instead of
1762 from the template... Also, added the new DNDManager object.
1764 * UI/WebServerResources/HTMLTableElement.js: added code to
1765 simulate XUL drag n drop events. This code will possibly be moved
1766 to HTMLElement.js instead later...
1768 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1769 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
1772 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1773 -_qualifierForFilter:filter]): only search records which starts
1774 with the specified pattern.
1776 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1778 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
1779 -asQPSubjectString]): new method that returns the special QP
1780 string with its qp declaration for email subjects.
1781 ([SOGoDraftObject -bodyPartForText])
1782 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
1783 double-encode data in UTF-8.
1785 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1786 -newStartDate]): new method to determine the start date depending
1787 on the URL parameters, the current day and the current time.
1788 ([UIxComponentEditor -toolbar]): new method to determine the
1789 filename of the toolbar that should be drawn depending on the
1790 ownership and the list of attendees of the task/event wrt to the
1793 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
1794 -setDayStartHour:aStartHour]): adjust the minutes to the next
1795 quarter of hour, if not already set to a quarter.
1797 * UI/WebServerResources/UIxAppointmentEditor.js,
1798 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
1801 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1803 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
1804 -loadValuesFromComponent:component]): handles access class
1805 (privacy) and status.
1807 * UI/Contacts/UIxContactsListViewContainer.m
1808 ([UIxContactsListViewContainer -additionalFolders]): return nil if
1809 [self additionalAddressBooks] returns an empty string.
1811 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1813 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
1814 rangesOf7Days]): enhanced and debugged algorithm to feed the array
1815 with slices where the first day is still in the requested month.
1817 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
1820 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
1821 of events in the day boxes of the calendar's monthly view.
1823 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
1824 -davContentType]): declare "text/calendar".
1826 * SoObjects/Appointments/SOGoAppointmentObject.m
1827 ([SOGoAppointmentObject -davContentType]): declare
1830 * SoObjects/Appointments/SOGoAppointmentFolder.m
1831 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
1832 HTTP methods are handled by SOPE and requires nil to be returned,
1833 this method now invokes the new
1834 "requestNamedIsHandledLater:inContext:" method to check that.
1835 ([SOGoAppointmentFolder
1836 -requestNamedIsHandledLater:nameinContext:context]): new methods
1837 that returns "YES" only for the "OPTIONS" http method (for now...).
1838 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
1839 overloaded method to append the "access-control" and
1840 "calendar-access" DAV abilities to the initial declaration.
1842 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
1843 imitate the look of Sunbird/Lightning's monthly view.
1845 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
1846 UIxCalMonthViewOld.[hm].
1848 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1850 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
1851 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
1853 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
1854 returns an image name based on the participation status of the
1857 * UI/WebServerResources/SchedulerUI.js: same strip down as for
1860 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
1861 ([UIxContactsListViewContainer -additionalFolders])
1862 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
1863 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
1864 methods to handle the external addressbooks a user has subscribed
1865 too, by retriving them from his preferences.
1867 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1868 -updateAdditionalAddressBooksAction]): new method that updates the
1869 user settings with the list of addressbook he has subscribed to.
1871 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
1872 module for the address book selector.
1874 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
1875 a toolbar with two buttons ("add" and "remove") to manage the
1876 additional addressbooks a user might subscribe to.
1878 * UI/WebServerResources/ContactsUI.js: added code to handle
1879 "external addressbooks" from the Javascript point-of-view, by
1880 extending existing methods and adding code for the "add ab" and
1881 "remove ab" buttons.
1883 * UI/WebServerResources/generic.js: moved extensions methods to
1884 DOM elements to separate files for better clarity.
1886 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
1887 new method that returns "pageContent" as class, but also "popup"
1888 for the DIV where the page content lies, so that we can manipulate
1889 the content of popup's with CSS identifiers.
1891 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1893 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
1894 -displayStyle]): new method that returns a string containing the
1895 css style relative to the current appointment cell. This code is
1896 currently inactive but might be reused later.
1898 * UI/WebServerResources/SchedulerUI.js: added code to handle the
1899 display of the selected day (the day pointed by the mouse, or the
1900 current day when changing the view).
1902 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
1903 -dayCellClasses]): new method that returns a string containing the
1904 css classes applicable to the current cell, depending on the
1905 position of the day in the week, the day of today and the
1908 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
1909 -currentContactAptBorder]): new method that returns the
1910 appropriate border color for the specified user.
1912 * SoObjects/Appointments/SOGoAppointmentObject.m
1913 ([SOGoAppointmentObject
1914 -saveContentString:contentStringbaseVersion:baseVersion]):
1915 overloaded method that parse new events and detects if they have
1916 an organizer or not. If they are new and have no organizer set
1917 (Sunbird/Lightning...), the owner of the event is set as
1920 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
1921 category that provides facility methods and interfaces to the
1924 * SoObjects/Contacts/product.plist: give full access to ANY
1925 authenticated user, not just the owner (to every objects...).
1927 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1929 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
1930 every replica widgets are declared as such to their master
1931 counterpart. Take the days into account when displaying the time
1932 range taken by the appointment.
1934 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
1935 -getICalPersonsFromValue:selectorValue]): method taken from
1936 UIxFreeBusyUserSelector, that is shared both by
1937 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
1939 * SoObjects/Appointments/SOGoAppointmentFolder.m
1940 ([SOGoAppointmentFolder
1941 -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.
1943 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
1944 derived and taken as a subset of UIxFreeBusyUserSelector that
1945 implements the table part of the FreeBusy view. Most of the
1946 methods of UIxFreeBusyUserSelector relative to that table were
1947 moved into UIxFreeBusyUserSelectorTable, which can also be used as
1948 a standalone view for AJAX operations.
1950 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1952 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1953 -vCard]): change reverted.
1955 * UI/Contacts/UIxContactEditor.m: check whether the client contact
1956 folder has selector "globallyUniqueObjectId" before calling that
1959 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1960 -vCard]): the "setVClass" NGVCard method really is "setClass"
1963 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1964 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
1965 request the "streetAddress" instead of the "streetaddress".
1966 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
1967 mails that *contain*, and not just *start with* the search
1970 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1971 -vCard]): mark address returned from LDAP as the work address.
1973 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
1974 span covered with the anchor, not only the textual information
1977 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
1978 argument (event or task) to newEvent in the appointmentListMenu.
1979 Make the appointmentsListView display the appointmentsListMenu.
1981 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
1982 12 to 50 before displaying "...".
1983 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
1984 if its length > 0, whether location itself is nil or not...
1985 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
1986 of which the length > 0.
1988 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1990 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
1991 french and ISO dates.
1993 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
1994 from UIxContactSelector to handle contact lists (current and
1995 additional contacts).
1997 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
1998 -_freeBusyAsText]): added handling of an "additional"-named query
1999 parameter that describe the number of additional days after
2000 enddate that should be returned.
2002 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2003 -_responseForResults:results]): give priority to results with
2004 "c_uid" fields. If none returned, use the first contact received.
2006 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2007 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
2008 2 and "CANCELLED" to 0.
2010 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2012 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
2013 of start and end dates to short string dates.
2015 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
2016 -readFreeBusyAction]): new method that returns an array of numbers
2017 corresponding to the state in the freebusy of each "quarter of an
2018 hour" between the "sday" and "eday" date parameters passed in the
2019 url. This permits to handle the display of the freebusy with Ajax
2021 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
2022 since the free busy displays 2 days ahead.
2024 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2025 -contactSearchAction]): new action that returns the uid and the
2026 username + email of the user whose name contain the value of the
2027 "search" url parameter.
2029 * SoObjects/Appointments/SOGoAppointmentFolder.m
2030 ([SOGoAppointmentFolder
2031 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
2032 useful for the computing of the status of the freebusy.
2034 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
2035 -init]): new component that incarnates a user selector for events
2036 inspired by the new one found in Thunderbird Lightning.
2038 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2040 * UI/WebServerResources/generic.js: added code to enable or
2041 disable anchor visually (following our internal algorithm).
2043 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
2044 added new "url" ivar with its classic accessors.
2045 ([UIxComponentEditor -urlButtonClasses]): new method that returns
2046 the class strings for the url button on the appointment/task
2047 editor (depending on the validity of the url).
2049 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
2050 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
2051 the template to match the Lightning's new task/appointment editor.
2053 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
2055 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
2057 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2059 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2060 ([SOGoContactLDAPFolder
2061 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
2063 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
2064 iCalEntityObject instances instead of just iCalEvent's.
2066 * SoObjects/Appointments/SOGoAppointmentFolder.m
2067 ([SOGoAppointmentFolder
2068 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
2070 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
2071 bad way of handling ownership that way.
2073 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2074 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
2075 on "cn", just like Mozilla.
2077 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2079 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
2080 "to" should be retained, otherwise it will be autoreleased and a
2083 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2084 -writeAction]): updated method to fetch the card before initing
2087 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2088 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
2091 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
2092 -iCalStringTemplate]): start and due date are now optional.
2094 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2095 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
2096 appropriate accessors to be settable through the templates.
2098 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
2099 new "isDisabled" ivar with appropriate accessors to be
2100 settable through the templates.
2102 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
2103 -availableCalendars]): new method that list the calendars to which
2104 the user has subscribed.
2105 ([UIxComponentEditor -componentOwner]): returns the owner of the
2108 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2109 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
2110 quickentries to null whenever each or all of them are null, by
2111 providing an impossible timestamp from with NSNotFound as value.
2113 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2115 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
2116 that handles the creation of new fields with the new APIs and the
2117 new node structure on the page.
2119 * UI/Scheduler/UIxAppointmentEditor.m,
2120 UI/Scheduler/UIxTaskEditor.m:
2121 refactored to user UIxComponentEditor as parent class.
2123 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
2124 containing the methods common to the UIxTaskEditor and the
2125 UIxAppointmentEditor.
2127 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2129 * SoObjects/Appointments/SOGoAppointmentFolder.m
2130 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
2131 the handling of time-ranges.
2133 * UI/WebServerResources/ContactsUI.js: specify a notification type as
2134 parameters when onConfirmContactSelection in invoked.
2136 * UI/WebServerResources/generic.js: specify a notification type as
2137 parameters when onContactRemove in invoked.
2139 * UI/WebServerResources/SchedulerUI.js: when the user deselects
2140 all calendars, select his entry.
2142 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2144 * UI/WebServerResources/SchedulerUI.js: edit and delete events
2145 with their owner-relative urls. Generate a correct entry in the
2146 css color table when a user is added to the calendars list. Put
2147 the same color next to the user id.
2149 * UI/WebServerResources/generic.js: implemented some new helper
2152 * SoObjects/Appointments/SOGoAppointmentFolder.m
2153 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
2154 entries if their owner is not the current user.
2156 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
2157 -displayClasses]): return the correct class for the current event
2158 representation depending on its owner.
2160 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
2161 and associate a color for each user login depending on its
2162 position in the list.
2164 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
2165 -currentRowCSSClass]): return the correct class for the current
2166 row depending on the owner of the event.
2168 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
2169 -setColors:colors]): new method to associate a color table with
2170 each user in the list.
2172 * SoObjects/Appointments/SOGoAppointmentFolder.m
2173 ([SOGoAppointmentFolder
2174 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
2176 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
2177 NSObject to associate an instance with a user.
2179 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2181 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
2184 * UI/WebServerResources/ContactsUI.js: added handling of
2185 notification of changes to contact selectors.
2187 * UI/WebServerResources/generic.js: added handling of notification
2188 of changes to contact selectors.
2190 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2191 -updateCalendarsAction]): proxy method to update the user
2192 preference table with the new selected calendar uids.
2194 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
2195 -calendarsContactsAction]): new method.
2197 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
2198 ([UIxContactSelector -setHasCheckBoxes:aBool])
2199 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
2200 permit the drawing of checkboxes instead of card icons.
2202 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
2203 wrap a selector the the "Calendars" tab.
2205 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
2206 new user calendar selector.
2208 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2210 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
2211 may cover hour 0 to hour 23.
2213 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2214 -iCalStringFromQueryParameter:format:]): dates explicitly set to
2217 * UI/WebServerResources/SchedulerUI.js: manage both lists of
2218 objects wrt to the toolbar actions.
2220 * UI/WebServerResources/generic.js: added code to the "String"
2221 class to decode number-encoded char entities.
2223 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
2224 -batchDeleteAction]): new method to delete selected entries in the
2227 * SoObjects/Appointments/SOGoAppointmentFolder.m
2228 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
2229 that delete identified entries in batch.
2231 * UI/SOGoUI/UIxComponent.m ([UIxComponent
2232 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
2234 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
2235 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2236 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
2237 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2239 return a UIxJSClose component if everything went fine.
2241 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
2244 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
2245 UIxAppointmentEditor.m.
2247 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
2248 a very light page with javascript code to close a window, by
2249 calling a method on the opener if specified. This component is
2250 designed to work as a response to form postings.
2252 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2254 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
2255 SOGoAppointmentObject adapted for the handling of tasks.
2257 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
2258 extracted from SOGoAppointmentObject.
2260 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
2261 -saveUrl]): returns the url needed to POST the new form to.
2262 redirect the user to <aptid>/editAsAppointment instead of /edit,
2263 so that SOGoAppointmentFolder can return the correct object type.
2265 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
2266 -compareAptsAscending:_other]): accept empty start or end dates.
2268 * SoObjects/Appointments/SOGoAppointmentFolder.m
2269 ([SOGoAppointmentFolder
2270 -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.
2271 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
2272 components of type "vtodo" as well as "vevent".
2273 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
2274 url specified ends with AsTask or AsAppointment, returns the
2275 an object of the appropriate class, otherwise deduce it from its
2276 content if the HTTP method is "PUT", otherwise read its type from
2279 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
2280 -extractQuickFieldsFromTodo:_task]): extract quick fields from
2283 * UI/Scheduler/UIxCalView.m ([UIxCalView
2284 -fetchCoreAppointmentsInfos]): replacement methods for
2285 fetchCoreInfos but by retrieving object with component "vevent".
2286 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
2289 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
2290 UIxCalAptListView adapted for the handling of tasks.
2292 * UI/Scheduler/UIxTaskProposal.[hm],
2293 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
2294 clones of the UIxAppointment* classes for the handling of tasks.
2296 * UI/WebServerResources/UIxTaskEditor.js: clone of
2297 UIxAppointmentEditor adapted for the handling of tasks.
2299 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
2300 Scroll the daily view to the appropriate hour when an appointment
2301 is selected in the appointments list.
2303 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2305 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2306 -setDayStartHour:aStartHour]): specifies the user timezone on the
2309 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
2312 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
2313 ([NSCalendarDate -driftedDate]): methods made useless by a better
2314 comprehension of the NSTimeZone API...
2316 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2318 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
2319 new methods from the NSCalendarDate methods.
2321 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
2322 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
2324 +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).
2325 ([NSCalendarDate -adjustedDate]): this method returns another
2326 instance set to the correct hour after the original date was set
2327 from a non-GMT timezone. This date can be used for storage.
2328 ([NSCalendarDate -driftedDate]): this method does exactly the
2329 opposite of -adjutedDate, that is, it enables the method
2330 hourOfDay, minuteOfHour etc... to return the values according to
2331 the original date's timezone. This date CANNOT be used for storage.
2333 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
2334 -shortDateString]): new method that will return a "short date
2335 string" (yyyymmdd) from a calendar date object.
2337 * UI/SOGoUI/UIxComponent.m ([UIxComponent
2338 -_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.
2340 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
2341 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
2343 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2345 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
2346 view of the day at the height of hour 8:00.
2348 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
2349 ([UIxCalView -dayEndHour]): returns 24.
2351 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
2352 ([UIxContactFoldersView -newAction]): invoke
2353 _selectActionForApplication: on self with the proper attribute too.
2355 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
2356 we now use the action mechanism in UIxContactsListView to keep the
2357 same view for the contact selectors and the regular contact view.
2359 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
2360 UIxContactsListViewContainerBase.[hm]
2362 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
2364 * UI/WebServerResources/generic.js: generalized emailstring
2365 handling functions. Generalized address book access functions.
2367 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
2368 -isPopup]): return YES if the "popup" query parameter is set.
2370 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2371 -defaultAction]): keep the url parameters when redirecting.
2372 ([UIxContactFoldersView -selectForSchedulerAction])
2373 ([UIxContactFoldersView -selectForMailerAction]): new action
2374 methods for the /scheduler-contacts and /mailer-contacts invocations.
2376 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
2377 newly available NSString+URL category.
2379 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
2380 -asURLParameters]): handle dictionary entries which could be
2381 instances of NSArray rather than NSString.
2383 * SoObjects/SOGo/NSString+URL.m ([NSString
2384 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
2385 ([NSString -urlWithoutParameters]): new method that returns the
2386 url without its parameters.
2388 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
2390 * SoObjects/SOGo/NSDictionary+URL.[hm],
2391 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
2393 * UI/WebServerResources/UIxMailEditor.js: add support for
2394 additions of different types (to, cc, bcc) of recipients from the
2397 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
2400 * UI/Contacts/UIxContactsMailerSelection.m,
2401 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
2402 UI/Contacts/UIxContactsSelectionView.m to provide a different set
2403 of widgets depending on the application invoking the contact list.
2405 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2407 * UI/WebServerResources/ContactsUI.js: hide the current contact
2408 whenever the user changes of contact folder.
2410 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
2411 now provided by the template when loading the page.
2413 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
2414 -iCalPersonWithUid:uid]): new method taken from removed module
2417 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2419 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
2420 -categoriesAsString]): same as below.
2422 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
2423 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
2425 * SoObjects/Appointments/SOGoAppointmentObject.m
2426 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
2427 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
2430 * SoObjects/Appointments/SOGoAppointmentFolder.m
2431 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
2432 hackish test to detect whether the request concernes VEVENT's or
2433 anything else. Return events only in the former case.
2434 ([SOGoAppointmentFolder
2435 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
2436 c_name quickfield so that the calendar list can identify the
2437 appointments with their complete "filename".
2439 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
2440 groupsOfClass:fromSource: to parse the given vcalendar.
2442 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
2444 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
2446 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
2449 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
2451 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2453 * SoObjects/Appointments/SOGoAppointmentFolder.m
2454 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
2455 sensitive to the CalDAV method names.
2456 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
2457 "calendar-query" CalDAV method name.
2459 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
2460 code coming originally from MailerUI.js.
2462 * UI/WebServerResources/UIxContactEditor.js: imitate the
2463 Thunderbird address book by completing the display name with the
2464 content of the first and last name fields, until the display name
2465 is modified manually.
2467 * UI/WebServerResources/generic.js: added a "trim" method to the
2470 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
2471 -displayName]): new method that returns the display name from "cn"
2472 or from the "displayName" key if found.
2474 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2475 -initSnapshot]): check if "[card n]" returns anything to avoid a
2478 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
2479 that returns an unparsed doctype definition for the pages.
2481 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2482 -vCard]): set the card's fn to attribute "displayName" if found
2485 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2487 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2488 -vCard]): handle the "streetAddress" and "l" fields.
2490 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
2491 header fields by converting the tables to DIVs and SPANs.
2493 * UI/WebServerResources/generic.css: attempted unification of font
2494 families and size across all the elements. changed the
2495 logConsole's "position" from "fixed" to "absolute" to avoid
2498 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2500 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
2501 empty the contact view when the current contact is being deleted.
2503 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
2504 parse the email field and provide the address full name if found
2505 as the "contactFN" parameter.
2507 * UI/WebServerResources/generic.js (openMailTo): do not give a
2508 name to the opened window so that serveral ones can be opened at
2511 * UI/MailPartViewers/UIxMailPartTextViewer.m
2512 ([UIxMailPartTextViewer -flatContentAsString]): override method by
2513 replacing carriage returns with "<br />" in the result string from
2514 super's implementation.
2516 * UI/Contacts/UIxContactView.m ([UIxContactView
2517 -_urlOfType:aType]): don't manage non-mailto urls through
2518 javascript, let the user decide what's best for him.
2520 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2521 -newAction]): transfer all the query parameters by using the
2522 "asURLParameters"'s result string from [self queryParameters].
2524 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
2525 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
2526 query parameters and put their values (if any) into the snapshot.
2528 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
2529 carriage-returns to "<br />".
2530 ([UIxContactView -workCompany]): explicitly initialize company to
2531 nil if org is nil or empty.
2533 * UI/WebServerResources/UIxContactEditor.js: updated validation
2534 code after we added and renamed some fields.
2536 * UI/WebServerResources/ContactsUI.js: added code to cache contact
2537 cards and to handle card updates.
2539 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2541 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
2542 test the length of the returned string since they will never be
2545 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
2546 return self if the process went successful, returns an exception
2547 otherwise (and only otherwise...).
2549 * OGoContentStore/OCSContactFieldExtractor.m
2550 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
2551 adapted method to the new VCard api. Since the cards are stored in
2552 vcard format, we no longer deal with a dictionary but with a
2555 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2557 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
2558 return a string with a "mailto" url.
2559 ([UIxContactView -_urlOfType:aType]): generic method to return a
2560 url string with a html anchor pointing to it.
2562 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
2563 since subclass "UIxContactEditor" did nothing. Implemented code to
2564 display and modify the values parsed from the vcards, displayed in
2565 a way similar to the Thunderbird addressbook.
2567 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2568 -save]): new dummy method.
2570 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2571 -save]): made method void.
2573 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2575 * UI/Contacts/UIxContactView.m: added many wrapper methods to
2576 display blocks of data à la Thunderbird Addressbook. If data is
2577 available, those wrappers (around the NGVCard methods) will
2578 enclose the results in a proper HTML output with the correct label
2579 (if present), otherwise it will return an empty string.
2580 ([UIxContactView -vcardAction]): new action to return the contact
2581 as text/vcard (for exporting).
2583 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
2584 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
2586 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
2587 -vCard]): create a new NGVCard instance when no data is available
2589 ([SOGoContactGCSEntry -save]): save the vCard using the new
2590 "versitString" API method/message.
2592 * UI/Contacts/UIxContactView.h: separated interface from
2595 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
2596 views and display them beneath the list.
2598 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2600 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
2601 the timezone even when it's the server timezone.
2603 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2604 -privateContacts:inContext:]): no long configure the calendar
2605 object with the user's timezone since it's now accessible
2606 application-wide throught the SOGoObject methods.
2608 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
2609 method. Removed the "backendTimeZone" method.
2611 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
2612 instead of SoComponent.
2614 * SoObjects/Appointments/SOGoAppointmentObject.m:
2615 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
2616 [self serverTimeZone] instead of "EST" (which was removed).
2618 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
2619 "timeZone" ivar and its accessors.
2621 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
2622 centralized method returing the timezone configured in the
2623 userdefaults db or "Canada/Eastern" if missing.
2624 ([SOGoObject -userTimeZone]): new centralized method returing the
2625 timezone of the current user or the server timezone if missing
2626 from the user configuration table.
2628 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2630 * UI/WebServerResources/SchedulerUI.js: implemented caching of
2633 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
2634 return a path based on the object's context instead of the first
2635 level in SOGo's object hierarchy...
2637 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2639 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
2642 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
2643 timezone ([self viewTimeZone]) to the WEMonthOverview component to
2644 avoid a confusion with the days.
2646 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
2649 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
2650 imitate Sunbird's synchronization between the 3 visible views.
2652 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
2653 sure the numbers in dateString are formatted so as to take 4 chars
2654 for the year and 2 for the day and the month, otherwise
2655 NSCalendarDate will return a nil date.
2656 ([UIxComponent -applicationPath]): return a path based on the
2657 object's context instead of the second level in SOGo's object
2660 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2662 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
2663 user's timezone abbreviation to the date string passed as parameter to
2664 NSCalendarDate to generate an accurate date instance. Do the same
2665 when no date is specified and today is chosen.
2667 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
2668 form's time values to integers before comparing them.
2670 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
2671 ([UIxCalAptListView -currentEndTime]): initialize the resulting
2672 dates timezone with [self viewTimeZone].
2674 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
2675 "viewTimeZone" ivar destined to hold an instance of the user's
2677 ([UIxComponent -viewTimeZone]): take the timezone from the user's
2680 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2682 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
2683 rearranged the layout.
2685 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
2686 manage showing and hiding appointment details.
2688 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
2689 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
2690 timezone by taking the current user's timezone setting.
2692 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
2694 * SoObjects/Appointments/SOGoAppointmentObject.m
2695 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
2696 set default timezone to EST, although this code should be
2697 rewritten to handle a system and a user default value.
2699 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
2700 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
2701 take the values from the hour and minute INPUTs when data is
2702 POSTed since we no longer use the UIxTimeSelector component.
2703 ([UIxTimeDateControl -selectableHours])
2704 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
2705 template SELECTs to display reasonable and acceptable values
2706 instead of all the possibilities.
2708 * UI/WebServerResources/generic.js: adapted code for the new
2709 implementation of the UIxContactSelector component (added a
2710 "remove" button, removed the previous INPUT and replaced them with
2711 links of class "button").
2713 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
2714 UIxTimeDateControl.m.
2716 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
2717 ([UIxCalDayTable -currentAppointmentHour]): new methods that
2718 returns correctly formatted values used as attributes for JS code.
2720 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
2721 -initialContactsAsString]): renamed implementation of
2722 initialParticipants.
2723 ([UIxContactSelector -currentContactId])
2724 ([UIxContactSelector -currentContactName]): new methods used when
2725 listing the initial contacts in the widget. Currently, both return
2726 the person's cn but the latter should ultimately return a user
2729 * UI/Contacts/UIxContactSelector.h: separated interface from
2730 UIxContactSelector.m.
2732 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
2733 all javascript code is now put in Scheduler.js/generic.js.
2735 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
2736 moved into NSCalendarDate+Scheduler instead.
2738 * SoObjects/Appointments/SOGoAppointmentFolder.m
2739 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
2740 configure the timezone from SOGoUserFolder when the instance is
2742 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
2743 the value of the new "timezone" ivar.
2745 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2747 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
2748 the date selector in the first page and the container of the
2749 future calendar selector in the second page.
2751 * UI/WebServerResources/generic.js: added code for handling tabbed
2754 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
2755 returns the bundle name associated to the current running product.
2757 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2759 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
2760 exception by invoking a timeout on the opener rather than invoking
2761 the list refresh method.
2763 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
2766 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
2767 ([UIxCalWeekView -prevWeekQueryParameters])
2768 ([UIxCalWeekView -nextWeekQueryParameters])
2769 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
2770 that return the dates relatively to the current day.
2771 ([UIxCalWeekView -lastWeekName])
2772 ([UIxCalWeekView -currentWeekName])
2773 ([UIxCalWeekView -nextWeekName])
2774 ([UIxCalWeekView -weekAfterNextWeekName])
2775 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
2776 methods that returns the label for the corresponding weeks.
2778 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
2779 used by UIxCalDayView and UIxCalWeekView to display the events
2780 occuring in one or more days.
2782 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2784 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
2785 entries in the new "monthMenu" and "yearMenu".
2787 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
2788 method to return the current day as a string formatted depending
2789 on the current locale.
2791 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
2792 ([UIxCalAptListView -endDate]): "today" is now the default filter
2793 for displayed events.
2794 ([UIxCalAptListView -currentSerialDay]): new method returning the
2795 date of the current enumerated appointment in serial form
2798 * UI/WebServerResources/SchedulerUI.js: added code to select the
2799 relevant day when an appointment is selected. Added code to popup
2800 a month and a year menu whenever the header entries are clicked in
2801 the calendar widget.
2803 * UI/WebServerResources/generic.js: made addClassName and
2804 removeClassName methods of HTMLElement.
2806 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2808 * UI/WebServerResources/MailerUI.js: fixed the contact creation
2809 from email addresses.
2811 * UI/WebServerResources/generic.js: centralized the search-related
2812 functions here since the same code was used across the 3
2815 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
2816 ([UIxCalAptListView -endDate]): return the required dates needed
2817 depending on the value given to the "filterpopup" url parameter.
2819 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
2820 code by invoking UIxComponent's labelForKey:.
2822 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
2823 [self pageResourceManager] instead of [self resourceManager].
2825 * UI/Contacts/UIxContactEditorBase.m: invokes
2826 globallyUniqueObjectId on the clientobject's class instead of the
2827 hardcoded "SOGoFolder".
2829 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
2830 -newAction]): redirect the "new" action to the personal (default)
2833 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
2834 +objectWithName:inContainer:]): new constructor.
2836 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2837 -lookupContactWithId:recordId]): always create a contact object,
2838 even if it does not exist.
2840 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2842 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
2843 component that lays out the different components of SOGoCalendar.
2844 Only serves as an Objective-C counterpart to its xml template.
2846 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
2849 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
2850 display a widget to handle the information displayed in the
2851 appointments list. Not currently used, lacks implementation.
2853 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
2854 display a calendar as a dynamic widget from where one can select
2855 the current visible day.
2857 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
2858 extracted from UIxCalInlineMonthOverview.m.
2860 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
2861 calendarPageURL methods. The javascript code is handled by .js
2862 files as much as possible...
2864 * UI/WebServerResources/ContactsUI.js,
2865 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
2868 * UI/WebServerResources/SchedulerUI.js: implemented functions to
2869 handle the new widgets. XmlHTTPRequest code taken from
2872 * UI/WebServerResources/generic.js: put some functions related to
2873 element selections as methods to HTMLElement and HTMLTableElement.
2875 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
2876 display the list of appointments (embodies the code-size of
2877 UIxCalAptListView; answers to the "aptlist" method).
2879 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2881 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
2882 -correctURLAction]): new short action method replacing the method
2883 below by taking far less code.
2885 * SoObjects/Appointments/SOGoAppointmentFolder.m
2886 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
2887 with an action in the view-related code.
2889 * UI/Scheduler/UIxAppointmentEditor.m: invoke
2890 "stringByEscapingHTMLString" on the resulting value to avoid
2891 issues with accented characters.
2892 ([-jsCode]): removed method since the javascript code was merged
2893 into SchedulerUI.js.
2895 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2897 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
2898 new class method that returns an iCalPerson based on the UID given
2901 * UI/Contacts/UIxContactsListViewContainerBase.m:
2902 UIxContactsListViewContainer renamed to serve as a base class for
2903 the contact lists in both the contact editor and the contact
2906 * SoObjects/Contacts/SOGoContactLDAPFolder.m
2907 ([SOGoContactLDAPFolder
2908 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
2909 setUserIdentifier:setRootDN:]): an LDAP field specifying the
2910 loginname of the users can now be specified.
2912 * UI/WebServerResources/generic.js: added code to manage contact
2913 lists through the new implementation of the UIxContactSelector.
2915 * UI/Templates: put the templates related to SchedulerUI in its
2918 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
2919 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
2920 entry for "uid" with the field name representing the login name of
2921 the user in the corresponding LDAP branch.
2923 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2925 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
2926 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
2927 request is a PUT, always create an entry, even if we're not sure
2930 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2932 * UI/WebServerResources/ContactsUI.js: implemented live-search.
2934 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
2935 -appendSystemSourcesInContext:context]): populated method with
2936 code that creates entries mapped to instances SOGoContactFolder,
2937 based on the configuration found in the NSUserDefaults under the
2938 key "SOGoLDAPAddressBooks".
2939 ([SOGoContactFolders
2940 -lookupName:nameinContext:contextacquire:acquire]):
2941 "contactsources" do not exist anymore, SOGoContactFolder was split
2942 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
2943 and one protocol: SOGOContactFolder, instead.
2944 ([SOGoContactFolders -contactFolders]): new accessor used by the
2945 views of SOGoContactXXXFolder to list the possible sources.
2947 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
2948 defines the methods that UIxContactsView, ..Editor and so on...
2951 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
2952 defines the methods that UIxContactsListViewBase expects as well
2953 as the data fields returned in the contact lists.
2955 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
2956 returns entries an LDAP server. Conforms to the new
2957 SOGOContactFolder protocol.
2959 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
2960 returns a vCard based on contact entries from an LDAP server.
2961 Conforms to the new SOGOContactObject protocol.
2963 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
2964 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
2965 entry for the textual representation of the vCard.
2967 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
2970 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
2971 "SOGoContactObject".
2973 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
2974 method that generates a textual representation of the vcard.
2976 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
2978 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
2979 "SOGoContactFolder".
2981 * SoObjects/Contacts/SOGoContactSource.h,
2982 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
2985 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
2986 -singleAttributeWithName:key]): new method that returns the first
2987 object associated with an ldap key (where generally one value is
2990 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
2991 map the entry into an NSDictionary for processing by
2992 UIxContactsListViewBase.m with the least possible overhead.
2994 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
2997 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
2999 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
3000 -privateContacts:inContext:]): now returns an instance of
3003 * UI/Contacts/UIxContactsListViewContainer.m
3004 ([UIxContactsListViewContainer -contactFolderName]): new method to
3005 return the absolute path to the current contact folder, called
3006 from within the template.
3008 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
3009 JS code to initialize the 'currentContactFolder' generic var.
3011 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
3012 +contactFolderWithSource:inContainer:andName:]): new class
3013 method meant to return an instance connected to the specified
3014 source. Currently useless but won't be anymore in the next few
3017 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
3018 the "lookupFreeBusyObject" method since it does not exist.
3020 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
3021 as a "view" for the SOGoContactFolders object. Does nothing but
3022 redirect the browser to the URL of the personal address book of
3023 the user. It does not even have a template.
3025 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
3026 implementing the SOGoContactSource protocol. Does nothing
3027 currently but will be used to implement access to the personal
3028 address book of the user stored in the SOGo database.
3030 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
3031 protocol defining an API common to all possible types of contact
3034 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
3035 serving as the root of the contact folders available to the
3036 current user. Correctly lists the contact sources in webdav.
3038 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3040 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
3041 -composeAction]): new action method that permits external object
3042 to write a message from the default (primary) account.
3044 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3045 -initSnapshot]): new method with code taken from "defaultAction"
3046 but needed for others.
3047 ([UIxContactEditorBase -writeAction]): new action designed to
3048 compose the correct URL needed to obtain the MailerUI's email
3049 editor with the correct "mailto" parameter.
3051 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
3052 Common so that other modules can use it.
3054 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
3055 easier to manage both ajax and non-ajax requests.
3057 * UI/Contacts/UIxContactsFilterPanel.m: clone of
3058 UIxMailFilterPanel, but applicable to contact lists.
3060 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
3061 -vcardContentFromSOGoContactRecord]): use the new standard methods
3062 created for each type of entry. If a line is determined to not
3063 contain information, it will be skipped.
3065 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
3066 +initialize]): init defaultMailDomain with the user default
3067 "SOGoDefaultMailDomain".
3069 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3071 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3072 -saveAction]): reorganized methods to only have ONE return point.
3073 Invoke saveRecord: directly on the clientObject instead of
3074 saveContentString, which does the same thing anyway.
3076 * SoObjects/Contacts/NSDictionary+Contact.m
3077 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
3078 method to convert the dictionary returned with the user submission
3079 to a record in VCARD format to be stored in the database.
3081 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3083 * UI/WebServerResources/MailerUI.js: when opening the context menu
3084 of the message list, select the message below the mouse cursor and
3085 deselect the other selected messages temporarily. This mimics the
3086 behaviour of Thunderbird for that matter and was already
3087 implemented for the entries of the folder tree.
3089 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
3090 -iconForMenuItem]): new method that returns the fully qualified
3091 relative URL to the icon representing the mailbox, or the default
3092 mailbox icon if needed.
3094 * UI/SOGoUI/UIxComponent.m ([UIxComponent
3095 -urlForResourceFilename:filename]): automatically return an empty
3096 string whenever the filename passed as argument is nil.
3098 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
3099 "desc" parameter set to 1 so that they are sorted in descending
3100 order by default. Also, added "onHeaderClick()", triggered by
3101 clicking on the message list header elements.
3103 * UI/MailerUI/UIxMailSortableTableHeader.m
3104 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
3106 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3107 -isSortedDescending]): defaults to "YES" when the sort order is
3110 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3112 * UI/WebServerResources/MailerUI.js:
3113 - message cache: set the max num of cached messages to 20. Limit
3114 the cached message size to 30000 bytes.
3115 - ajax: when a message request is called while one is already
3116 being performed, the latter will be cancelled. Idem when
3117 retrieving the content of a mailbox.
3118 - folder tree: when a mailbox is selected because of the URL
3119 requested (initMailboxSelection), the dtree is expanded throughout
3120 the mailbox entry's parent hierarchy to ensure it is made visible
3121 when the page is being displayed. (new function: expandUpperTree).
3122 - mailbox loading: when loading a mailbox where a message was
3123 previously selected, we invoke its url with the "pageforuid"
3124 parameter correctly specified. During callback processing, we scan
3125 the table for the related row and reselect it.
3126 Also, the message area is set blank before loading any mailbox.
3128 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
3129 -defaultAction]): if the "pageforuid" parameter is passed in the
3130 url, take its value and invoke [self firstMessageOfPageFor:]
3131 consequently to deduce the first message to display. Otherwise,
3132 set it to "idx", otherwise set it to 0.
3133 ([UIxMailListView -firstMessageOfPageFor:]): new method
3134 that determines the first message of the page where the message
3135 passed as parameter is contained.
3137 * UI/WebServerResources/UIxMailListView.js: removed this module,
3138 its code was put in MailerUI.js instead.
3140 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3142 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
3143 which returns the nodes for the parent specified in "parentMenu".
3144 Used to generate the javascript code for the folder dtree.
3146 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
3147 using that container-template are now using UIxMailMainFrame
3148 since UIxMailPanelFrame had no real interest. File removed.
3150 * UI/WebServerResources/dtree.{css,js}: new files to handle
3151 javascript-generated mailbox tree. Modified from original version
3152 by integrating the previous code with the one we are using for
3153 selections and mailbox handling. Minor visual enhancements too...
3155 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3157 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
3158 returned, put it in an NSArray before returning it (fixes
3161 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3163 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
3164 that returns a url string stripped from its "http://hostname"
3167 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
3169 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
3171 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3173 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
3174 -mailDateFormatter]): retrieve the timezone from the user settings
3175 and pass it to the returned dateFormatter. Also, the dateFormatter
3176 is kept in a static variable to avoid useless
3177 creations/destructions.
3179 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
3180 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
3182 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
3183 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
3184 s/Criteria/Text/ to handle the "criteria" form parameter.
3186 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3188 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
3189 to integrate better with the firefox look&feel. Added entries for
3190 the new "menu" DIV class (popup menus).
3192 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
3193 takes any chunk of text as param, detects the user email and the
3194 optional first and last names and return them in a well-formatted
3195 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
3196 namespace conflict. Added "onMenuClick(node, event, menuId)" to
3197 handle popup menus through "onclick" element attributes (node =
3198 this, event = event and menuId = name of the menu DIV id to
3201 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
3202 -snapshot]): add an entry for "email" into the snapshot
3203 dictionary if a "contactEmail" URL parameter was detected and if
3204 the entry for "email" is empty.
3206 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
3207 button now invokes the newContact() js function in ContactsUI.js
3208 instead of opening "new" directly. newContact() pops up a window
3209 stripped from its navigation bar.
3211 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
3212 bundle (AddressBook).
3214 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
3215 "menu" and id "addressMenu" have the header email addresses
3216 display it with the new menu code in generic.js.
3218 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
3219 replaced the body tables with a div of class "pageContent"
3220 (standardization across the page templates).
3222 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
3223 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
3224 those are now inherited from UIxPageFrame.
3226 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
3228 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
3229 a "mailto" URL parameter is detected and the "to" array is empty,
3230 initialize "to" with the value of "mailto" before returning it.
3232 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
3233 -composeAction]): rewrote method in a cleaner way and with usage
3234 of the URL extensions to NSString and NSDictionary (see below).
3235 Also, if a "mailto" url parameter is detected, pass it to the
3238 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
3241 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
3242 returns a parameter string to add to a base URL.
3244 * UI/Common/NSString+URL.m ([NSString
3245 -composeURLWithAction:parameters:andHash:useHash]): new method to
3246 compose a complete URL from an object URL with parameters and an
3247 optional '#' character.
3249 * UI/Common/UIxPageFrame.h: separated interface from
3252 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
3254 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
3256 * UI/WebServerResources/generic.js: added code to manage
3257 selections within HTML containers.
3259 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
3260 added method to determine the possible URL for a product-specific
3261 javascript filename of the forme <productname>.js.
3262 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
3263 ([UIxPageFrame -isPopup]): new method to determine whether the
3264 application navigator bar should be displayed (main page) or not
3267 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
3268 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
3269 the user through LDAP.
3271 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3273 * The toolbar code from the MailerUI product was taken, renamed as
3274 "UIxToolBar" and put into UI/Common. Toolbar plists were created
3275 for the Contacts and Scheduler products and put in their respectir
3276 Toolbars/ subdirectories. Finally,
3277 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
3278 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
3279 and an invocation to the UIxToolbar component was put at the top
3280 of UI/Templaces/UIxPageFrame.wox.
3282 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
3283 within the templates whether a separator should be displayed.
3285 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
3286 that returns NO if the toolbar is empty.
3288 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3290 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
3292 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
3293 new toolbar objects.
3295 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
3297 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
3298 linkbanner as a DIV instead of a TABLE.
3300 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
3302 returns 'YES' to request the display of the navigation bar between
3305 2006-06-15 ludovic@inverse.ca
3307 * It's now possible to set the default
3308 domain using for email using the
3309 SOGoDefaultMailDomain preference key.
3311 2006-06-15 ludovic@inverse.ca
3313 * Initial import of SOGo from trunk.