9ec06c4bb9
Monotone-Revision: 11fad7a10b612bfb5d7852bc31ad9fa992c6a07b Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2006-10-18T14:42:44 Monotone-Branch: ca.inverse.sogo
1198 lines
48 KiB
Plaintext
1198 lines
48 KiB
Plaintext
2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m,
|
||
UI/Scheduler/UIxTaskEditor.m:
|
||
refactored to user UIxComponentEditor as parent class.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.[hm]: new class module
|
||
containing the methods common to the UIxTaskEditor and the
|
||
UIxAppointmentEditor.
|
||
|
||
2006-10-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
|
||
the handling of time-ranges.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: specify a notification type as
|
||
parameters when onConfirmContactSelection in invoked.
|
||
|
||
* UI/WebServerResources/generic.js: specify a notification type as
|
||
parameters when onContactRemove in invoked.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: when the user deselects
|
||
all calendars, select his entry.
|
||
|
||
2006-10-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: edit and delete events
|
||
with their owner-relative urls. Generate a correct entry in the
|
||
css color table when a user is added to the calendars list. Put
|
||
the same color next to the user id.
|
||
|
||
* UI/WebServerResources/generic.js: implemented some new helper
|
||
methods.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
|
||
entries if their owner is not the current user.
|
||
|
||
* UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
|
||
-displayClasses]): return the correct class for the current event
|
||
representation depending on its owner.
|
||
|
||
* UI/Scheduler/UIxCalCalendarsListView.m: added method to create
|
||
and associate a color for each user login depending on its
|
||
position in the list.
|
||
|
||
* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
|
||
-currentRowCSSClass]): return the correct class for the current
|
||
row depending on the owner of the event.
|
||
|
||
* UI/Contacts/UIxContactSelector.m ([UIxContactSelector
|
||
-setColors:colors]): new method to associate a color table with
|
||
each user in the list.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
|
||
|
||
* SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
|
||
NSObject to associate an instance with a user.
|
||
|
||
2006-10-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: added handling of multiple
|
||
calendars.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: added handling of
|
||
notification of changes to contact selectors.
|
||
|
||
* UI/WebServerResources/generic.js: added handling of notification
|
||
of changes to contact selectors.
|
||
|
||
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
|
||
-updateCalendarsAction]): proxy method to update the user
|
||
preference table with the new selected calendar uids.
|
||
|
||
* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
|
||
-calendarsContactsAction]): new method.
|
||
|
||
* UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
|
||
([UIxContactSelector -setHasCheckBoxes:aBool])
|
||
([UIxContactSelector -isCheckBoxChecked]): new accessors method to
|
||
permit the drawing of checkboxes instead of card icons.
|
||
|
||
* UI/Scheduler/UIxCalCalendarsListView.m: new component class that
|
||
wrap a selector the the "Calendars" tab.
|
||
|
||
* UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
|
||
new user calendar selector.
|
||
|
||
2006-10-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
|
||
may cover hour 0 to hour 23.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
|
||
-iCalStringFromQueryParameter:format:]): dates explicitly set to
|
||
utc tz.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: manage both lists of
|
||
objects wrt to the toolbar actions.
|
||
|
||
* UI/WebServerResources/generic.js: added code to the "String"
|
||
class to decode number-encoded char entities.
|
||
|
||
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
|
||
-batchDeleteAction]): new method to delete selected entries in the
|
||
lists.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
|
||
that delete identified entries in batch.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent
|
||
-jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
|
||
UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
|
||
-saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
|
||
-sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
|
||
-saveAction]):
|
||
return a UIxJSClose component if everything went fine.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.h: interface extracted from
|
||
UIxTaskEditor.m.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
|
||
UIxAppointmentEditor.m.
|
||
|
||
* UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
|
||
a very light page with javascript code to close a window, by
|
||
calling a method on the opener if specified. This component is
|
||
designed to work as a response to form postings.
|
||
|
||
2006-10-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
|
||
SOGoAppointmentObject adapted for the handling of tasks.
|
||
|
||
* SoObjects/Appointments/NSArray+Appointments.[hm]: category
|
||
extracted from SOGoAppointmentObject.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
|
||
-saveUrl]): returns the url needed to POST the new form to.
|
||
redirect the user to <aptid>/editAsAppointment instead of /edit,
|
||
so that SOGoAppointmentFolder can return the correct object type.
|
||
|
||
* SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
|
||
-compareAptsAscending:_other]): accept empty start or end dates.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-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.
|
||
([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
|
||
components of type "vtodo" as well as "vevent".
|
||
([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
|
||
url specified ends with AsTask or AsAppointment, returns the
|
||
an object of the appropriate class, otherwise deduce it from its
|
||
content if the HTTP method is "PUT", otherwise read its type from
|
||
the quick table.
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
|
||
-extractQuickFieldsFromTodo:_task]): extract quick fields from
|
||
tasks.
|
||
|
||
* UI/Scheduler/UIxCalView.m ([UIxCalView
|
||
-fetchCoreAppointmentsInfos]): replacement methods for
|
||
fetchCoreInfos but by retrieving object with component "vevent".
|
||
([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
|
||
components.
|
||
|
||
* UI/Scheduler/UIxCalTasksListView.[hm]: clone of
|
||
UIxCalAptListView adapted for the handling of tasks.
|
||
|
||
* UI/Scheduler/UIxTaskProposal.[hm],
|
||
UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
|
||
clones of the UIxAppointment* classes for the handling of tasks.
|
||
|
||
* UI/WebServerResources/UIxTaskEditor.js: clone of
|
||
UIxAppointmentEditor adapted for the handling of tasks.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: added support for tasks.
|
||
Scroll the daily view to the appropriate hour when an appointment
|
||
is selected in the appointments list.
|
||
|
||
2006-10-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
|
||
-setDayStartHour:aStartHour]): specifies the user timezone on the
|
||
given date.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
|
||
as timezone.
|
||
|
||
* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
|
||
([NSCalendarDate -driftedDate]): methods made useless by a better
|
||
comprehension of the NSTimeZone API...
|
||
|
||
2006-10-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
|
||
new methods from the NSCalendarDate methods.
|
||
|
||
* SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
|
||
extending UI/Scheduler/NSCalendarDate+Scheduler.m.
|
||
([NSCalendarDate
|
||
+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).
|
||
([NSCalendarDate -adjustedDate]): this method returns another
|
||
instance set to the correct hour after the original date was set
|
||
from a non-GMT timezone. This date can be used for storage.
|
||
([NSCalendarDate -driftedDate]): this method does exactly the
|
||
opposite of -adjutedDate, that is, it enables the method
|
||
hourOfDay, minuteOfHour etc... to return the values according to
|
||
the original date's timezone. This date CANNOT be used for storage.
|
||
|
||
* UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
|
||
-shortDateString]): new method that will return a "short date
|
||
string" (yyyymmdd) from a calendar date object.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent
|
||
-_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.
|
||
|
||
* Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
|
||
to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
|
||
|
||
2006-10-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: added code to scroll the
|
||
view of the day at the height of hour 8:00.
|
||
|
||
* UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
|
||
([UIxCalView -dayEndHour]): returns 24.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
|
||
([UIxContactFoldersView -newAction]): invoke
|
||
_selectActionForApplication: on self with the proper attribute too.
|
||
|
||
* UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
|
||
we now use the action mechanism in UIxContactsListView to keep the
|
||
same view for the contact selectors and the regular contact view.
|
||
|
||
* UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
|
||
UIxContactsListViewContainerBase.[hm]
|
||
|
||
* UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
|
||
|
||
* UI/WebServerResources/generic.js: generalized emailstring
|
||
handling functions. Generalized address book access functions.
|
||
|
||
* UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
|
||
-isPopup]): return YES if the "popup" query parameter is set.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-defaultAction]): keep the url parameters when redirecting.
|
||
([UIxContactFoldersView -selectForSchedulerAction])
|
||
([UIxContactFoldersView -selectForMailerAction]): new action
|
||
methods for the /scheduler-contacts and /mailer-contacts invocations.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m: compose the action url using the
|
||
newly available NSString+URL category.
|
||
|
||
* SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
|
||
-asURLParameters]): handle dictionary entries which could be
|
||
instances of NSArray rather than NSString.
|
||
|
||
* SoObjects/SOGo/NSString+URL.m ([NSString
|
||
-composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
|
||
([NSString -urlWithoutParameters]): new method that returns the
|
||
url without its parameters.
|
||
|
||
* SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
|
||
|
||
* SoObjects/SOGo/NSDictionary+URL.[hm],
|
||
UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
|
||
|
||
* UI/WebServerResources/UIxMailEditor.js: add support for
|
||
additions of different types (to, cc, bcc) of recipients from the
|
||
address book.
|
||
|
||
* UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
|
||
"<?xml..." header.
|
||
|
||
* UI/Contacts/UIxContactsMailerSelection.m,
|
||
UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
|
||
UI/Contacts/UIxContactsSelectionView.m to provide a different set
|
||
of widgets depending on the application invoking the contact list.
|
||
|
||
2006-09-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/ContactsUI.js: hide the current contact
|
||
whenever the user changes of contact folder.
|
||
|
||
* UI/WebServerResources/UIxContactEditor.js: the contact UID is
|
||
now provided by the template when loading the page.
|
||
|
||
* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
|
||
-iCalPersonWithUid:uid]): new method taken from removed module
|
||
'iCalPerson+UIx';
|
||
|
||
2006-09-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
|
||
-categoriesAsString]): same as below.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
|
||
vcalendar API's iCalEvent instead of the removed SOGoAppointment.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m
|
||
([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
|
||
([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
|
||
helper method.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -doCalendarQuery:context]): added a
|
||
hackish test to detect whether the request concernes VEVENT's or
|
||
anything else. Return events only in the former case.
|
||
([SOGoAppointmentFolder
|
||
-fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
|
||
c_name quickfield so that the calendar list can identify the
|
||
appointments with their complete "filename".
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
|
||
groupsOfClass:fromSource: to parse the given vcalendar.
|
||
|
||
* UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
|
||
|
||
* UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
|
||
|
||
* SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
|
||
obsolete class.
|
||
|
||
* SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
|
||
|
||
2006-09-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
|
||
sensitive to the CalDAV method names.
|
||
([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
|
||
"calendar-query" CalDAV method name.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: removed a lot of useless
|
||
code coming originally from MailerUI.js.
|
||
|
||
* UI/WebServerResources/UIxContactEditor.js: imitate the
|
||
Thunderbird address book by completing the display name with the
|
||
content of the first and last name fields, until the display name
|
||
is modified manually.
|
||
|
||
* UI/WebServerResources/generic.js: added a "trim" method to the
|
||
String class.
|
||
|
||
* UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
|
||
-displayName]): new method that returns the display name from "cn"
|
||
or from the "displayName" key if found.
|
||
|
||
* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
|
||
-initSnapshot]): check if "[card n]" returns anything to avoid a
|
||
crash.
|
||
|
||
* UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
|
||
that returns an unparsed doctype definition for the pages.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-vCard]): set the card's fn to attribute "displayName" if found
|
||
before "cn".
|
||
|
||
2006-09-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-vCard]): handle the "streetAddress" and "l" fields.
|
||
|
||
* UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
|
||
header fields by converting the tables to DIVs and SPANs.
|
||
|
||
* UI/WebServerResources/generic.css: attempted unification of font
|
||
families and size across all the elements. changed the
|
||
logConsole's "position" from "fixed" to "absolute" to avoid
|
||
performance issues.
|
||
|
||
2006-09-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
|
||
empty the contact view when the current contact is being deleted.
|
||
|
||
* UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
|
||
parse the email field and provide the address full name if found
|
||
as the "contactFN" parameter.
|
||
|
||
* UI/WebServerResources/generic.js (openMailTo): do not give a
|
||
name to the opened window so that serveral ones can be opened at
|
||
the same time.
|
||
|
||
* UI/MailPartViewers/UIxMailPartTextViewer.m
|
||
([UIxMailPartTextViewer -flatContentAsString]): override method by
|
||
replacing carriage returns with "<br />" in the result string from
|
||
super's implementation.
|
||
|
||
* UI/Contacts/UIxContactView.m ([UIxContactView
|
||
-_urlOfType:aType]): don't manage non-mailto urls through
|
||
javascript, let the user decide what's best for him.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-newAction]): transfer all the query parameters by using the
|
||
"asURLParameters"'s result string from [self queryParameters].
|
||
|
||
* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
|
||
-initSnapshot]): retrieve "contactEmail" and "contactFN" from the
|
||
query parameters and put their values (if any) into the snapshot.
|
||
|
||
* UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
|
||
carriage-returns to "<br />".
|
||
([UIxContactView -workCompany]): explicitly initialize company to
|
||
nil if org is nil or empty.
|
||
|
||
* UI/WebServerResources/UIxContactEditor.js: updated validation
|
||
code after we added and renamed some fields.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: added code to cache contact
|
||
cards and to handle card updates.
|
||
|
||
2006-09-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
|
||
test the length of the returned string since they will never be
|
||
nil.
|
||
|
||
* UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
|
||
return self if the process went successful, returns an exception
|
||
otherwise (and only otherwise...).
|
||
|
||
* OGoContentStore/OCSContactFieldExtractor.m
|
||
([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
|
||
adapted method to the new VCard api. Since the cards are stored in
|
||
vcard format, we no longer deal with a dictionary but with a
|
||
NGVCard object...
|
||
|
||
2006-09-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
|
||
return a string with a "mailto" url.
|
||
([UIxContactView -_urlOfType:aType]): generic method to return a
|
||
url string with a html anchor pointing to it.
|
||
|
||
* UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
|
||
since subclass "UIxContactEditor" did nothing. Implemented code to
|
||
display and modify the values parsed from the vcards, displayed in
|
||
a way similar to the Thunderbird addressbook.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-save]): new dummy method.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
|
||
-save]): made method void.
|
||
|
||
2006-09-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactView.m: added many wrapper methods to
|
||
display blocks of data <20> la Thunderbird Addressbook. If data is
|
||
available, those wrappers (around the NGVCard methods) will
|
||
enclose the results in a proper HTML output with the correct label
|
||
(if present), otherwise it will return an empty string.
|
||
([UIxContactView -vcardAction]): new action to return the contact
|
||
as text/vcard (for exporting).
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
+contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
|
||
-vCard]): create a new NGVCard instance when no data is available
|
||
and retain it.
|
||
([SOGoContactGCSEntry -save]): save the vCard using the new
|
||
"versitString" API method/message.
|
||
|
||
* UI/Contacts/UIxContactView.h: separated interface from
|
||
UIxContactView.m.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: add-ed code to download card
|
||
views and display them beneath the list.
|
||
|
||
2006-09-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
|
||
the timezone even when it's the server timezone.
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
|
||
-privateContacts:inContext:]): no long configure the calendar
|
||
object with the user's timezone since it's now accessible
|
||
application-wide throught the SOGoObject methods.
|
||
|
||
* UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
|
||
method. Removed the "backendTimeZone" method.
|
||
|
||
* UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
|
||
instead of SoComponent.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m:
|
||
([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
|
||
[self serverTimeZone] instead of "EST" (which was removed).
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
|
||
"timeZone" ivar and its accessors.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
|
||
centralized method returing the timezone configured in the
|
||
userdefaults db or "Canada/Eastern" if missing.
|
||
([SOGoObject -userTimeZone]): new centralized method returing the
|
||
timezone of the current user or the server timezone if missing
|
||
from the user configuration table.
|
||
|
||
2006-09-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: implemented caching of
|
||
date selectors.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
|
||
return a path based on the object's context instead of the first
|
||
level in SOGo's object hierarchy...
|
||
|
||
2006-09-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
|
||
be clicked.
|
||
|
||
* UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
|
||
timezone ([self viewTimeZone]) to the WEMonthOverview component to
|
||
avoid a confusion with the days.
|
||
|
||
* UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
|
||
can now be clicked.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
|
||
imitate Sunbird's synchronization between the 3 visible views.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
|
||
sure the numbers in dateString are formatted so as to take 4 chars
|
||
for the year and 2 for the day and the month, otherwise
|
||
NSCalendarDate will return a nil date.
|
||
([UIxComponent -applicationPath]): return a path based on the
|
||
object's context instead of the second level in SOGo's object
|
||
hierarchy...
|
||
|
||
2006-09-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
|
||
user's timezone abbreviation to the date string passed as parameter to
|
||
NSCalendarDate to generate an accurate date instance. Do the same
|
||
when no date is specified and today is chosen.
|
||
|
||
* UI/WebServerResources/UIxAppointmentEditor.js: convert the
|
||
form's time values to integers before comparing them.
|
||
|
||
* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
|
||
([UIxCalAptListView -currentEndTime]): initialize the resulting
|
||
dates timezone with [self viewTimeZone].
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
|
||
"viewTimeZone" ivar destined to hold an instance of the user's
|
||
timezone in memory.
|
||
([UIxComponent -viewTimeZone]): take the timezone from the user's
|
||
prefs.
|
||
|
||
2006-08-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
|
||
rearranged the layout.
|
||
|
||
* UI/WebServerResources/UIxAppointmentEditor.js: added code to
|
||
manage showing and hiding appointment details.
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
|
||
-privateContacts:inContext:]): init the SOGoAppointmentFolder's
|
||
timezone by taking the current user's timezone setting.
|
||
|
||
* SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m
|
||
([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
|
||
set default timezone to EST, although this code should be
|
||
rewritten to handle a system and a user default value.
|
||
|
||
* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
|
||
-takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
|
||
take the values from the hour and minute INPUTs when data is
|
||
POSTed since we no longer use the UIxTimeSelector component.
|
||
([UIxTimeDateControl -selectableHours])
|
||
([UIxTimeDateControl -selectableMinutes]): new methods used by the
|
||
template SELECTs to display reasonable and acceptable values
|
||
instead of all the possibilities.
|
||
|
||
* UI/WebServerResources/generic.js: adapted code for the new
|
||
implementation of the UIxContactSelector component (added a
|
||
"remove" button, removed the previous INPUT and replaced them with
|
||
links of class "button").
|
||
|
||
* UI/Scheduler/UIxTimeDateControl.h: separated interface from
|
||
UIxTimeDateControl.m.
|
||
|
||
* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
|
||
([UIxCalDayTable -currentAppointmentHour]): new methods that
|
||
returns correctly formatted values used as attributes for JS code.
|
||
|
||
* UI/Contacts/UIxContactSelector.m ([UIxContactSelector
|
||
-initialContactsAsString]): renamed implementation of
|
||
initialParticipants.
|
||
([UIxContactSelector -currentContactId])
|
||
([UIxContactSelector -currentContactName]): new methods used when
|
||
listing the initial contacts in the widget. Currently, both return
|
||
the person's cn but the latter should ultimately return a user
|
||
fullname.
|
||
|
||
* UI/Contacts/UIxContactSelector.h: separated interface from
|
||
UIxContactSelector.m.
|
||
|
||
* UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
|
||
all javascript code is now put in Scheduler.js/generic.js.
|
||
|
||
* UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
|
||
moved into NSCalendarDate+Scheduler instead.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
|
||
configure the timezone from SOGoUserFolder when the instance is
|
||
being created.
|
||
([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
|
||
the value of the new "timezone" ivar.
|
||
|
||
2006-08-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
|
||
the date selector in the first page and the container of the
|
||
future calendar selector in the second page.
|
||
|
||
* UI/WebServerResources/generic.js: added code for handling tabbed
|
||
views.
|
||
|
||
* UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
|
||
returns the bundle name associated to the current running product.
|
||
|
||
2006-08-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
|
||
exception by invoking a timeout on the opener rather than invoking
|
||
the list refresh method.
|
||
|
||
* UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
|
||
removed method.
|
||
|
||
* UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
|
||
([UIxCalWeekView -prevWeekQueryParameters])
|
||
([UIxCalWeekView -nextWeekQueryParameters])
|
||
([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
|
||
that return the dates relatively to the current day.
|
||
([UIxCalWeekView -lastWeekName])
|
||
([UIxCalWeekView -currentWeekName])
|
||
([UIxCalWeekView -nextWeekName])
|
||
([UIxCalWeekView -weekAfterNextWeekName])
|
||
([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
|
||
methods that returns the label for the corresponding weeks.
|
||
|
||
* UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
|
||
used by UIxCalDayView and UIxCalWeekView to display the events
|
||
occuring in one or more days.
|
||
|
||
2006-08-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMainView.m: extended class to populate the
|
||
entries in the new "monthMenu" and "yearMenu".
|
||
|
||
* UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
|
||
method to return the current day as a string formatted depending
|
||
on the current locale.
|
||
|
||
* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
|
||
([UIxCalAptListView -endDate]): "today" is now the default filter
|
||
for displayed events.
|
||
([UIxCalAptListView -currentSerialDay]): new method returning the
|
||
date of the current enumerated appointment in serial form
|
||
(yyyymmdd).
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: added code to select the
|
||
relevant day when an appointment is selected. Added code to popup
|
||
a month and a year menu whenever the header entries are clicked in
|
||
the calendar widget.
|
||
|
||
* UI/WebServerResources/generic.js: made addClassName and
|
||
removeClassName methods of HTMLElement.
|
||
|
||
2006-08-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/MailerUI.js: fixed the contact creation
|
||
from email addresses.
|
||
|
||
* UI/WebServerResources/generic.js: centralized the search-related
|
||
functions here since the same code was used across the 3
|
||
applications.
|
||
|
||
* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
|
||
([UIxCalAptListView -endDate]): return the required dates needed
|
||
depending on the value given to the "filterpopup" url parameter.
|
||
|
||
* UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
|
||
code by invoking UIxComponent's labelForKey:.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
|
||
[self pageResourceManager] instead of [self resourceManager].
|
||
|
||
* UI/Contacts/UIxContactEditorBase.m: invokes
|
||
globallyUniqueObjectId on the clientobject's class instead of the
|
||
hardcoded "SOGoFolder".
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-newAction]): redirect the "new" action to the personal (default)
|
||
contact folder.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject
|
||
+objectWithName:inContainer:]): new constructor.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
|
||
-lookupContactWithId:recordId]): always create a contact object,
|
||
even if it does not exist.
|
||
|
||
2006-08-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
|
||
component that lays out the different components of SOGoCalendar.
|
||
Only serves as an Objective-C counterpart to its xml template.
|
||
|
||
* UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
|
||
from its .m file.
|
||
|
||
* UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
|
||
display a widget to handle the information displayed in the
|
||
appointments list. Not currently used, lacks implementation.
|
||
|
||
* UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
|
||
display a calendar as a dynamic widget from where one can select
|
||
the current visible day.
|
||
|
||
* UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
|
||
extracted from UIxCalInlineMonthOverview.m.
|
||
|
||
* UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
|
||
calendarPageURL methods. The javascript code is handled by .js
|
||
files as much as possible...
|
||
|
||
* UI/WebServerResources/ContactsUI.js,
|
||
UI/WebServerResources/MailerUI.js: adapted to the code refactoring
|
||
in generic.js.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: implemented functions to
|
||
handle the new widgets. XmlHTTPRequest code taken from
|
||
MailerUI.js.
|
||
|
||
* UI/WebServerResources/generic.js: put some functions related to
|
||
element selections as methods to HTMLElement and HTMLTableElement.
|
||
|
||
* UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
|
||
display the list of appointments (embodies the code-size of
|
||
UIxCalAptListView; answers to the "aptlist" method).
|
||
|
||
2006-08-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
|
||
-correctURLAction]): new short action method replacing the method
|
||
below by taking far less code.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
|
||
with an action in the view-related code.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m: invoke
|
||
"stringByEscapingHTMLString" on the resulting value to avoid
|
||
issues with accented characters.
|
||
([-jsCode]): removed method since the javascript code was merged
|
||
into SchedulerUI.js.
|
||
|
||
2006-08-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
|
||
new class method that returns an iCalPerson based on the UID given
|
||
as param.
|
||
|
||
* UI/Contacts/UIxContactsListViewContainerBase.m:
|
||
UIxContactsListViewContainer renamed to serve as a base class for
|
||
the contact lists in both the contact editor and the contact
|
||
selectors.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder
|
||
-LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
|
||
setUserIdentifier:setRootDN:]): an LDAP field specifying the
|
||
loginname of the users can now be specified.
|
||
|
||
* UI/WebServerResources/generic.js: added code to manage contact
|
||
lists through the new implementation of the UIxContactSelector.
|
||
|
||
* UI/Templates: put the templates related to SchedulerUI in its
|
||
own directory.
|
||
|
||
* SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
|
||
-asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
|
||
entry for "uid" with the field name representing the login name of
|
||
the user in the corresponding LDAP branch.
|
||
|
||
2006-08-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
|
||
-lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
|
||
request is a PUT, always create an entry, even if we're not sure
|
||
it does exist.
|
||
|
||
2006-08-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/ContactsUI.js: implemented live-search.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-appendSystemSourcesInContext:context]): populated method with
|
||
code that creates entries mapped to instances SOGoContactFolder,
|
||
based on the configuration found in the NSUserDefaults under the
|
||
key "SOGoLDAPAddressBooks".
|
||
([SOGoContactFolders
|
||
-lookupName:nameinContext:contextacquire:acquire]):
|
||
"contactsources" do not exist anymore, SOGoContactFolder was split
|
||
into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
|
||
and one protocol: SOGOContactFolder, instead.
|
||
([SOGoContactFolders -contactFolders]): new accessor used by the
|
||
views of SOGoContactXXXFolder to list the possible sources.
|
||
|
||
* SoObjects/Contacts/SOGoContactObject.h: new protocol that
|
||
defines the methods that UIxContactsView, ..Editor and so on...
|
||
can expect.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolder.h: new protocol that
|
||
defines the methods that UIxContactsListViewBase expects as well
|
||
as the data fields returned in the contact lists.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
|
||
returns entries an LDAP server. Conforms to the new
|
||
SOGOContactFolder protocol.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
|
||
returns a vCard based on contact entries from an LDAP server.
|
||
Conforms to the new SOGOContactObject protocol.
|
||
|
||
* SoObjects/Contacts/NGVCardSimpleValue+Contact.m
|
||
([NGVCardSimpleValue -vCardEntryString]): generates the correct
|
||
entry for the textual representation of the vCard.
|
||
|
||
* SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
|
||
extension.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
|
||
"SOGoContactObject".
|
||
|
||
* SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
|
||
method that generates a textual representation of the vcard.
|
||
|
||
* SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
|
||
"SOGoContactFolder".
|
||
|
||
* SoObjects/Contacts/SOGoContactSource.h,
|
||
SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
|
||
protocols.
|
||
|
||
* SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
|
||
-singleAttributeWithName:key]): new method that returns the first
|
||
object associated with an ldap key (where generally one value is
|
||
returned by key).
|
||
([NGLdapEntry
|
||
-asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
|
||
map the entry into an NSDictionary for processing by
|
||
UIxContactsListViewBase.m with the least possible overhead.
|
||
|
||
* SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
|
||
extension.
|
||
|
||
2006-08-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
|
||
-privateContacts:inContext:]): now returns an instance of
|
||
SOGoContactFolders.
|
||
|
||
* UI/Contacts/UIxContactsListViewContainer.m
|
||
([UIxContactsListViewContainer -contactFolderName]): new method to
|
||
return the absolute path to the current contact folder, called
|
||
from within the template.
|
||
|
||
* UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
|
||
JS code to initialize the 'currentContactFolder' generic var.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
|
||
+contactFolderWithSource:inContainer:andName:]): new class
|
||
method meant to return an instance connected to the specified
|
||
source. Currently useless but won't be anymore in the next few
|
||
days.
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
|
||
the "lookupFreeBusyObject" method since it does not exist.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
|
||
as a "view" for the SOGoContactFolders object. Does nothing but
|
||
redirect the browser to the URL of the personal address book of
|
||
the user. It does not even have a template.
|
||
|
||
* SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
|
||
implementing the SOGoContactSource protocol. Does nothing
|
||
currently but will be used to implement access to the personal
|
||
address book of the user stored in the SOGo database.
|
||
|
||
* SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
|
||
protocol defining an API common to all possible types of contact
|
||
sources.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
|
||
serving as the root of the contact folders available to the
|
||
current user. Correctly lists the contact sources in webdav.
|
||
|
||
2006-08-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
|
||
-composeAction]): new action method that permits external object
|
||
to write a message from the default (primary) account.
|
||
|
||
* UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
|
||
-initSnapshot]): new method with code taken from "defaultAction"
|
||
but needed for others.
|
||
([UIxContactEditorBase -writeAction]): new action designed to
|
||
compose the correct URL needed to obtain the MailerUI's email
|
||
editor with the correct "mailto" parameter.
|
||
|
||
* UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
|
||
Common so that other modules can use it.
|
||
|
||
* UI/Contacts/UIxContactsListViewContainer.m: container to make it
|
||
easier to manage both ajax and non-ajax requests.
|
||
|
||
* UI/Contacts/UIxContactsFilterPanel.m: clone of
|
||
UIxMailFilterPanel, but applicable to contact lists.
|
||
|
||
* SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
|
||
-vcardContentFromSOGoContactRecord]): use the new standard methods
|
||
created for each type of entry. If a line is determined to not
|
||
contain information, it will be skipped.
|
||
|
||
* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
|
||
+initialize]): init defaultMailDomain with the user default
|
||
"SOGoDefaultMailDomain".
|
||
|
||
2006-08-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
|
||
-saveAction]): reorganized methods to only have ONE return point.
|
||
Invoke saveRecord: directly on the clientObject instead of
|
||
saveContentString, which does the same thing anyway.
|
||
|
||
* SoObjects/Contacts/NSDictionary+Contact.m
|
||
([NSDictionary -vcardContentFromSOGoContactRecord]): extension
|
||
method to convert the dictionary returned with the user submission
|
||
to a record in VCARD format to be stored in the database.
|
||
|
||
2006-08-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/MailerUI.js: when opening the context menu
|
||
of the message list, select the message below the mouse cursor and
|
||
deselect the other selected messages temporarily. This mimics the
|
||
behaviour of Thunderbird for that matter and was already
|
||
implemented for the entries of the folder tree.
|
||
|
||
* UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
|
||
-iconForMenuItem]): new method that returns the fully qualified
|
||
relative URL to the icon representing the mailbox, or the default
|
||
mailbox icon if needed.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent
|
||
-urlForResourceFilename:filename]): automatically return an empty
|
||
string whenever the filename passed as argument is nil.
|
||
|
||
* UI/WebServerResources/MailerUI.js: open the mailboxes with the
|
||
"desc" parameter set to 1 so that they are sorted in descending
|
||
order by default. Also, added "onHeaderClick()", triggered by
|
||
clicking on the message list header elements.
|
||
|
||
* UI/MailerUI/UIxMailSortableTableHeader.m
|
||
([UIxMailSortableTableHeader -isSortedDescending]): same as below.
|
||
|
||
* UI/MailerUI/UIxMailListView.m ([UIxMailListView
|
||
-isSortedDescending]): defaults to "YES" when the sort order is
|
||
not specified.
|
||
|
||
2006-07-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/MailerUI.js:
|
||
- message cache: set the max num of cached messages to 20. Limit
|
||
the cached message size to 30000 bytes.
|
||
- ajax: when a message request is called while one is already
|
||
being performed, the latter will be cancelled. Idem when
|
||
retrieving the content of a mailbox.
|
||
- folder tree: when a mailbox is selected because of the URL
|
||
requested (initMailboxSelection), the dtree is expanded throughout
|
||
the mailbox entry's parent hierarchy to ensure it is made visible
|
||
when the page is being displayed. (new function: expandUpperTree).
|
||
- mailbox loading: when loading a mailbox where a message was
|
||
previously selected, we invoke its url with the "pageforuid"
|
||
parameter correctly specified. During callback processing, we scan
|
||
the table for the related row and reselect it.
|
||
Also, the message area is set blank before loading any mailbox.
|
||
|
||
* UI/MailerUI/UIxMailListView.m ([UIxMailListView
|
||
-defaultAction]): if the "pageforuid" parameter is passed in the
|
||
url, take its value and invoke [self firstMessageOfPageFor:]
|
||
consequently to deduce the first message to display. Otherwise,
|
||
set it to "idx", otherwise set it to 0.
|
||
([UIxMailListView -firstMessageOfPageFor:]): new method
|
||
that determines the first message of the page where the message
|
||
passed as parameter is contained.
|
||
|
||
* UI/WebServerResources/UIxMailListView.js: removed this module,
|
||
its code was put in MailerUI.js instead.
|
||
|
||
2006-07-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
|
||
which returns the nodes for the parent specified in "parentMenu".
|
||
Used to generate the javascript code for the folder dtree.
|
||
|
||
* UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
|
||
using that container-template are now using UIxMailMainFrame
|
||
since UIxMailPanelFrame had no real interest. File removed.
|
||
|
||
* UI/WebServerResources/dtree.{css,js}: new files to handle
|
||
javascript-generated mailbox tree. Modified from original version
|
||
by integrating the previous code with the one we are using for
|
||
selections and mailbox handling. Minor visual enhancements too...
|
||
|
||
2006-07-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
|
||
returned, put it in an NSArray before returning it (fixes
|
||
bug#217).
|
||
|
||
2006-07-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
|
||
that returns a url string stripped from its "http://hostname"
|
||
prefix.
|
||
|
||
* UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
|
||
|
||
* UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
|
||
|
||
2006-07-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/WOContext+UIxMailer.m ([WOContext
|
||
-mailDateFormatter]): retrieve the timezone from the user settings
|
||
and pass it to the returned dateFormatter. Also, the dateFormatter
|
||
is kept in a static variable to avoid useless
|
||
creations/destructions.
|
||
|
||
* UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
|
||
-setTimeZone:newTimeZone]): new accessor to specify the timezone.
|
||
|
||
* UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
|
||
([UIxMailFilterPanel -searchCriteria]): new methods, similar to
|
||
s/Criteria/Text/ to handle the "criteria" form parameter.
|
||
|
||
2006-07-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/uix.css: enhanced the toolbar appearance
|
||
to integrate better with the firefox look&feel. Added entries for
|
||
the new "menu" DIV class (popup menus).
|
||
|
||
* UI/WebServerResources/generic.js: added "sanitizeMailTo" which
|
||
takes any chunk of text as param, detects the user email and the
|
||
optional first and last names and return them in a well-formatted
|
||
way. Renamed "getSelection" to "getSelectedNodes" to avoid a
|
||
namespace conflict. Added "onMenuClick(node, event, menuId)" to
|
||
handle popup menus through "onclick" element attributes (node =
|
||
this, event = event and menuId = name of the menu DIV id to
|
||
popup).
|
||
|
||
* UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
|
||
-snapshot]): add an entry for "email" into the snapshot
|
||
dictionary if a "contactEmail" URL parameter was detected and if
|
||
the entry for "email" is empty.
|
||
|
||
* UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
|
||
button now invokes the newContact() js function in ContactsUI.js
|
||
instead of opening "new" directly. newContact() pops up a window
|
||
stripped from its navigation bar.
|
||
|
||
* UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
|
||
bundle (AddressBook).
|
||
|
||
* UI/Templates/MailerUI/UIxMailView.wox: added a div of class
|
||
"menu" and id "addressMenu" have the header email addresses
|
||
display it with the new menu code in generic.js.
|
||
|
||
* UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
|
||
replaced the body tables with a div of class "pageContent"
|
||
(standardization across the page templates).
|
||
|
||
* UI/Templates/MailerUI/UIxMailMainFrame.wox: include
|
||
productJavaScriptURL and pageJavaScriptURL (conditionnally) since
|
||
those are now inherited from UIxPageFrame.
|
||
|
||
* UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
|
||
|
||
* UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
|
||
a "mailto" URL parameter is detected and the "to" array is empty,
|
||
initialize "to" with the value of "mailto" before returning it.
|
||
|
||
* UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
|
||
-composeAction]): rewrote method in a cleaner way and with usage
|
||
of the URL extensions to NSString and NSDictionary (see below).
|
||
Also, if a "mailto" url parameter is detected, pass it to the
|
||
redirected url.
|
||
|
||
* UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
|
||
reduce code.
|
||
|
||
* UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
|
||
returns a parameter string to add to a base URL.
|
||
|
||
* UI/Common/NSString+URL.m ([NSString
|
||
-composeURLWithAction:parameters:andHash:useHash]): new method to
|
||
compose a complete URL from an object URL with parameters and an
|
||
optional '#' character.
|
||
|
||
* UI/Common/UIxPageFrame.h: separated interface from
|
||
UIxPageFrame.m.
|
||
|
||
2006-07-07 Wsourdeau Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
|
||
|
||
* UI/WebServerResources/generic.js: added code to manage
|
||
selections within HTML containers.
|
||
|
||
* UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
|
||
added method to determine the possible URL for a product-specific
|
||
javascript filename of the forme <productname>.js.
|
||
([UIxPageFrame -hasProductSpecificJavaScript]): new method.
|
||
([UIxPageFrame -isPopup]): new method to determine whether the
|
||
application navigator bar should be displayed (main page) or not
|
||
(popup page).
|
||
|
||
* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
|
||
-LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
|
||
the user through LDAP.
|
||
|
||
2006-07-06 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* The toolbar code from the MailerUI product was taken, renamed as
|
||
"UIxToolBar" and put into UI/Common. Toolbar plists were created
|
||
for the Contacts and Scheduler products and put in their respectir
|
||
Toolbars/ subdirectories. Finally,
|
||
UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
|
||
UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
|
||
and an invocation to the UIxToolbar component was put at the top
|
||
of UI/Templaces/UIxPageFrame.wox.
|
||
|
||
* UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
|
||
within the templates whether a separator should be displayed.
|
||
|
||
* UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
|
||
that returns NO if the toolbar is empty.
|
||
|
||
2006-07-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
|
||
|
||
* UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
|
||
new toolbar objects.
|
||
|
||
* UI/Templates/UIxPageFrame.wox: use the exact html code as below.
|
||
|
||
* UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
|
||
linkbanner as a DIV instead of a TABLE.
|
||
|
||
* UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
|
||
showLinkBanner]:
|
||
returns 'YES' to request the display of the navigation bar between
|
||
applets.
|
||
|
||
2006-06-15 ludovic@inverse.ca
|
||
|
||
* It's now possible to set the default
|
||
domain using for email using the
|
||
SOGoDefaultMailDomain preference key.
|
||
|
||
2006-06-15 ludovic@inverse.ca
|
||
|
||
* Initial import of SOGo from trunk.
|