1 2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
3 * SoObjects/Appointments/SOGoAppointmentFolder.m
4 ([SOGoAppointmentFolder
5 -appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
6 escape the record string in a way suitable with XML encoding.
8 2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
10 * UI/WebServerResources/SchedulerUI.js: fixed a bug where the
11 calendar view would not be updated properly.
13 2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
15 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
16 -newStartDate]): fix the handling of the component start date
17 depending on the "hm" and the "day" parameters.
19 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
20 -roleOfUser:uidinContext:context]): set role of current user to
21 "Assistant" if the object that is accessed is "freebusy.ifb".
23 * SoObjects/Appointments/SOGoAppointmentFolder.m
24 ([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
25 moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
26 ([SOGoAppointmentFolder
27 -lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
28 lookupCalendarFolderForUID: method, which doesn't do security
31 2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
33 * UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
34 accessor that returns the comma-separated list of users with role
36 ([UIxAclEditor -delegatesValue]): same as above for "Delegate".
37 ([UIxAclEditor -_prepareUsers]): there is no longer a concept of
38 "checkedUsers". Instead, each user is either classified in the
39 list of assistants or the list of delegates.
41 2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
43 * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
44 -composeAction]): method imported from removed container modules.
45 ([UIxMailMainFrame -mailFolderName]): method imported from removed
48 * UI/MailerUI/UIxMailPopupView.m: a new special popup component
49 for wrapping UIxMailView with the "popupview" action.
51 * UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
52 since its the component that displays the same splash screen than
53 the one in Thunderbird/Icedove.
55 * UI/MailerUI/UIxMailAccountViewContainer.[hm],
56 UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
57 UI/MailerUI/UIxMailListViewContainer.[hm],
58 UI/MailerUI/UIxMailViewContainer.[hm]: removed
60 2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
62 * UI/WebServerResources/HTMLElement.js: replaced the functional
63 selectNode() and deselectNode() functions with select() and
64 deselect() methods of HTMLElement.
66 * UI/WebServerResources/ContactsUI.js: cleanup, most of the
67 events are initialized from here now instead of in the HTML code.
69 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
70 -checkRightsAction]): new method similar to the one with the same
71 name in UIxCalMainView.m.
73 * UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
74 code to handle the publishing of freebusy information.
76 2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
78 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
79 -checkRightsAction]): new action method that returns a
80 comma-separated list of boolean values matching the right of the
81 current user to "view" (as a permission) each foreign calendar
82 stored in his preferences.
84 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
85 new method that sets a customOwner, which can be returned with
86 ownerInContext it set.
88 * SoObjects/Appointments/SOGoAppointmentFolder.m
89 ([SOGoAppointmentFolder
90 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
92 2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
94 * SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
95 below, but for the Contacts and Calendar collections.
97 * SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
98 new acl facilities method from sope-gdl/GCSFolder.m.
100 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
101 -roleOfUser:uidinContext:context]): new method that returns
102 SOGoRole_Assistant when the user is an assistant or a delegate on
103 the "personal" ab object. This is so that setting roles on the
104 SOGoContactFolders object is not required.
106 2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
108 * Main/SOGo.m: declare "Freebusy" permissions for the top objects.
110 * UI/Contacts/UIxContactsAclsSelection.m: new component specific
111 to the handling of the user selection for the acls.
113 * SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
114 values from SoPermissions with ones specific to SOGo.
116 * SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
117 handles the storage for the acls.
119 * SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
120 class for SOGoAppointmentObject and SOGoTaskObject.
122 * UI/Common/UIxAclEditor.[hm]: new component that provides a
123 general editor for folder acls.
125 * SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
127 ([NSString -davMethodToObjC]): method that returns the method name
128 for a DAV property implementation.
130 * SoObjects/SOGo/NSArray+Utilities.m: new extension module to
132 ([NSArray -stringsWithFormat:format]): new method that returns
133 formatted occurences of the strings stored in the array.
135 * SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
136 +davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
137 subclass module of SoWebDAVValue that supports collections of
138 properties of the same type.
140 2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
142 * SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
143 -lookupFolder:ofClassNamed:inContext:]): added the ability to
144 configure the name of the SOGoDraftFolders with the ud var
145 "SOGoDraftsFolderName".
147 2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
149 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
150 -userTimeZone:username]): new method that returns the timezone for
151 the specified user depending on his preferences and the server
154 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
155 -stringForData:partInfo:]): take the encoding into account and
156 translate the text to "normal" before processing the charset data.
158 2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
160 * UI/WebServerResources/generic.js: the progress indicator is on
161 when loading the page so we turn it off, and we turn it back on
162 whenever we switch to another module...
164 * UI/WebServerResources/SchedulerUI.js: make sure the day view
165 synchronization mechanism works everywhere.
167 * UI/WebServerResources/generic.js: the log window is not only
168 visible when UIxDebugEnabled is set.
170 * UI/WebServerResources/SchedulerUI.js: the month overview's day
171 cells are now initialized with the DOM event interface methods
172 instead of with html attributes.
174 * UI/Templates/MailerUI/UIxMailView.wox: don't display useless
175 headers (should be made configurable at some point)...
177 * OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
178 "not null" constraint on startdate, enddate, isopaque,
179 participants and partmails.
181 2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
183 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
184 -hoursToDisplay]): prevent a crash by retaining the
185 "hoursToDisplay" array after it's created.
186 ([UIxCalDayTable -clickableHourCellClass]): new method for the new
189 * UI/WebServerResources/SchedulerUI.js: made the event
190 participation status modification asynchronous, which also fixes a
191 bug where the window would sometimes close before the accept or
192 decline action was completed. Also, adapted the event handling
193 related to the days or weeks view with the new DIV-based layout.
195 * UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
197 * UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
198 DIV-based presentation of the days and weeks.
200 * SoObjects/Appointments/SOGoTaskObject.m: same as below...
202 * SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
203 might return an exception so we have to handle it if we don't
206 2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
208 * UI/WebServerResources/SchedulerUI.js: updated the list
209 initialization code to use the new event management scheme, adding
210 what was missing to be able to delete events and tasks again.
212 * UI/WebServerResources/MailerUI.js: added code to activate the
213 "Get mails" button. Fixed a bug which prevented messages to be
216 * UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
217 navigation and focus handling of INPUTs.
219 2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
221 * UI/WebServerResources/MailerUI.js: added code to handle the
222 possible drag and drop events to manager in the mail module.
223 Moving messages, opening parent folders, ...
225 * UI/WebServerResources/SOGoDragAndDrop.js: new file containing
226 the drag and drop manager as well as the interface to HTMLElement
227 to trigger drag and drop events.
229 * UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
230 action to move the current message to the mailbox named after the
231 value of parameter "tofolder".
233 * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
234 -moveToFolderNamed:folderNameinContext:]): new method base on
237 2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
239 * UI/WebServerResources/generic.js: added and activated many
240 "load" handlers to configure generic widgets used across the
241 modules. More events are now handled in a DOM-fashion way instead
242 of by setting the relative attributes in the templates.
244 * UI/Templates/UIxSortableTableHeader.wox: all the events are
245 declared from the javascript DOM onload handlers.
247 * UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
250 * UI/Templates/MailerUI/UIxMailListView.wox: all the events are
251 declared from the javascript DOM onload handlers.
253 * UI/MailerUI/UIxMailListView.m: removed all the JS methods since
254 we want everything to be separated from each other, as much as
257 * UI/WebServerResources/SOGoDragHandles.js: new module containing
258 the "SOGoDragHandlesInterface", implementing methods that can be
259 attributed to DIV so that they can be used as drag handles.
261 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
262 -asQPSubjectString]): initialize the tmp strings with '0' to make
263 sure they don't contain garbage.
265 2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
267 * UI/WebServerResources/MailerUI.js: register the messageList
268 table as a dragging source and the leaf of the navigation tree as
269 dnd destinations to the DNDManager.
271 * UI/WebServerResources/generic.js: initialize tabs from the
272 "unload" event listener that is added programmatically instead of
273 from the template... Also, added the new DNDManager object.
275 * UI/WebServerResources/HTMLTableElement.js: added code to
276 simulate XUL drag n drop events. This code will possibly be moved
277 to HTMLElement.js instead later...
279 * SoObjects/Contacts/SOGoContactLDAPFolder.m
280 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
283 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
284 -_qualifierForFilter:filter]): only search records which starts
285 with the specified pattern.
287 2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
289 * SoObjects/Mailer/SOGoDraftObject.m ([NSString
290 -asQPSubjectString]): new method that returns the special QP
291 string with its qp declaration for email subjects.
292 ([SOGoDraftObject -bodyPartForText])
293 ([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
294 double-encode data in UTF-8.
296 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
297 -newStartDate]): new method to determine the start date depending
298 on the URL parameters, the current day and the current time.
299 ([UIxComponentEditor -toolbar]): new method to determine the
300 filename of the toolbar that should be drawn depending on the
301 ownership and the list of attendees of the task/event wrt to the
304 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
305 -setDayStartHour:aStartHour]): adjust the minutes to the next
306 quarter of hour, if not already set to a quarter.
308 * UI/WebServerResources/UIxAppointmentEditor.js,
309 UI/WebServerResources/UIxTaskEditor.js: added code to manage start
312 2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
314 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
315 -loadValuesFromComponent:component]): handles access class
316 (privacy) and status.
318 * UI/Contacts/UIxContactsListViewContainer.m
319 ([UIxContactsListViewContainer -additionalFolders]): return nil if
320 [self additionalAddressBooks] returns an empty string.
322 2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
324 * UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
325 rangesOf7Days]): enhanced and debugged algorithm to feed the array
326 with slices where the first day is still in the requested month.
328 * UI/Templates/UIxPageFrame.wox: the logConsole is created only on
331 * UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
332 of events in the day boxes of the calendar's monthly view.
334 * SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
335 -davContentType]): declare "text/calendar".
337 * SoObjects/Appointments/SOGoAppointmentObject.m
338 ([SOGoAppointmentObject -davContentType]): declare
341 * SoObjects/Appointments/SOGoAppointmentFolder.m
342 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
343 HTTP methods are handled by SOPE and requires nil to be returned,
344 this method now invokes the new
345 "requestNamedIsHandledLater:inContext:" method to check that.
346 ([SOGoAppointmentFolder
347 -requestNamedIsHandledLater:nameinContext:context]): new methods
348 that returns "YES" only for the "OPTIONS" http method (for now...).
349 ([SOGoAppointmentFolder -davComplianceClassesInContext:]):
350 overloaded method to append the "access-control" and
351 "calendar-access" DAV abilities to the initial declaration.
353 * UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
354 imitate the look of Sunbird/Lightning's monthly view.
356 * UI/Scheduler/UIxCalMonthView.[hm]: renamed to
357 UIxCalMonthViewOld.[hm].
359 2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
361 * UI/Scheduler/UIxFreeBusyUserSelectorTable.m
362 ([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
364 ([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
365 returns an image name based on the participation status of the
368 * UI/WebServerResources/SchedulerUI.js: same strip down as for
371 * UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
372 ([UIxContactsListViewContainer -additionalFolders])
373 ([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
374 ([UIxContactsListViewContainer -currentAdditionalFolder]): new
375 methods to handle the external addressbooks a user has subscribed
376 too, by retriving them from his preferences.
378 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
379 -updateAdditionalAddressBooksAction]): new method that updates the
380 user settings with the list of addressbook he has subscribed to.
382 * UI/Contacts/UIxContactsAddressBooksSelection.m: new component
383 module for the address book selector.
385 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
386 a toolbar with two buttons ("add" and "remove") to manage the
387 additional addressbooks a user might subscribe to.
389 * UI/WebServerResources/ContactsUI.js: added code to handle
390 "external addressbooks" from the Javascript point-of-view, by
391 extending existing methods and adding code for the "add ab" and
394 * UI/WebServerResources/generic.js: moved extensions methods to
395 DOM elements to separate files for better clarity.
397 * UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
398 new method that returns "pageContent" as class, but also "popup"
399 for the DIV where the page content lies, so that we can manipulate
400 the content of popup's with CSS identifiers.
402 2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
404 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
405 -displayStyle]): new method that returns a string containing the
406 css style relative to the current appointment cell. This code is
407 currently inactive but might be reused later.
409 * UI/WebServerResources/SchedulerUI.js: added code to handle the
410 display of the selected day (the day pointed by the mouse, or the
411 current day when changing the view).
413 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
414 -dayCellClasses]): new method that returns a string containing the
415 css classes applicable to the current cell, depending on the
416 position of the day in the week, the day of today and the
419 * UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
420 -currentContactAptBorder]): new method that returns the
421 appropriate border color for the specified user.
423 * SoObjects/Appointments/SOGoAppointmentObject.m
424 ([SOGoAppointmentObject
425 -saveContentString:contentStringbaseVersion:baseVersion]):
426 overloaded method that parse new events and detects if they have
427 an organizer or not. If they are new and have no organizer set
428 (Sunbird/Lightning...), the owner of the event is set as
431 * SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
432 category that provides facility methods and interfaces to the
435 * SoObjects/Contacts/product.plist: give full access to ANY
436 authenticated user, not just the owner (to every objects...).
438 2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
440 * UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
441 every replica widgets are declared as such to their master
442 counterpart. Take the days into account when displaying the time
443 range taken by the appointment.
445 * UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
446 -getICalPersonsFromValue:selectorValue]): method taken from
447 UIxFreeBusyUserSelector, that is shared both by
448 UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
450 * SoObjects/Appointments/SOGoAppointmentFolder.m
451 ([SOGoAppointmentFolder
452 -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.
454 * UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
455 derived and taken as a subset of UIxFreeBusyUserSelector that
456 implements the table part of the FreeBusy view. Most of the
457 methods of UIxFreeBusyUserSelector relative to that table were
458 moved into UIxFreeBusyUserSelectorTable, which can also be used as
459 a standalone view for AJAX operations.
461 2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
463 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
464 -vCard]): change reverted.
466 * UI/Contacts/UIxContactEditor.m: check whether the client contact
467 folder has selector "globallyUniqueObjectId" before calling that
470 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
471 -vCard]): the "setVClass" NGVCard method really is "setClass"
474 * SoObjects/Contacts/SOGoContactLDAPFolder.m
475 ([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
476 request the "streetAddress" instead of the "streetaddress".
477 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
478 mails that *contain*, and not just *start with* the search
481 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
482 -vCard]): mark address returned from LDAP as the work address.
484 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
485 span covered with the anchor, not only the textual information
488 * UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
489 argument (event or task) to newEvent in the appointmentListMenu.
490 Make the appointmentsListView display the appointmentsListMenu.
492 * UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
493 12 to 50 before displaying "...".
494 ([SOGoAptFormatter -fullDetailsForApt::]): display location only
495 if its length > 0, whether location itself is nil or not...
496 ([SOGoAptFormatter -tooltipForApt::_refDate]): display information
497 of which the length > 0.
499 2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
501 * UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
502 french and ISO dates.
504 * UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
505 from UIxContactSelector to handle contact lists (current and
506 additional contacts).
508 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
509 -_freeBusyAsText]): added handling of an "additional"-named query
510 parameter that describe the number of additional days after
511 enddate that should be returned.
513 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
514 -_responseForResults:results]): give priority to results with
515 "c_uid" fields. If none returned, use the first contact received.
517 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
518 -extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
519 2 and "CANCELLED" to 0.
521 2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
523 * UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
524 of start and end dates to short string dates.
526 * UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
527 -readFreeBusyAction]): new method that returns an array of numbers
528 corresponding to the state in the freebusy of each "quarter of an
529 hour" between the "sday" and "eday" date parameters passed in the
530 url. This permits to handle the display of the freebusy with Ajax
532 ([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
533 since the free busy displays 2 days ahead.
535 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
536 -contactSearchAction]): new action that returns the uid and the
537 username + email of the user whose name contain the value of the
538 "search" url parameter.
540 * SoObjects/Appointments/SOGoAppointmentFolder.m
541 ([SOGoAppointmentFolder
542 -fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
543 useful for the computing of the status of the freebusy.
545 * UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
546 -init]): new component that incarnates a user selector for events
547 inspired by the new one found in Thunderbird Lightning.
549 2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
551 * UI/WebServerResources/generic.js: added code to enable or
552 disable anchor visually (following our internal algorithm).
554 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
555 added new "url" ivar with its classic accessors.
556 ([UIxComponentEditor -urlButtonClasses]): new method that returns
557 the class strings for the url button on the appointment/task
558 editor (depending on the validity of the url).
560 * UI/Templates/SchedulerUI/UIxTaskEditor.wox,
561 UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
562 the template to match the Lightning's new task/appointment editor.
564 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
566 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
568 2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
570 * SoObjects/Contacts/SOGoContactLDAPFolder.m
571 ([SOGoContactLDAPFolder
572 -lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
574 * SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
575 iCalEntityObject instances instead of just iCalEvent's.
577 * SoObjects/Appointments/SOGoAppointmentFolder.m
578 ([SOGoAppointmentFolder
579 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
581 * SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
582 bad way of handling ownership that way.
584 * SoObjects/Contacts/SOGoContactLDAPFolder.m
585 ([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
586 on "cn", just like Mozilla.
588 2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
590 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
591 "to" should be retained, otherwise it will be autoreleased and a
594 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
595 -writeAction]): updated method to fetch the card before initing
598 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
599 -extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
602 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
603 -iCalStringTemplate]): start and due date are now optional.
605 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
606 -setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
607 appropriate accessors to be settable through the templates.
609 * UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
610 new "isDisabled" ivar with appropriate accessors to be
611 settable through the templates.
613 * UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
614 -availableCalendars]): new method that list the calendars to which
615 the user has subscribed.
616 ([UIxComponentEditor -componentOwner]): returns the owner of the
619 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
620 -extractQuickFieldsFromTodo:_task]): set the start and enddate of
621 quickentries to null whenever each or all of them are null, by
622 providing an impossible timestamp from with NSNotFound as value.
624 2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
626 * UI/WebServerResources/UIxMailEditor.js: update the algorithm
627 that handles the creation of new fields with the new APIs and the
628 new node structure on the page.
630 * UI/Scheduler/UIxAppointmentEditor.m,
631 UI/Scheduler/UIxTaskEditor.m:
632 refactored to user UIxComponentEditor as parent class.
634 * UI/Scheduler/UIxComponentEditor.[hm]: new class module
635 containing the methods common to the UIxTaskEditor and the
636 UIxAppointmentEditor.
638 2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
640 * SoObjects/Appointments/SOGoAppointmentFolder.m
641 ([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
642 the handling of time-ranges.
644 * UI/WebServerResources/ContactsUI.js: specify a notification type as
645 parameters when onConfirmContactSelection in invoked.
647 * UI/WebServerResources/generic.js: specify a notification type as
648 parameters when onContactRemove in invoked.
650 * UI/WebServerResources/SchedulerUI.js: when the user deselects
651 all calendars, select his entry.
653 2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
655 * UI/WebServerResources/SchedulerUI.js: edit and delete events
656 with their owner-relative urls. Generate a correct entry in the
657 css color table when a user is added to the calendars list. Put
658 the same color next to the user id.
660 * UI/WebServerResources/generic.js: implemented some new helper
663 * SoObjects/Appointments/SOGoAppointmentFolder.m
664 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
665 entries if their owner is not the current user.
667 * UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
668 -displayClasses]): return the correct class for the current event
669 representation depending on its owner.
671 * UI/Scheduler/UIxCalCalendarsListView.m: added method to create
672 and associate a color for each user login depending on its
673 position in the list.
675 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
676 -currentRowCSSClass]): return the correct class for the current
677 row depending on the owner of the event.
679 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
680 -setColors:colors]): new method to associate a color table with
681 each user in the list.
683 * SoObjects/Appointments/SOGoAppointmentFolder.m
684 ([SOGoAppointmentFolder
685 -fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
687 * SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
688 NSObject to associate an instance with a user.
690 2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
692 * UI/WebServerResources/SchedulerUI.js: added handling of multiple
695 * UI/WebServerResources/ContactsUI.js: added handling of
696 notification of changes to contact selectors.
698 * UI/WebServerResources/generic.js: added handling of notification
699 of changes to contact selectors.
701 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
702 -updateCalendarsAction]): proxy method to update the user
703 preference table with the new selected calendar uids.
705 * UI/Contacts/UIxContactsListView.m ([UIxContactsListView
706 -calendarsContactsAction]): new method.
708 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
709 ([UIxContactSelector -setHasCheckBoxes:aBool])
710 ([UIxContactSelector -isCheckBoxChecked]): new accessors method to
711 permit the drawing of checkboxes instead of card icons.
713 * UI/Scheduler/UIxCalCalendarsListView.m: new component class that
714 wrap a selector the the "Calendars" tab.
716 * UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
717 new user calendar selector.
719 2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
721 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
722 may cover hour 0 to hour 23.
724 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
725 -iCalStringFromQueryParameter:format:]): dates explicitly set to
728 * UI/WebServerResources/SchedulerUI.js: manage both lists of
729 objects wrt to the toolbar actions.
731 * UI/WebServerResources/generic.js: added code to the "String"
732 class to decode number-encoded char entities.
734 * UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
735 -batchDeleteAction]): new method to delete selected entries in the
738 * SoObjects/Appointments/SOGoAppointmentFolder.m
739 ([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
740 that delete identified entries in batch.
742 * UI/SOGoUI/UIxComponent.m ([UIxComponent
743 -jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
745 * UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
746 UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
747 -saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
748 -sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
750 return a UIxJSClose component if everything went fine.
752 * UI/Scheduler/UIxTaskEditor.h: interface extracted from
755 * UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
756 UIxAppointmentEditor.m.
758 * UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
759 a very light page with javascript code to close a window, by
760 calling a method on the opener if specified. This component is
761 designed to work as a response to form postings.
763 2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
765 * SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
766 SOGoAppointmentObject adapted for the handling of tasks.
768 * SoObjects/Appointments/NSArray+Appointments.[hm]: category
769 extracted from SOGoAppointmentObject.
771 * UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
772 -saveUrl]): returns the url needed to POST the new form to.
773 redirect the user to <aptid>/editAsAppointment instead of /edit,
774 so that SOGoAppointmentFolder can return the correct object type.
776 * SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
777 -compareAptsAscending:_other]): accept empty start or end dates.
779 * SoObjects/Appointments/SOGoAppointmentFolder.m
780 ([SOGoAppointmentFolder
781 -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.
782 ([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
783 components of type "vtodo" as well as "vevent".
784 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
785 url specified ends with AsTask or AsAppointment, returns the
786 an object of the appropriate class, otherwise deduce it from its
787 content if the HTTP method is "PUT", otherwise read its type from
790 * OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
791 -extractQuickFieldsFromTodo:_task]): extract quick fields from
794 * UI/Scheduler/UIxCalView.m ([UIxCalView
795 -fetchCoreAppointmentsInfos]): replacement methods for
796 fetchCoreInfos but by retrieving object with component "vevent".
797 ([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
800 * UI/Scheduler/UIxCalTasksListView.[hm]: clone of
801 UIxCalAptListView adapted for the handling of tasks.
803 * UI/Scheduler/UIxTaskProposal.[hm],
804 UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
805 clones of the UIxAppointment* classes for the handling of tasks.
807 * UI/WebServerResources/UIxTaskEditor.js: clone of
808 UIxAppointmentEditor adapted for the handling of tasks.
810 * UI/WebServerResources/SchedulerUI.js: added support for tasks.
811 Scroll the daily view to the appropriate hour when an appointment
812 is selected in the appointments list.
814 2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
816 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
817 -setDayStartHour:aStartHour]): specifies the user timezone on the
820 * UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
823 * SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
824 ([NSCalendarDate -driftedDate]): methods made useless by a better
825 comprehension of the NSTimeZone API...
827 2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
829 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
830 new methods from the NSCalendarDate methods.
832 * SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
833 extending UI/Scheduler/NSCalendarDate+Scheduler.m.
835 +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).
836 ([NSCalendarDate -adjustedDate]): this method returns another
837 instance set to the correct hour after the original date was set
838 from a non-GMT timezone. This date can be used for storage.
839 ([NSCalendarDate -driftedDate]): this method does exactly the
840 opposite of -adjutedDate, that is, it enables the method
841 hourOfDay, minuteOfHour etc... to return the values according to
842 the original date's timezone. This date CANNOT be used for storage.
844 * UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
845 -shortDateString]): new method that will return a "short date
846 string" (yyyymmdd) from a calendar date object.
848 * UI/SOGoUI/UIxComponent.m ([UIxComponent
849 -_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.
851 * Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
852 to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
854 2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
856 * UI/WebServerResources/SchedulerUI.js: added code to scroll the
857 view of the day at the height of hour 8:00.
859 * UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
860 ([UIxCalView -dayEndHour]): returns 24.
862 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
863 ([UIxContactFoldersView -newAction]): invoke
864 _selectActionForApplication: on self with the proper attribute too.
866 * UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
867 we now use the action mechanism in UIxContactsListView to keep the
868 same view for the contact selectors and the regular contact view.
870 * UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
871 UIxContactsListViewContainerBase.[hm]
873 * UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
875 * UI/WebServerResources/generic.js: generalized emailstring
876 handling functions. Generalized address book access functions.
878 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
879 -isPopup]): return YES if the "popup" query parameter is set.
881 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
882 -defaultAction]): keep the url parameters when redirecting.
883 ([UIxContactFoldersView -selectForSchedulerAction])
884 ([UIxContactFoldersView -selectForMailerAction]): new action
885 methods for the /scheduler-contacts and /mailer-contacts invocations.
887 * SoObjects/SOGo/SOGoObject.m: compose the action url using the
888 newly available NSString+URL category.
890 * SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
891 -asURLParameters]): handle dictionary entries which could be
892 instances of NSArray rather than NSString.
894 * SoObjects/SOGo/NSString+URL.m ([NSString
895 -composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
896 ([NSString -urlWithoutParameters]): new method that returns the
897 url without its parameters.
899 * SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
901 * SoObjects/SOGo/NSDictionary+URL.[hm],
902 UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
904 * UI/WebServerResources/UIxMailEditor.js: add support for
905 additions of different types (to, cc, bcc) of recipients from the
908 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
911 * UI/Contacts/UIxContactsMailerSelection.m,
912 UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
913 UI/Contacts/UIxContactsSelectionView.m to provide a different set
914 of widgets depending on the application invoking the contact list.
916 2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
918 * UI/WebServerResources/ContactsUI.js: hide the current contact
919 whenever the user changes of contact folder.
921 * UI/WebServerResources/UIxContactEditor.js: the contact UID is
922 now provided by the template when loading the page.
924 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
925 -iCalPersonWithUid:uid]): new method taken from removed module
928 2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
930 * UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
931 -categoriesAsString]): same as below.
933 * UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
934 vcalendar API's iCalEvent instead of the removed SOGoAppointment.
936 * SoObjects/Appointments/SOGoAppointmentObject.m
937 ([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
938 ([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
941 * SoObjects/Appointments/SOGoAppointmentFolder.m
942 ([SOGoAppointmentFolder -doCalendarQuery:context]): added a
943 hackish test to detect whether the request concernes VEVENT's or
944 anything else. Return events only in the former case.
945 ([SOGoAppointmentFolder
946 -fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
947 c_name quickfield so that the calendar list can identify the
948 appointments with their complete "filename".
950 * OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
951 groupsOfClass:fromSource: to parse the given vcalendar.
953 * UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
955 * UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
957 * SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
960 * SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
962 2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
964 * SoObjects/Appointments/SOGoAppointmentFolder.m
965 ([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
966 sensitive to the CalDAV method names.
967 ([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
968 "calendar-query" CalDAV method name.
970 * UI/WebServerResources/ContactsUI.js: removed a lot of useless
971 code coming originally from MailerUI.js.
973 * UI/WebServerResources/UIxContactEditor.js: imitate the
974 Thunderbird address book by completing the display name with the
975 content of the first and last name fields, until the display name
976 is modified manually.
978 * UI/WebServerResources/generic.js: added a "trim" method to the
981 * UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
982 -displayName]): new method that returns the display name from "cn"
983 or from the "displayName" key if found.
985 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
986 -initSnapshot]): check if "[card n]" returns anything to avoid a
989 * UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
990 that returns an unparsed doctype definition for the pages.
992 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
993 -vCard]): set the card's fn to attribute "displayName" if found
996 2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
998 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
999 -vCard]): handle the "streetAddress" and "l" fields.
1001 * UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
1002 header fields by converting the tables to DIVs and SPANs.
1004 * UI/WebServerResources/generic.css: attempted unification of font
1005 families and size across all the elements. changed the
1006 logConsole's "position" from "fixed" to "absolute" to avoid
1009 2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1011 * UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
1012 empty the contact view when the current contact is being deleted.
1014 * UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
1015 parse the email field and provide the address full name if found
1016 as the "contactFN" parameter.
1018 * UI/WebServerResources/generic.js (openMailTo): do not give a
1019 name to the opened window so that serveral ones can be opened at
1022 * UI/MailPartViewers/UIxMailPartTextViewer.m
1023 ([UIxMailPartTextViewer -flatContentAsString]): override method by
1024 replacing carriage returns with "<br />" in the result string from
1025 super's implementation.
1027 * UI/Contacts/UIxContactView.m ([UIxContactView
1028 -_urlOfType:aType]): don't manage non-mailto urls through
1029 javascript, let the user decide what's best for him.
1031 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1032 -newAction]): transfer all the query parameters by using the
1033 "asURLParameters"'s result string from [self queryParameters].
1035 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor
1036 -initSnapshot]): retrieve "contactEmail" and "contactFN" from the
1037 query parameters and put their values (if any) into the snapshot.
1039 * UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
1040 carriage-returns to "<br />".
1041 ([UIxContactView -workCompany]): explicitly initialize company to
1042 nil if org is nil or empty.
1044 * UI/WebServerResources/UIxContactEditor.js: updated validation
1045 code after we added and renamed some fields.
1047 * UI/WebServerResources/ContactsUI.js: added code to cache contact
1048 cards and to handle card updates.
1050 2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1052 * UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
1053 test the length of the returned string since they will never be
1056 * UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
1057 return self if the process went successful, returns an exception
1058 otherwise (and only otherwise...).
1060 * OGoContentStore/OCSContactFieldExtractor.m
1061 ([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
1062 adapted method to the new VCard api. Since the cards are stored in
1063 vcard format, we no longer deal with a dictionary but with a
1066 2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1068 * UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
1069 return a string with a "mailto" url.
1070 ([UIxContactView -_urlOfType:aType]): generic method to return a
1071 url string with a html anchor pointing to it.
1073 * UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
1074 since subclass "UIxContactEditor" did nothing. Implemented code to
1075 display and modify the values parsed from the vcards, displayed in
1076 a way similar to the Thunderbird addressbook.
1078 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1079 -save]): new dummy method.
1081 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1082 -save]): made method void.
1084 2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1086 * UI/Contacts/UIxContactView.m: added many wrapper methods to
1087 display blocks of data à la Thunderbird Addressbook. If data is
1088 available, those wrappers (around the NGVCard methods) will
1089 enclose the results in a proper HTML output with the correct label
1090 (if present), otherwise it will return an empty string.
1091 ([UIxContactView -vcardAction]): new action to return the contact
1092 as text/vcard (for exporting).
1094 * SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
1095 +contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
1097 * SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
1098 -vCard]): create a new NGVCard instance when no data is available
1100 ([SOGoContactGCSEntry -save]): save the vCard using the new
1101 "versitString" API method/message.
1103 * UI/Contacts/UIxContactView.h: separated interface from
1106 * UI/WebServerResources/ContactsUI.js: add-ed code to download card
1107 views and display them beneath the list.
1109 2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1111 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
1112 the timezone even when it's the server timezone.
1114 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1115 -privateContacts:inContext:]): no long configure the calendar
1116 object with the user's timezone since it's now accessible
1117 application-wide throught the SOGoObject methods.
1119 * UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
1120 method. Removed the "backendTimeZone" method.
1122 * UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
1123 instead of SoComponent.
1125 * SoObjects/Appointments/SOGoAppointmentObject.m:
1126 ([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
1127 [self serverTimeZone] instead of "EST" (which was removed).
1129 * SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
1130 "timeZone" ivar and its accessors.
1132 * SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
1133 centralized method returing the timezone configured in the
1134 userdefaults db or "Canada/Eastern" if missing.
1135 ([SOGoObject -userTimeZone]): new centralized method returing the
1136 timezone of the current user or the server timezone if missing
1137 from the user configuration table.
1139 2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1141 * UI/WebServerResources/SchedulerUI.js: implemented caching of
1144 * UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
1145 return a path based on the object's context instead of the first
1146 level in SOGo's object hierarchy...
1148 2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1150 * UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
1153 * UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
1154 timezone ([self viewTimeZone]) to the WEMonthOverview component to
1155 avoid a confusion with the days.
1157 * UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
1160 * UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
1161 imitate Sunbird's synchronization between the 3 visible views.
1163 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
1164 sure the numbers in dateString are formatted so as to take 4 chars
1165 for the year and 2 for the day and the month, otherwise
1166 NSCalendarDate will return a nil date.
1167 ([UIxComponent -applicationPath]): return a path based on the
1168 object's context instead of the second level in SOGo's object
1171 2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1173 * UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
1174 user's timezone abbreviation to the date string passed as parameter to
1175 NSCalendarDate to generate an accurate date instance. Do the same
1176 when no date is specified and today is chosen.
1178 * UI/WebServerResources/UIxAppointmentEditor.js: convert the
1179 form's time values to integers before comparing them.
1181 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
1182 ([UIxCalAptListView -currentEndTime]): initialize the resulting
1183 dates timezone with [self viewTimeZone].
1185 * UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
1186 "viewTimeZone" ivar destined to hold an instance of the user's
1188 ([UIxComponent -viewTimeZone]): take the timezone from the user's
1191 2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1193 * UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
1194 rearranged the layout.
1196 * UI/WebServerResources/UIxAppointmentEditor.js: added code to
1197 manage showing and hiding appointment details.
1199 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1200 -privateContacts:inContext:]): init the SOGoAppointmentFolder's
1201 timezone by taking the current user's timezone setting.
1203 * SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
1205 * SoObjects/Appointments/SOGoAppointmentObject.m
1206 ([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
1207 set default timezone to EST, although this code should be
1208 rewritten to handle a system and a user default value.
1210 * UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
1211 -takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
1212 take the values from the hour and minute INPUTs when data is
1213 POSTed since we no longer use the UIxTimeSelector component.
1214 ([UIxTimeDateControl -selectableHours])
1215 ([UIxTimeDateControl -selectableMinutes]): new methods used by the
1216 template SELECTs to display reasonable and acceptable values
1217 instead of all the possibilities.
1219 * UI/WebServerResources/generic.js: adapted code for the new
1220 implementation of the UIxContactSelector component (added a
1221 "remove" button, removed the previous INPUT and replaced them with
1222 links of class "button").
1224 * UI/Scheduler/UIxTimeDateControl.h: separated interface from
1225 UIxTimeDateControl.m.
1227 * UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
1228 ([UIxCalDayTable -currentAppointmentHour]): new methods that
1229 returns correctly formatted values used as attributes for JS code.
1231 * UI/Contacts/UIxContactSelector.m ([UIxContactSelector
1232 -initialContactsAsString]): renamed implementation of
1233 initialParticipants.
1234 ([UIxContactSelector -currentContactId])
1235 ([UIxContactSelector -currentContactName]): new methods used when
1236 listing the initial contacts in the widget. Currently, both return
1237 the person's cn but the latter should ultimately return a user
1240 * UI/Contacts/UIxContactSelector.h: separated interface from
1241 UIxContactSelector.m.
1243 * UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
1244 all javascript code is now put in Scheduler.js/generic.js.
1246 * UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
1247 moved into NSCalendarDate+Scheduler instead.
1249 * SoObjects/Appointments/SOGoAppointmentFolder.m
1250 ([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
1251 configure the timezone from SOGoUserFolder when the instance is
1253 ([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
1254 the value of the new "timezone" ivar.
1256 2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1258 * UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
1259 the date selector in the first page and the container of the
1260 future calendar selector in the second page.
1262 * UI/WebServerResources/generic.js: added code for handling tabbed
1265 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
1266 returns the bundle name associated to the current running product.
1268 2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1270 * UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
1271 exception by invoking a timeout on the opener rather than invoking
1272 the list refresh method.
1274 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
1277 * UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
1278 ([UIxCalWeekView -prevWeekQueryParameters])
1279 ([UIxCalWeekView -nextWeekQueryParameters])
1280 ([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
1281 that return the dates relatively to the current day.
1282 ([UIxCalWeekView -lastWeekName])
1283 ([UIxCalWeekView -currentWeekName])
1284 ([UIxCalWeekView -nextWeekName])
1285 ([UIxCalWeekView -weekAfterNextWeekName])
1286 ([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
1287 methods that returns the label for the corresponding weeks.
1289 * UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
1290 used by UIxCalDayView and UIxCalWeekView to display the events
1291 occuring in one or more days.
1293 2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1295 * UI/Scheduler/UIxCalMainView.m: extended class to populate the
1296 entries in the new "monthMenu" and "yearMenu".
1298 * UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
1299 method to return the current day as a string formatted depending
1300 on the current locale.
1302 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
1303 ([UIxCalAptListView -endDate]): "today" is now the default filter
1304 for displayed events.
1305 ([UIxCalAptListView -currentSerialDay]): new method returning the
1306 date of the current enumerated appointment in serial form
1309 * UI/WebServerResources/SchedulerUI.js: added code to select the
1310 relevant day when an appointment is selected. Added code to popup
1311 a month and a year menu whenever the header entries are clicked in
1312 the calendar widget.
1314 * UI/WebServerResources/generic.js: made addClassName and
1315 removeClassName methods of HTMLElement.
1317 2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1319 * UI/WebServerResources/MailerUI.js: fixed the contact creation
1320 from email addresses.
1322 * UI/WebServerResources/generic.js: centralized the search-related
1323 functions here since the same code was used across the 3
1326 * UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
1327 ([UIxCalAptListView -endDate]): return the required dates needed
1328 depending on the value given to the "filterpopup" url parameter.
1330 * UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
1331 code by invoking UIxComponent's labelForKey:.
1333 * UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
1334 [self pageResourceManager] instead of [self resourceManager].
1336 * UI/Contacts/UIxContactEditorBase.m: invokes
1337 globallyUniqueObjectId on the clientobject's class instead of the
1338 hardcoded "SOGoFolder".
1340 * UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
1341 -newAction]): redirect the "new" action to the personal (default)
1344 * SoObjects/SOGo/SOGoObject.m ([SOGoObject
1345 +objectWithName:inContainer:]): new constructor.
1347 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1348 -lookupContactWithId:recordId]): always create a contact object,
1349 even if it does not exist.
1351 2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1353 * UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
1354 component that lays out the different components of SOGoCalendar.
1355 Only serves as an Objective-C counterpart to its xml template.
1357 * UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
1360 * UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
1361 display a widget to handle the information displayed in the
1362 appointments list. Not currently used, lacks implementation.
1364 * UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
1365 display a calendar as a dynamic widget from where one can select
1366 the current visible day.
1368 * UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
1369 extracted from UIxCalInlineMonthOverview.m.
1371 * UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
1372 calendarPageURL methods. The javascript code is handled by .js
1373 files as much as possible...
1375 * UI/WebServerResources/ContactsUI.js,
1376 UI/WebServerResources/MailerUI.js: adapted to the code refactoring
1379 * UI/WebServerResources/SchedulerUI.js: implemented functions to
1380 handle the new widgets. XmlHTTPRequest code taken from
1383 * UI/WebServerResources/generic.js: put some functions related to
1384 element selections as methods to HTMLElement and HTMLTableElement.
1386 * UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
1387 display the list of appointments (embodies the code-size of
1388 UIxCalAptListView; answers to the "aptlist" method).
1390 2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1392 * UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
1393 -correctURLAction]): new short action method replacing the method
1394 below by taking far less code.
1396 * SoObjects/Appointments/SOGoAppointmentFolder.m
1397 ([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
1398 with an action in the view-related code.
1400 * UI/Scheduler/UIxAppointmentEditor.m: invoke
1401 "stringByEscapingHTMLString" on the resulting value to avoid
1402 issues with accented characters.
1403 ([-jsCode]): removed method since the javascript code was merged
1404 into SchedulerUI.js.
1406 2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1408 * UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
1409 new class method that returns an iCalPerson based on the UID given
1412 * UI/Contacts/UIxContactsListViewContainerBase.m:
1413 UIxContactsListViewContainer renamed to serve as a base class for
1414 the contact lists in both the contact editor and the contact
1417 * SoObjects/Contacts/SOGoContactLDAPFolder.m
1418 ([SOGoContactLDAPFolder
1419 -LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
1420 setUserIdentifier:setRootDN:]): an LDAP field specifying the
1421 loginname of the users can now be specified.
1423 * UI/WebServerResources/generic.js: added code to manage contact
1424 lists through the new implementation of the UIxContactSelector.
1426 * UI/Templates: put the templates related to SchedulerUI in its
1429 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
1430 -asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
1431 entry for "uid" with the field name representing the login name of
1432 the user in the corresponding LDAP branch.
1434 2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1436 * SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
1437 -lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
1438 request is a PUT, always create an entry, even if we're not sure
1441 2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1443 * UI/WebServerResources/ContactsUI.js: implemented live-search.
1445 * SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
1446 -appendSystemSourcesInContext:context]): populated method with
1447 code that creates entries mapped to instances SOGoContactFolder,
1448 based on the configuration found in the NSUserDefaults under the
1449 key "SOGoLDAPAddressBooks".
1450 ([SOGoContactFolders
1451 -lookupName:nameinContext:contextacquire:acquire]):
1452 "contactsources" do not exist anymore, SOGoContactFolder was split
1453 into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
1454 and one protocol: SOGOContactFolder, instead.
1455 ([SOGoContactFolders -contactFolders]): new accessor used by the
1456 views of SOGoContactXXXFolder to list the possible sources.
1458 * SoObjects/Contacts/SOGoContactObject.h: new protocol that
1459 defines the methods that UIxContactsView, ..Editor and so on...
1462 * SoObjects/Contacts/SOGoContactFolder.h: new protocol that
1463 defines the methods that UIxContactsListViewBase expects as well
1464 as the data fields returned in the contact lists.
1466 * SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
1467 returns entries an LDAP server. Conforms to the new
1468 SOGOContactFolder protocol.
1470 * SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
1471 returns a vCard based on contact entries from an LDAP server.
1472 Conforms to the new SOGOContactObject protocol.
1474 * SoObjects/Contacts/NGVCardSimpleValue+Contact.m
1475 ([NGVCardSimpleValue -vCardEntryString]): generates the correct
1476 entry for the textual representation of the vCard.
1478 * SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
1481 * SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
1482 "SOGoContactObject".
1484 * SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
1485 method that generates a textual representation of the vcard.
1487 * SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
1489 * SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
1490 "SOGoContactFolder".
1492 * SoObjects/Contacts/SOGoContactSource.h,
1493 SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
1496 * SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
1497 -singleAttributeWithName:key]): new method that returns the first
1498 object associated with an ldap key (where generally one value is
1501 -asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
1502 map the entry into an NSDictionary for processing by
1503 UIxContactsListViewBase.m with the least possible overhead.
1505 * SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
1508 2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1510 * SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
1511 -privateContacts:inContext:]): now returns an instance of
1514 * UI/Contacts/UIxContactsListViewContainer.m
1515 ([UIxContactsListViewContainer -contactFolderName]): new method to
1516 return the absolute path to the current contact folder, called
1517 from within the template.
1519 * UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
1520 JS code to initialize the 'currentContactFolder' generic var.
1522 * SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
1523 +contactFolderWithSource:inContainer:andName:]): new class
1524 method meant to return an instance connected to the specified
1525 source. Currently useless but won't be anymore in the next few
1528 * SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
1529 the "lookupFreeBusyObject" method since it does not exist.
1531 * UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
1532 as a "view" for the SOGoContactFolders object. Does nothing but
1533 redirect the browser to the URL of the personal address book of
1534 the user. It does not even have a template.
1536 * SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
1537 implementing the SOGoContactSource protocol. Does nothing
1538 currently but will be used to implement access to the personal
1539 address book of the user stored in the SOGo database.
1541 * SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
1542 protocol defining an API common to all possible types of contact
1545 * SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
1546 serving as the root of the contact folders available to the
1547 current user. Correctly lists the contact sources in webdav.
1549 2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1551 * UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
1552 -composeAction]): new action method that permits external object
1553 to write a message from the default (primary) account.
1555 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
1556 -initSnapshot]): new method with code taken from "defaultAction"
1557 but needed for others.
1558 ([UIxContactEditorBase -writeAction]): new action designed to
1559 compose the correct URL needed to obtain the MailerUI's email
1560 editor with the correct "mailto" parameter.
1562 * UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
1563 Common so that other modules can use it.
1565 * UI/Contacts/UIxContactsListViewContainer.m: container to make it
1566 easier to manage both ajax and non-ajax requests.
1568 * UI/Contacts/UIxContactsFilterPanel.m: clone of
1569 UIxMailFilterPanel, but applicable to contact lists.
1571 * SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
1572 -vcardContentFromSOGoContactRecord]): use the new standard methods
1573 created for each type of entry. If a line is determined to not
1574 contain information, it will be skipped.
1576 * SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
1577 +initialize]): init defaultMailDomain with the user default
1578 "SOGoDefaultMailDomain".
1580 2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1582 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
1583 -saveAction]): reorganized methods to only have ONE return point.
1584 Invoke saveRecord: directly on the clientObject instead of
1585 saveContentString, which does the same thing anyway.
1587 * SoObjects/Contacts/NSDictionary+Contact.m
1588 ([NSDictionary -vcardContentFromSOGoContactRecord]): extension
1589 method to convert the dictionary returned with the user submission
1590 to a record in VCARD format to be stored in the database.
1592 2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1594 * UI/WebServerResources/MailerUI.js: when opening the context menu
1595 of the message list, select the message below the mouse cursor and
1596 deselect the other selected messages temporarily. This mimics the
1597 behaviour of Thunderbird for that matter and was already
1598 implemented for the entries of the folder tree.
1600 * UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
1601 -iconForMenuItem]): new method that returns the fully qualified
1602 relative URL to the icon representing the mailbox, or the default
1603 mailbox icon if needed.
1605 * UI/SOGoUI/UIxComponent.m ([UIxComponent
1606 -urlForResourceFilename:filename]): automatically return an empty
1607 string whenever the filename passed as argument is nil.
1609 * UI/WebServerResources/MailerUI.js: open the mailboxes with the
1610 "desc" parameter set to 1 so that they are sorted in descending
1611 order by default. Also, added "onHeaderClick()", triggered by
1612 clicking on the message list header elements.
1614 * UI/MailerUI/UIxMailSortableTableHeader.m
1615 ([UIxMailSortableTableHeader -isSortedDescending]): same as below.
1617 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1618 -isSortedDescending]): defaults to "YES" when the sort order is
1621 2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1623 * UI/WebServerResources/MailerUI.js:
1624 - message cache: set the max num of cached messages to 20. Limit
1625 the cached message size to 30000 bytes.
1626 - ajax: when a message request is called while one is already
1627 being performed, the latter will be cancelled. Idem when
1628 retrieving the content of a mailbox.
1629 - folder tree: when a mailbox is selected because of the URL
1630 requested (initMailboxSelection), the dtree is expanded throughout
1631 the mailbox entry's parent hierarchy to ensure it is made visible
1632 when the page is being displayed. (new function: expandUpperTree).
1633 - mailbox loading: when loading a mailbox where a message was
1634 previously selected, we invoke its url with the "pageforuid"
1635 parameter correctly specified. During callback processing, we scan
1636 the table for the related row and reselect it.
1637 Also, the message area is set blank before loading any mailbox.
1639 * UI/MailerUI/UIxMailListView.m ([UIxMailListView
1640 -defaultAction]): if the "pageforuid" parameter is passed in the
1641 url, take its value and invoke [self firstMessageOfPageFor:]
1642 consequently to deduce the first message to display. Otherwise,
1643 set it to "idx", otherwise set it to 0.
1644 ([UIxMailListView -firstMessageOfPageFor:]): new method
1645 that determines the first message of the page where the message
1646 passed as parameter is contained.
1648 * UI/WebServerResources/UIxMailListView.js: removed this module,
1649 its code was put in MailerUI.js instead.
1651 2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1653 * UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
1654 which returns the nodes for the parent specified in "parentMenu".
1655 Used to generate the javascript code for the folder dtree.
1657 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
1658 using that container-template are now using UIxMailMainFrame
1659 since UIxMailPanelFrame had no real interest. File removed.
1661 * UI/WebServerResources/dtree.{css,js}: new files to handle
1662 javascript-generated mailbox tree. Modified from original version
1663 by integrating the previous code with the one we are using for
1664 selections and mailbox handling. Minor visual enhancements too...
1666 2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1668 * SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
1669 returned, put it in an NSArray before returning it (fixes
1672 2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1674 * UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
1675 that returns a url string stripped from its "http://hostname"
1678 * UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
1680 * UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
1682 2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1684 * UI/MailerUI/WOContext+UIxMailer.m ([WOContext
1685 -mailDateFormatter]): retrieve the timezone from the user settings
1686 and pass it to the returned dateFormatter. Also, the dateFormatter
1687 is kept in a static variable to avoid useless
1688 creations/destructions.
1690 * UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
1691 -setTimeZone:newTimeZone]): new accessor to specify the timezone.
1693 * UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
1694 ([UIxMailFilterPanel -searchCriteria]): new methods, similar to
1695 s/Criteria/Text/ to handle the "criteria" form parameter.
1697 2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1699 * UI/WebServerResources/uix.css: enhanced the toolbar appearance
1700 to integrate better with the firefox look&feel. Added entries for
1701 the new "menu" DIV class (popup menus).
1703 * UI/WebServerResources/generic.js: added "sanitizeMailTo" which
1704 takes any chunk of text as param, detects the user email and the
1705 optional first and last names and return them in a well-formatted
1706 way. Renamed "getSelection" to "getSelectedNodes" to avoid a
1707 namespace conflict. Added "onMenuClick(node, event, menuId)" to
1708 handle popup menus through "onclick" element attributes (node =
1709 this, event = event and menuId = name of the menu DIV id to
1712 * UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
1713 -snapshot]): add an entry for "email" into the snapshot
1714 dictionary if a "contactEmail" URL parameter was detected and if
1715 the entry for "email" is empty.
1717 * UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
1718 button now invokes the newContact() js function in ContactsUI.js
1719 instead of opening "new" directly. newContact() pops up a window
1720 stripped from its navigation bar.
1722 * UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
1723 bundle (AddressBook).
1725 * UI/Templates/MailerUI/UIxMailView.wox: added a div of class
1726 "menu" and id "addressMenu" have the header email addresses
1727 display it with the new menu code in generic.js.
1729 * UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
1730 replaced the body tables with a div of class "pageContent"
1731 (standardization across the page templates).
1733 * UI/Templates/MailerUI/UIxMailMainFrame.wox: include
1734 productJavaScriptURL and pageJavaScriptURL (conditionnally) since
1735 those are now inherited from UIxPageFrame.
1737 * UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
1739 * UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
1740 a "mailto" URL parameter is detected and the "to" array is empty,
1741 initialize "to" with the value of "mailto" before returning it.
1743 * UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
1744 -composeAction]): rewrote method in a cleaner way and with usage
1745 of the URL extensions to NSString and NSDictionary (see below).
1746 Also, if a "mailto" url parameter is detected, pass it to the
1749 * UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
1752 * UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
1753 returns a parameter string to add to a base URL.
1755 * UI/Common/NSString+URL.m ([NSString
1756 -composeURLWithAction:parameters:andHash:useHash]): new method to
1757 compose a complete URL from an object URL with parameters and an
1758 optional '#' character.
1760 * UI/Common/UIxPageFrame.h: separated interface from
1763 2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
1765 * UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
1767 * UI/WebServerResources/generic.js: added code to manage
1768 selections within HTML containers.
1770 * UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
1771 added method to determine the possible URL for a product-specific
1772 javascript filename of the forme <productname>.js.
1773 ([UIxPageFrame -hasProductSpecificJavaScript]): new method.
1774 ([UIxPageFrame -isPopup]): new method to determine whether the
1775 application navigator bar should be displayed (main page) or not
1778 * SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
1779 -LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
1780 the user through LDAP.
1782 2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1784 * The toolbar code from the MailerUI product was taken, renamed as
1785 "UIxToolBar" and put into UI/Common. Toolbar plists were created
1786 for the Contacts and Scheduler products and put in their respectir
1787 Toolbars/ subdirectories. Finally,
1788 UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
1789 UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
1790 and an invocation to the UIxToolbar component was put at the top
1791 of UI/Templaces/UIxPageFrame.wox.
1793 * UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
1794 within the templates whether a separator should be displayed.
1796 * UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
1797 that returns NO if the toolbar is empty.
1799 2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
1801 * UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
1803 * UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
1804 new toolbar objects.
1806 * UI/Templates/UIxPageFrame.wox: use the exact html code as below.
1808 * UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
1809 linkbanner as a DIV instead of a TABLE.
1811 * UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
1813 returns 'YES' to request the display of the navigation bar between
1816 2006-06-15 ludovic@inverse.ca
1818 * It's now possible to set the default
1819 domain using for email using the
1820 SOGoDefaultMailDomain preference key.
1822 2006-06-15 ludovic@inverse.ca
1824 * Initial import of SOGo from trunk.