Monotone-Revision: 657b65bbc6a703b12a62acd946bafae499c520b1 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-05-15T03:23:15 Monotone-Branch: ca.inverse.sogo
2720 lines
108 KiB
Plaintext
2720 lines
108 KiB
Plaintext
2007-05-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Mailer/SOGoDraftObject.m ([NSString
|
||
-asQPSubjectString:encoding]): simplified method.
|
||
The headers indicates "utf-8" again thank to our fix in
|
||
sope-mime.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
|
||
being used.
|
||
|
||
2007-05-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Common/UIxObjectActions.m ([UIxObjectActions
|
||
-removeUserFromAclsAction]): implemented this method which was
|
||
missing and is required to remove users from ACLs.
|
||
|
||
* UI/Common/UIxFolderActions.m ([UIxFolderActions
|
||
-subscribeAction]): folderDict was not autoreleased, resulting in
|
||
a leak...
|
||
|
||
* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
|
||
-primaryFetchProfile]): when building with libFoundation, don't
|
||
use the "propertyList" method from NSString. Rather, we convert
|
||
the string to an NSData instance and passit as parameter to
|
||
NSDeserializer. This way, we obtain a mutable dictionary rather
|
||
than an immutable one.
|
||
|
||
* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
|
||
([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
|
||
constant string "contentTypeValue".
|
||
contentTypeValue is now set back to iso-8859-1 since NGMime
|
||
converts extracts the data in that encoding.
|
||
|
||
2007-05-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/LDAPSource.m ([LDAPSource
|
||
-checkLogin:loginToCheckandPassword:passwordToCheck]): if a
|
||
"bindFields" value is present in the user defaults, use the
|
||
specified fields to find the dn of the user to bind.
|
||
([LDAPSource -allEntryIDs])
|
||
([LDAPSource -fetchContactsMatching:match])
|
||
([LDAPSource -lookupContactEntry:entryID])
|
||
([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
|
||
bind and unbind the connection on each request.
|
||
|
||
* UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-contactSearchAction]): simplified method to use the facilities
|
||
provided by the LDAPUserManager. No longer takes care of the
|
||
"ldap-only" url parameter since all requests are handled by the
|
||
usermanager now.
|
||
|
||
* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
|
||
-primaryFetchProfile]): check that the value returned is not null
|
||
before interpreting it.
|
||
|
||
* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
|
||
-contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
|
||
([LDAPUserManager -_fillContactMailRecords:contact]): if the
|
||
system email is already present, remove it before adding it.
|
||
|
||
* SoObjects/SOGo/LDAPSource.m ([LDAPSource
|
||
-checkLogin:loginToCheckandPassword:passwordToCheck]): check that
|
||
loginToCheck is not empty.
|
||
([LDAPSource -fetchContactsMatching:match]): check that match is
|
||
not empty.
|
||
([LDAPSource -lookupContactEntry:entryID]): check that entryID is
|
||
not empty.
|
||
([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
|
||
uid is not empty.
|
||
|
||
2007-05-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
|
||
for "mail" method.
|
||
([SOGoUser -systemEmail]): returns the email formed from the
|
||
username and the default mail domain.
|
||
([SOGoUser -hasEmail:email]): test whether the user has the
|
||
specified email, in a case-insensitive way.
|
||
|
||
* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
|
||
-LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
|
||
check login information.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder
|
||
+contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
|
||
no longer manage LDAP connections. The requests are forwarded to
|
||
the relevant LDAPSource instead.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-appendSystemSources]): pass LDAPSource objects to
|
||
SOGoContactLDAPFolder instances.
|
||
|
||
* SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
|
||
address of the "from" field before sending the message. Otherwise,
|
||
sending the mail won't work.
|
||
|
||
* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
|
||
rewrote this method to request all the available email identities
|
||
for the current user. Also, the from field also contains the full
|
||
name of the user, not just his/her email address.
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
|
||
from the previous module iCalEntityObject+Agenor.
|
||
([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
|
||
([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
|
||
idem.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
|
||
replacing the SOGoContactLDAPEntry module. It was renamed as such
|
||
because it now receives a dictionary instead of an NGLdapEntry.
|
||
It thus can now handle data from any source of LDIF data, not
|
||
only coming from LDAP.
|
||
|
||
* SoObjects/SOGo/LDAPUserManager.[hm]: new class module
|
||
implementing most of what used to be the AgenorUserManager class.
|
||
The difference is that users are cached in the forme of
|
||
dictionaries and many sources are used. Also, it can be used to
|
||
search LDAP contacts.
|
||
|
||
* SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
|
||
the concept of "ldap source", to be used by all the classes
|
||
needing access to LDAP-provided information: addressbooks and the
|
||
user manager. Most the method thereing are transcriptions of
|
||
methods previously found in SOGoContactLDAPFolder. It also contain
|
||
utility methods for user matching and authentification.
|
||
|
||
* SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
|
||
module, rendered useless by code refactoring.
|
||
|
||
* SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
|
||
with the freshly written "LDAPUserManager".
|
||
|
||
2007-05-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
|
||
SOGOContactLDIFEntry.
|
||
|
||
* SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
|
||
module, obsoleted by code in SOGo/LDAPSource.[hm].
|
||
|
||
2007-05-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
|
||
new method with an explicit name.
|
||
|
||
2007-05-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
|
||
replacing "isOrganizer:orOwner:" by taking only one instance of
|
||
SOGoUser as parameter.
|
||
([SOGoCalendarComponent -participant:user]): new method replacing
|
||
the previous "isParticipant" boolean method by returning the first
|
||
participant matching the user passed as parameter. This method is
|
||
used so that both the regular email address and the "system email
|
||
address" of the user are matched against the participants emails.
|
||
|
||
* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
|
||
-getSystemEMailForUID:uid]): new method that returns the email
|
||
formed with the user's uid and the default mail domain.
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -rolesOfUser:login]): removed method that
|
||
was previously commented out.
|
||
|
||
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
|
||
forwared to [AgenorUserManager getSystemEmailForUID:].
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-toolbar]): method replacing the one with the same name in the
|
||
task and appointment editor classes. This method makes also use of
|
||
the new method "isOrganizerOrOwner:" and "participant:" in
|
||
SOGoCalendarComponent.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
|
||
-toolbar]): removed method, replaced with a method with the same
|
||
name in UIxComponentEditor.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
|
||
method, replaced with a method with the same name in
|
||
UIxComponentEditor.
|
||
|
||
* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
|
||
-primaryFetchProfile]): the values returned from the database are
|
||
converted to a put dictionary first, since the dictionary returned
|
||
is actually an immutable one, which can cause a crash afterwards.
|
||
|
||
2007-04-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
|
||
and "SOGoRole_ObjectEditor".
|
||
|
||
* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
|
||
-prepareRightsForm]): this method is no longer mandatory.
|
||
|
||
* UI/Contacts/UIxContactsUserRightsEditor.m
|
||
([UIxContactsUserRightsEditor
|
||
-setUserCanCreateObjects:userCanCreateObjects]): new subclass
|
||
module to handle acls related to the address books. Partial
|
||
implementation.
|
||
|
||
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
|
||
-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
|
||
newly set roles.
|
||
([SOGoFolder
|
||
-removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
|
||
specified roles from cache.
|
||
([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
|
||
put resulting roles in cache.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
|
||
initWithName:inContainer:. Instead, directly initialize the ivars
|
||
as it is supposed to be to avoid an infinite loop whenever one of
|
||
those two methods are overriden.
|
||
|
||
* SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
|
||
removed method.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-aclsForUser:uid]): override method so that SOGo won't crash when
|
||
loading the contact card.
|
||
|
||
2007-04-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -_privacySqlString]): the string for the
|
||
"freebusy" special user should only require opaque elements.
|
||
|
||
2007-04-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -davResourceType]): fixed a problem with
|
||
our double declaration where the resulting XML would be screwed.
|
||
There is only one collection per namespace.
|
||
|
||
* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
|
||
rfc822DateString]): new method that returns a string conform to
|
||
rfc 822 and suitable for email headers.
|
||
|
||
* SoObjects/Mailer/SOGoDraftObject.m: invoke the new
|
||
"rfc822DateString" category method on the date we put in the
|
||
header.
|
||
|
||
2007-04-24 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
|
||
([UIxUserRightsEditor -saveUserRightsAction]): new action methods
|
||
which should never be overriden.
|
||
([UIxUserRightsEditor -appendRight:newRight])
|
||
([UIxUserRightsEditor -removeRight:right])
|
||
([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
|
||
([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
|
||
methods that can be used by the subclasses.
|
||
([UIxUserRightsEditor -prepareRightsForm]): new method that should
|
||
mandatorily be overriden to prepare the elements of the subclassed
|
||
form.
|
||
([UIxUserRightsEditor -updateRights]): new method that should
|
||
mandatorily be overriden to update the user rights from the
|
||
elements of the subclassed form.
|
||
|
||
* UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
|
||
check if the uid is already listed before adding it to our array.
|
||
This is because the acl table can contain more than one record per
|
||
user/object relationship.
|
||
|
||
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
|
||
-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
|
||
"roles" parameter is now an NSArray instead of a string. Therefore
|
||
we loop throughout the array to populate the table. All the
|
||
relevant records are removed prior to the addition of the new
|
||
rights.
|
||
|
||
* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
|
||
-aclsForUser:uid]): new override that returns nil until we add
|
||
support for IMAP acls.
|
||
|
||
* SoObjects/Mailer/SOGoMailAccounts.m
|
||
([SOGoMailAccounts -aclsForUser:uid]): same as below.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-aclsForUser:uid]): override this method which will always return
|
||
nil.
|
||
|
||
* SoObjects/SOGo/SOGoPermissions.[hm]: added
|
||
[Public,Private,Confidential]
|
||
x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
|
||
SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
|
||
..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
|
||
that defines default roles for new elements in the acl.
|
||
|
||
* UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
|
||
module and subclass of UIxUserRightsEditor specific to the
|
||
handling of user rights on calendar folders.
|
||
|
||
2007-04-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -groupDavResourceType]): return both
|
||
"vevent-collection" and "vtodo-collection".
|
||
|
||
* UI/Common/UIxUserRightsEditor.[hm]: new template class module
|
||
that implements the detailed editor of user rights per-object.
|
||
|
||
2007-04-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoUser.m ([SOGoUser
|
||
-rolesForObject:objectinContext:context]): no longer query objects
|
||
for "roleForUser:". Instead, all objects should implement
|
||
"rolesForUser:".
|
||
|
||
* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
|
||
new method to comply with the new acl "protocol" in SOGoObject.
|
||
Uses SOGoFolder's new facilities for ACLS.
|
||
([SOGoContentObject -aclsForUser:uid]): idem.
|
||
([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
|
||
([SOGoContentObject -removeAclsForUsers:users]): idem.
|
||
|
||
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
|
||
-aclsForObjectAtPath:objectPathArray]): new method generic to GCS
|
||
based folders. This method is derived from the code that was in
|
||
UIxAclFolder before its removal.
|
||
([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
|
||
idem.
|
||
([SOGoFolder
|
||
-removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
|
||
([SOGoFolder
|
||
-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
|
||
([SOGoFolder -setRoleForUsers:uidsto:role])
|
||
([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
|
||
that requires overriding by subclasses.
|
||
([SOGoObject -aclsForUser:uid]): idem.
|
||
([SOGoObject -defaultAclRoles]): idem.
|
||
([SOGoObject -setRoles:rolesforUser:uid]): idem.
|
||
([SOGoObject -removeAclsForUsers:users]): idem.
|
||
|
||
* UI/Common/UIxObjectActions.m: new module implementing the web
|
||
actions common to SOGoObject and all its subclasses.
|
||
([UIxObjectActions -addUserInAclsAction]): new method that adds a
|
||
user with the clientObject defaults user rights to the object's
|
||
acl.
|
||
|
||
* UI/Common/UIxAclEditor.m: modified module so as to simplify it
|
||
to the point where it will only list the users (and their name)
|
||
associated with an object acl.
|
||
|
||
* SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
|
||
methods have been moved into SOGoObject and SOGoFolder during a
|
||
refactoring.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-iCalParticipantsAndResourcesStringFromQueryParameters]): removed
|
||
method made useless by the programmatic handling of iCalendar
|
||
objects.
|
||
([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
|
||
([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
|
||
([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
|
||
|
||
* UI/WebServerResources/MailerUI.js (initDnd): enable drag and
|
||
drop on all folder nodes, not just on leaves.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder
|
||
-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
|
||
|
||
2007-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
|
||
debugging facilities when the SOGoDebugObjectAllocation user
|
||
default is set.
|
||
|
||
2007-04-11 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
|
||
method that SOGo will need with non-gnustep Foundation
|
||
implementation.
|
||
([NSString -stringByAppendingPathComponent:component]): new method
|
||
that SOGo will need when building with libFoundation. Method
|
||
removed later since it is available from
|
||
Foundation/NSPathUtilities.h.
|
||
|
||
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
|
||
from SOGoObject.m.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
|
||
every subclass to access [WOApplication context] without having to
|
||
invoke it more than once.
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -changeParticipationStatus:_status]):
|
||
moved method from SOGoTaskObject and SOGoAppointmentObject up to
|
||
their parent class.
|
||
|
||
* UI/Scheduler/UIxCalSelectTab.m: removed module.
|
||
|
||
2007-04-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
|
||
-vCard]): test the prefix of the card in a case-independent way.
|
||
|
||
* OGoContentStore/OCSContactFieldExtractor.m
|
||
([OCSContactFieldExtractor
|
||
-extractQuickFieldsFromContent:content]): we no longer accept
|
||
records in a format other than versit vCard so we can get rid of a
|
||
lot of code.
|
||
|
||
2007-04-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
|
||
-selectorComponentClass]): restored method.
|
||
|
||
2007-04-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
|
||
-shouldDisplayCurrentTask]): the current task is not displayed if
|
||
it is NOT completed or if the "showCompletedTasks" flag is set.
|
||
The logic was inverted in Lightning and is now in SOGo too.
|
||
|
||
2007-04-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
|
||
want the "work" url instead of the "home".
|
||
|
||
* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
|
||
-_saveSnapshot]): save url values from snapshot.
|
||
([UIxContactEditor -initSnapshot]): load url values from snapshot.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-calendarList]): new method replacing "availableCalendars".
|
||
|
||
* UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
|
||
-calendarFolders]): we now take the list of subscribed calendar
|
||
from the container.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
|
||
method derived from and replacing [UIxCalView calendarFolders].
|
||
|
||
2007-03-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
|
||
-toManyRelationshipKeys]): don't put the predefined folders in the
|
||
list if they are returned by the server.
|
||
|
||
* UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
|
||
longer store the "flattenedBlocks" in a dictionary since the
|
||
object will be deleted anyway and we don't need to put the folders
|
||
in cache.
|
||
|
||
* UI/MailPartViewers/UIxMailPartHTMLViewer.m
|
||
([UIxMailPartHTMLViewer -_attachmentIds]): take the current
|
||
attachment path into account when computing the part urls.
|
||
|
||
2007-03-29 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactsListViewContainer.m
|
||
([UIxContactsListViewContainer -additionalFolders]): take the list
|
||
of subscribed folders from the new property list used for the user
|
||
settings. The value of its key is SubscribedFolders for the
|
||
dictionary entry named "Contacts".
|
||
|
||
* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
|
||
-canAccessContentAction]): new method to override the one from
|
||
UIxFoldersActions by taking into account the fact that, this time,
|
||
the clientObject is an ldap folder. Removed many method that used
|
||
to be related to the handling of the user selector.
|
||
|
||
* UI/Scheduler/UIxCalDayView.m: commented out many unused methods
|
||
to make sure they can be removed.
|
||
|
||
* UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
|
||
populate the calendar entries based on the user settings plist.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-selectForMailerAction]): restored method.
|
||
|
||
* UI/Scheduler/UIxCalendarSelector.m: new template module derived
|
||
from a simplified version of the old UIxContactEditor (removed).
|
||
|
||
* UI/Contacts/UIxContactsUserFolders.m: new template module for
|
||
selecting users or user folders through an LDAP search of which
|
||
the results are displayed as a tree.
|
||
|
||
* UI/WebServerResources/UIxMailEditor.js: moved previous generic
|
||
method "onContactAdd" here since the Mailer is now the only module
|
||
to use it when composing emails.
|
||
|
||
* UI/WebServerResources/generic.js: added code for handling the
|
||
new scheme used for describing SOGo folders, common code to handle
|
||
folder addition or removal.
|
||
|
||
* UI/Common/UIxFolderActions.m ([UIxFolderActions
|
||
-activateFolderAction]): new method that change the "active"
|
||
settings in the folder-related fields in the user settings.
|
||
([UIxFolderActions -deactivateFolderAction]): see above.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-checkRightsAction]): removed method.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-updateAdditionalAddressBooksAction]): removed method.
|
||
|
||
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
|
||
-updateCalendarsAction]): removed method.
|
||
|
||
2007-03-28 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
|
||
-checkRightsAction]): removed method.
|
||
|
||
* UI/Common/UIxFolderActions.m ([UIxFolderActions
|
||
-canAccessContentAction]): new method designed to replace
|
||
[UIxCalMainView checkRightsAction] in a more universal way.
|
||
|
||
2007-03-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-roleOfUser:uidinContext:context]): take all the subkeys into
|
||
account, not only the "personal" folder.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
|
||
to the new components.
|
||
|
||
* SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
|
||
(see below).
|
||
|
||
* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
|
||
-getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
|
||
field of the sogo_user_profile table, where the user-customizable
|
||
changes will be saved.
|
||
([AgenorUserManager -getUserSettingsForUID:uid]): new method
|
||
similar to the one above, using the "settings" field where the
|
||
automatic settings will be saved.
|
||
|
||
* SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
|
||
module to bind the userdefaults to a property list contained in a
|
||
specified field of the sogo_user_profile table.
|
||
([AgenorUserDefaults
|
||
-initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
|
||
added a "fieldName" parameter.
|
||
|
||
* UI/Common/UIxFolderActions.m: new module implementing web
|
||
actions common to all GCS-based folders.
|
||
|
||
2007-03-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
|
||
put a carriage return after the day name.
|
||
|
||
* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
|
||
-readFreeBusyAction]): restored method.
|
||
|
||
2007-03-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
|
||
-defaultAction]): remade module to redirect automatically to the
|
||
Calendar url.
|
||
|
||
* SoObjects/Contacts/NSDictionary+Contact.m: removed module.
|
||
|
||
2007-03-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
|
||
-deleteAction]): new web method to delete personal addressbook
|
||
folders.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
|
||
-delete]): override method to refuse the deletion of the folder if
|
||
its nameInContainer is "personal".
|
||
|
||
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
|
||
that forwards the deletion request to the folder manager.
|
||
|
||
2007-03-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
|
||
-zoomList]): new method that returns the list of available zoom factors.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
|
||
-changeStatusAction]): rewrote method.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-_handleAttendeesEdition]): make sure "attendeesNames" has a
|
||
length > 0 before computing the attendees. Otherwise there will be
|
||
an invalid empty entry.
|
||
([UIxComponentEditor -_handleOrganizer]): new method that adds the
|
||
organizer when there are attendees and remove it when the
|
||
attendees are removed.
|
||
|
||
2007-03-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxAttendeesEditor.m): new component.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
|
||
the task and appointment editors. Now a container component
|
||
handling the common elements of tasks and events.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.m: same as below.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
|
||
a subclass of UIxComponentEditor but a subcomponent of it.
|
||
|
||
* UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
|
||
toolbar can have the special value "none" to indicate there is
|
||
none attached to the window.
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
|
||
method.
|
||
([SOGoCalendarComponent -isParticipant:email]): new method.
|
||
([SOGoCalendarComponent -calendar:create]): takes one parameter
|
||
"create" which is a boolean indicating whether we want to create
|
||
the calendar if it does not exist.
|
||
|
||
2007-03-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
|
||
of a table, the same way the dayly and weekly views have been for
|
||
a few months now.
|
||
|
||
2007-02-09 Helge Hess <helge.hess@opengroupware.org>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
|
||
resourcetype
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
|
||
property to point at the user folder
|
||
|
||
2007-03-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
|
||
-userInContext:]): returns "SOGoUser".
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -contentAsString]): overriden method that
|
||
takes the privacy into account and discard the relevant fields if
|
||
needed by generating a new content string and caching it.
|
||
([SOGoCalendarComponent
|
||
-saveContentString:contentStringbaseVersion:baseVersion]): if the
|
||
new method above has cached a content string, release it and set
|
||
it to nil so that it will have to be regenerated in the case it is
|
||
requested further.
|
||
([SOGoCalendarComponent -_filterPrivateComponent:component]):
|
||
discard the fields that have to be hidden when the card is
|
||
private.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
|
||
sure the cards are now handled as instances of
|
||
SOGoCalendarComponent instead of SOGoContentObject so that their
|
||
content string is taking the privacy classifiction into account.
|
||
([SOGoAppointmentFolder -_privacySqlString]): new method that
|
||
generates a query to determine what information can be given and
|
||
if the card itself has to be shown.
|
||
|
||
* UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
|
||
-getICalPersonsFromValue:selectorValue]): removed useless
|
||
"isAccessRestricted" method.
|
||
|
||
* UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
|
||
-setStyle:_style]): test whether the values of orgmail and
|
||
partmails are null before manipulating them, otherwise SOGo sends
|
||
a "rangeOfString:" message to an NSNull, which makes it crashes.
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
|
||
-extractQuickFieldsFromEvent:_event]): we now use the new
|
||
"symbolicAccessClass" method from iCalEntity to determine the
|
||
value of the "classifiction" field.
|
||
([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
|
||
as above.
|
||
|
||
2007-03-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
|
||
see below, the query is adapted consequently.
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
|
||
-extractQuickFieldsFromTodo:_task]): the field "ispublic" was
|
||
renamed to "classification" and can any integer as value.
|
||
([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
|
||
idem.
|
||
|
||
2007-02-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailPartViewers/UIxMailPartHTMLViewer.m
|
||
([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
|
||
don't prepend anything to the class and id named. Instead, we
|
||
make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
|
||
class.
|
||
|
||
2007-02-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
|
||
-rolesOfUser:logininContext:context]): if object does not exists
|
||
(for example when it's being created), the current user has the
|
||
same rights on it than he/she has on its parent container.
|
||
|
||
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
|
||
-nameExistsInFolder:objectName]): methods that tests if a c_name
|
||
corresponding to the name passed as parameter is present in the db
|
||
folder.
|
||
|
||
2007-02-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoUser.m ([SOGoUser
|
||
-rolesForObject:objectinContext:context]): test for
|
||
"rolesOfUser:inContext:" in addition to "roleOfUser:...".
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
|
||
returns the roles of the user on the container object if the event
|
||
is uncreated.
|
||
|
||
2007-02-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailPartViewers/UIxMailRenderingContext.m: returns the
|
||
alternativeViewer a multipart/related message is being handled.
|
||
|
||
* UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
|
||
from scratch.
|
||
|
||
* UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
|
||
text/html component before text/plain.
|
||
|
||
* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
|
||
-addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
|
||
fetching of HTML parts.
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -componentTag]): new template method that
|
||
returns the vcalendar tag of the current object.
|
||
([SOGoCalendarComponent -component]): new method that returns the
|
||
first object matching [self componentTag] within the current
|
||
calendar object. This method replaces 'firstEventInCalendar:' as
|
||
well as "firstTaskInCalendar:".
|
||
([SOGoCalendarComponent -roleOfUser:logininContext:context]):
|
||
moved method from SOGoAppointmentObject.m.
|
||
|
||
2007-02-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
|
||
module which shows each selected user's calendar in a different
|
||
column instead of mixing their events together.
|
||
|
||
* UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
|
||
replaced use of [NSString stringByTrimmingWhiteSpaces] with
|
||
[NSString stringByTrimmingSpaces].
|
||
|
||
* UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
|
||
"cnWithoutQuotes" instead of "cnForDisplay", which no longer
|
||
exists.
|
||
|
||
* UI/Scheduler/UIxCalDayOverview.m,
|
||
UI/Scheduler/UIxCalDayChartview.m,
|
||
UI/Scheduler/UIxCalDayListview.m,
|
||
UI/Scheduler/UIxCalWeekOverview.m,
|
||
UI/Scheduler/UIxCalWeekChartview.m,
|
||
UI/Scheduler/UIxCalWeekListview.m,
|
||
UI/Scheduler/UIxCalInlineMonthOverview.m,
|
||
UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
|
||
|
||
2007-02-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-appendPersonalSourcesInContext:context]): release connectoin
|
||
channel when everything is done.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-newAbAction]): new action method to crate a new contact folder
|
||
from the web UI.
|
||
|
||
* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
|
||
that requests the folder manager to create a folder table with the
|
||
specified type at the specified path. The type is taken from [self
|
||
folderType].
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
|
||
-folderType]): implemented.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -folderType]): implemented.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-appendPersonalSourcesInContext:context]): we now fetch all
|
||
folders with type "Contact" that belong to the current user.
|
||
([SOGoContactFolders -newFolderWithName:name]): new method to
|
||
create a new contact folder.
|
||
|
||
* UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
|
||
resulting url with [NSString+Utilities hostlessURL] instead of
|
||
using NSURL. This is because the url in question sometimes has a
|
||
hostname and sometimes not. "hostlessURL" ensure the hostname is
|
||
removed anyway.
|
||
([UIxComponent -applicationPath]): same as above.
|
||
|
||
2007-02-08 Ludovic Marcotte <ludovic@inverse.ca>
|
||
|
||
* SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
|
||
folders before doing the one on messages.
|
||
|
||
2007-02-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
|
||
makeObjectsPerform:withObject:withObject: for GNUstep
|
||
compatibility.
|
||
|
||
* OGoContentStore/GNUmakefile, Protocols/common.make,
|
||
SoObjects/common.make, UI/common.make: install in
|
||
GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
|
||
|
||
2007-02-07 Ludovic Marcotte <ludovic@inverse.ca>
|
||
|
||
* UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
|
||
"Agendas"
|
||
|
||
2007-02-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/UIxMailTree.m ([UIxMailTree
|
||
-getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
|
||
for the moment.
|
||
|
||
* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
|
||
-checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
|
||
password would be accepted anyway as long as its length was > 0.
|
||
This can be the case ONLY when LDAP is disabled otherwise we have
|
||
a serious security issue...
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m
|
||
([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
|
||
user is not an organizer nor a participant, he is declared as
|
||
"Owner" if he owns the calendar the entry where the entry is
|
||
contained. Other cases should not be possible.
|
||
|
||
2007-02-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Contacts/UIxContactEditor.m: display and handle the new
|
||
Freebusy URL entry.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
|
||
from the server.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
|
||
entry.
|
||
|
||
2007-01-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.m
|
||
([SOGoCalendarComponent -sendEMailNotifications]): new method that
|
||
returns the value of ud "SOGoAppointmentSendEMailNotifications"
|
||
(iMIP/iTIP).
|
||
([SOGoCalendarComponent
|
||
-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
|
||
|
||
2007-01-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/UIxMailListView.m ([UIxMailListView
|
||
-defaultAction]): invoke "flushMailCaches" on [self clientObject]
|
||
so that the mailbox cache is refreshed everytime the user presses
|
||
on "get mail". I doubt a mailbox cache really is useful in general
|
||
anyway.
|
||
|
||
2007-01-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
|
||
-userInContext:]): if the lookup is on "freebusy.ifb" and the
|
||
username is "anonymous" the user is automatically set to
|
||
"freebusy".
|
||
|
||
2007-01-12 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
|
||
-checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
|
||
user with password "freebusy".
|
||
|
||
* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
|
||
-contentAsString]): the default timerange is now 14 days before
|
||
currentday and 1 month after.
|
||
|
||
2007-01-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
|
||
escape the record string in a way suitable with XML encoding.
|
||
|
||
2007-01-05 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: fixed a bug where the
|
||
calendar view would not be updated properly.
|
||
|
||
2007-01-04 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-newStartDate]): fix the handling of the component start date
|
||
depending on the "hm" and the "day" parameters.
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
|
||
-roleOfUser:uidinContext:context]): set role of current user to
|
||
"Assistant" if the object that is accessed is "freebusy.ifb".
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
|
||
moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
|
||
([SOGoAppointmentFolder
|
||
-lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
|
||
lookupCalendarFolderForUID: method, which doesn't do security
|
||
checks.
|
||
|
||
2007-01-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
|
||
accessor that returns the comma-separated list of users with role
|
||
"Assistant".
|
||
([UIxAclEditor -delegatesValue]): same as above for "Delegate".
|
||
([UIxAclEditor -_prepareUsers]): there is no longer a concept of
|
||
"checkedUsers". Instead, each user is either classified in the
|
||
list of assistants or the list of delegates.
|
||
|
||
2006-12-22 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
|
||
-composeAction]): method imported from removed container modules.
|
||
([UIxMailMainFrame -mailFolderName]): method imported from removed
|
||
container modules.
|
||
|
||
* UI/MailerUI/UIxMailPopupView.m: a new special popup component
|
||
for wrapping UIxMailView with the "popupview" action.
|
||
|
||
* UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
|
||
since its the component that displays the same splash screen than
|
||
the one in Thunderbird/Icedove.
|
||
|
||
* UI/MailerUI/UIxMailAccountViewContainer.[hm],
|
||
UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
|
||
UI/MailerUI/UIxMailListViewContainer.[hm],
|
||
UI/MailerUI/UIxMailViewContainer.[hm]: removed
|
||
|
||
2006-12-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/HTMLElement.js: replaced the functional
|
||
selectNode() and deselectNode() functions with select() and
|
||
deselect() methods of HTMLElement.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: cleanup, most of the
|
||
events are initialized from here now instead of in the HTML code.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-checkRightsAction]): new method similar to the one with the same
|
||
name in UIxCalMainView.m.
|
||
|
||
* UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
|
||
code to handle the publishing of freebusy information.
|
||
|
||
2006-12-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
|
||
-checkRightsAction]): new action method that returns a
|
||
comma-separated list of boolean values matching the right of the
|
||
current user to "view" (as a permission) each foreign calendar
|
||
stored in his preferences.
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
|
||
new method that sets a customOwner, which can be returned with
|
||
ownerInContext it set.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
|
||
|
||
2006-12-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
|
||
below, but for the Contacts and Calendar collections.
|
||
|
||
* SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
|
||
new acl facilities method from sope-gdl/GCSFolder.m.
|
||
|
||
* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
|
||
-roleOfUser:uidinContext:context]): new method that returns
|
||
SOGoRole_Assistant when the user is an assistant or a delegate on
|
||
the "personal" ab object. This is so that setting roles on the
|
||
SOGoContactFolders object is not required.
|
||
|
||
2006-12-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* Main/SOGo.m: declare "Freebusy" permissions for the top objects.
|
||
|
||
* UI/Contacts/UIxContactsAclsSelection.m: new component specific
|
||
to the handling of the user selection for the acls.
|
||
|
||
* SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
|
||
values from SoPermissions with ones specific to SOGo.
|
||
|
||
* SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
|
||
handles the storage for the acls.
|
||
|
||
* SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
|
||
class for SOGoAppointmentObject and SOGoTaskObject.
|
||
|
||
* UI/Common/UIxAclEditor.[hm]: new component that provides a
|
||
general editor for folder acls.
|
||
|
||
* SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
|
||
renamed.
|
||
([NSString -davMethodToObjC]): method that returns the method name
|
||
for a DAV property implementation.
|
||
|
||
* SoObjects/SOGo/NSArray+Utilities.m: new extension module to
|
||
NSArray.
|
||
([NSArray -stringsWithFormat:format]): new method that returns
|
||
formatted occurences of the strings stored in the array.
|
||
|
||
* SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
|
||
+davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
|
||
subclass module of SoWebDAVValue that supports collections of
|
||
properties of the same type.
|
||
|
||
2006-11-21 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
|
||
-lookupFolder:ofClassNamed:inContext:]): added the ability to
|
||
configure the name of the SOGoDraftFolders with the ud var
|
||
"SOGoDraftsFolderName".
|
||
|
||
2006-11-17 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/SOGo/SOGoObject.m ([SOGoObject
|
||
-userTimeZone:username]): new method that returns the timezone for
|
||
the specified user depending on his preferences and the server
|
||
defaults
|
||
|
||
* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
|
||
-stringForData:partInfo:]): take the encoding into account and
|
||
translate the text to "normal" before processing the charset data.
|
||
|
||
2006-11-15 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/generic.js: the progress indicator is on
|
||
when loading the page so we turn it off, and we turn it back on
|
||
whenever we switch to another module...
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: make sure the day view
|
||
synchronization mechanism works everywhere.
|
||
|
||
* UI/WebServerResources/generic.js: the log window is not only
|
||
visible when UIxDebugEnabled is set.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: the month overview's day
|
||
cells are now initialized with the DOM event interface methods
|
||
instead of with html attributes.
|
||
|
||
* UI/Templates/MailerUI/UIxMailView.wox: don't display useless
|
||
headers (should be made configurable at some point)...
|
||
|
||
* OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
|
||
"not null" constraint on startdate, enddate, isopaque,
|
||
participants and partmails.
|
||
|
||
2006-11-14 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
|
||
-hoursToDisplay]): prevent a crash by retaining the
|
||
"hoursToDisplay" array after it's created.
|
||
([UIxCalDayTable -clickableHourCellClass]): new method for the new
|
||
clickable hours DIV.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: made the event
|
||
participation status modification asynchronous, which also fixes a
|
||
bug where the window would sometimes close before the accept or
|
||
decline action was completed. Also, adapted the event handling
|
||
related to the days or weeks view with the new DIV-based layout.
|
||
|
||
* UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
|
||
|
||
* UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
|
||
DIV-based presentation of the days and weeks.
|
||
|
||
* SoObjects/Appointments/SOGoTaskObject.m: same as below...
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
|
||
might return an exception so we have to handle it if we don't
|
||
wanna crash...
|
||
|
||
2006-11-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: updated the list
|
||
initialization code to use the new event management scheme, adding
|
||
what was missing to be able to delete events and tasks again.
|
||
|
||
* UI/WebServerResources/MailerUI.js: added code to activate the
|
||
"Get mails" button. Fixed a bug which prevented messages to be
|
||
deleted.
|
||
|
||
* UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
|
||
navigation and focus handling of INPUTs.
|
||
|
||
2006-11-10 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/MailerUI.js: added code to handle the
|
||
possible drag and drop events to manager in the mail module.
|
||
Moving messages, opening parent folders, ...
|
||
|
||
* UI/WebServerResources/SOGoDragAndDrop.js: new file containing
|
||
the drag and drop manager as well as the interface to HTMLElement
|
||
to trigger drag and drop events.
|
||
|
||
* UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
|
||
action to move the current message to the mailbox named after the
|
||
value of parameter "tofolder".
|
||
|
||
* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
|
||
-moveToFolderNamed:folderNameinContext:]): new method base on
|
||
-trashInContext:.
|
||
|
||
2006-11-09 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/generic.js: added and activated many
|
||
"load" handlers to configure generic widgets used across the
|
||
modules. More events are now handled in a DOM-fashion way instead
|
||
of by setting the relative attributes in the templates.
|
||
|
||
* UI/Templates/UIxSortableTableHeader.wox: all the events are
|
||
declared from the javascript DOM onload handlers.
|
||
|
||
* UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
|
||
library.
|
||
|
||
* UI/Templates/MailerUI/UIxMailListView.wox: all the events are
|
||
declared from the javascript DOM onload handlers.
|
||
|
||
* UI/MailerUI/UIxMailListView.m: removed all the JS methods since
|
||
we want everything to be separated from each other, as much as
|
||
possible.
|
||
|
||
* UI/WebServerResources/SOGoDragHandles.js: new module containing
|
||
the "SOGoDragHandlesInterface", implementing methods that can be
|
||
attributed to DIV so that they can be used as drag handles.
|
||
|
||
* SoObjects/Mailer/SOGoDraftObject.m ([NSString
|
||
-asQPSubjectString]): initialize the tmp strings with '0' to make
|
||
sure they don't contain garbage.
|
||
|
||
2006-11-08 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/MailerUI.js: register the messageList
|
||
table as a dragging source and the leaf of the navigation tree as
|
||
dnd destinations to the DNDManager.
|
||
|
||
* UI/WebServerResources/generic.js: initialize tabs from the
|
||
"unload" event listener that is added programmatically instead of
|
||
from the template... Also, added the new DNDManager object.
|
||
|
||
* UI/WebServerResources/HTMLTableElement.js: added code to
|
||
simulate XUL drag n drop events. This code will possibly be moved
|
||
to HTMLElement.js instead later...
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
|
||
below.
|
||
|
||
* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
|
||
-_qualifierForFilter:filter]): only search records which starts
|
||
with the specified pattern.
|
||
|
||
2006-11-07 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Mailer/SOGoDraftObject.m ([NSString
|
||
-asQPSubjectString]): new method that returns the special QP
|
||
string with its qp declaration for email subjects.
|
||
([SOGoDraftObject -bodyPartForText])
|
||
([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
|
||
double-encode data in UTF-8.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-newStartDate]): new method to determine the start date depending
|
||
on the URL parameters, the current day and the current time.
|
||
([UIxComponentEditor -toolbar]): new method to determine the
|
||
filename of the toolbar that should be drawn depending on the
|
||
ownership and the list of attendees of the task/event wrt to the
|
||
current user...
|
||
|
||
* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
|
||
-setDayStartHour:aStartHour]): adjust the minutes to the next
|
||
quarter of hour, if not already set to a quarter.
|
||
|
||
* UI/WebServerResources/UIxAppointmentEditor.js,
|
||
UI/WebServerResources/UIxTaskEditor.js: added code to manage start
|
||
date change.
|
||
|
||
2006-11-03 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-loadValuesFromComponent:component]): handles access class
|
||
(privacy) and status.
|
||
|
||
* UI/Contacts/UIxContactsListViewContainer.m
|
||
([UIxContactsListViewContainer -additionalFolders]): return nil if
|
||
[self additionalAddressBooks] returns an empty string.
|
||
|
||
2006-11-02 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
|
||
rangesOf7Days]): enhanced and debugged algorithm to feed the array
|
||
with slices where the first day is still in the requested month.
|
||
|
||
* UI/Templates/UIxPageFrame.wox: the logConsole is created only on
|
||
non-popup pages.
|
||
|
||
* UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
|
||
of events in the day boxes of the calendar's monthly view.
|
||
|
||
* SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
|
||
-davContentType]): declare "text/calendar".
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m
|
||
([SOGoAppointmentObject -davContentType]): declare
|
||
"text/calendar".
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
|
||
HTTP methods are handled by SOPE and requires nil to be returned,
|
||
this method now invokes the new
|
||
"requestNamedIsHandledLater:inContext:" method to check that.
|
||
([SOGoAppointmentFolder
|
||
-requestNamedIsHandledLater:nameinContext:context]): new methods
|
||
that returns "YES" only for the "OPTIONS" http method (for now...).
|
||
([SOGoAppointmentFolder -davComplianceClassesInContext:]):
|
||
overloaded method to append the "access-control" and
|
||
"calendar-access" DAV abilities to the initial declaration.
|
||
|
||
* UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
|
||
imitate the look of Sunbird/Lightning's monthly view.
|
||
|
||
* UI/Scheduler/UIxCalMonthView.[hm]: renamed to
|
||
UIxCalMonthViewOld.[hm].
|
||
|
||
2006-11-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxFreeBusyUserSelectorTable.m
|
||
([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
|
||
method.
|
||
([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
|
||
returns an image name based on the participation status of the
|
||
current attendee.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: same strip down as for
|
||
generic.js below.
|
||
|
||
* UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
|
||
([UIxContactsListViewContainer -additionalFolders])
|
||
([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
|
||
([UIxContactsListViewContainer -currentAdditionalFolder]): new
|
||
methods to handle the external addressbooks a user has subscribed
|
||
too, by retriving them from his preferences.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-updateAdditionalAddressBooksAction]): new method that updates the
|
||
user settings with the list of addressbook he has subscribed to.
|
||
|
||
* UI/Contacts/UIxContactsAddressBooksSelection.m: new component
|
||
module for the address book selector.
|
||
|
||
* UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
|
||
a toolbar with two buttons ("add" and "remove") to manage the
|
||
additional addressbooks a user might subscribe to.
|
||
|
||
* UI/WebServerResources/ContactsUI.js: added code to handle
|
||
"external addressbooks" from the Javascript point-of-view, by
|
||
extending existing methods and adding code for the "add ab" and
|
||
"remove ab" buttons.
|
||
|
||
* UI/WebServerResources/generic.js: moved extensions methods to
|
||
DOM elements to separate files for better clarity.
|
||
|
||
* UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
|
||
new method that returns "pageContent" as class, but also "popup"
|
||
for the DIV where the page content lies, so that we can manipulate
|
||
the content of popup's with CSS identifiers.
|
||
|
||
2006-10-31 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
|
||
-displayStyle]): new method that returns a string containing the
|
||
css style relative to the current appointment cell. This code is
|
||
currently inactive but might be reused later.
|
||
|
||
* UI/WebServerResources/SchedulerUI.js: added code to handle the
|
||
display of the selected day (the day pointed by the mouse, or the
|
||
current day when changing the view).
|
||
|
||
* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
|
||
-dayCellClasses]): new method that returns a string containing the
|
||
css classes applicable to the current cell, depending on the
|
||
position of the day in the week, the day of today and the
|
||
requested day.
|
||
|
||
* UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
|
||
-currentContactAptBorder]): new method that returns the
|
||
appropriate border color for the specified user.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentObject.m
|
||
([SOGoAppointmentObject
|
||
-saveContentString:contentStringbaseVersion:baseVersion]):
|
||
overloaded method that parse new events and detects if they have
|
||
an organizer or not. If they are new and have no organizer set
|
||
(Sunbird/Lightning...), the owner of the event is set as
|
||
organizer.
|
||
|
||
* SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
|
||
category that provides facility methods and interfaces to the
|
||
AgenorUserManager.
|
||
|
||
* SoObjects/Contacts/product.plist: give full access to ANY
|
||
authenticated user, not just the owner (to every objects...).
|
||
|
||
2006-10-30 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
|
||
every replica widgets are declared as such to their master
|
||
counterpart. Take the days into account when displaying the time
|
||
range taken by the appointment.
|
||
|
||
* UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
|
||
-getICalPersonsFromValue:selectorValue]): method taken from
|
||
UIxFreeBusyUserSelector, that is shared both by
|
||
UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-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.
|
||
|
||
* UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
|
||
derived and taken as a subset of UIxFreeBusyUserSelector that
|
||
implements the table part of the FreeBusy view. Most of the
|
||
methods of UIxFreeBusyUserSelector relative to that table were
|
||
moved into UIxFreeBusyUserSelectorTable, which can also be used as
|
||
a standalone view for AJAX operations.
|
||
|
||
2006-10-27 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-vCard]): change reverted.
|
||
|
||
* UI/Contacts/UIxContactEditor.m: check whether the client contact
|
||
folder has selector "globallyUniqueObjectId" before calling that
|
||
method.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-vCard]): the "setVClass" NGVCard method really is "setClass"
|
||
instead.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
|
||
request the "streetAddress" instead of the "streetaddress".
|
||
([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
|
||
mails that *contain*, and not just *start with* the search
|
||
pattern.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
|
||
-vCard]): mark address returned from LDAP as the work address.
|
||
|
||
* UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
|
||
span covered with the anchor, not only the textual information
|
||
within.
|
||
|
||
* UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
|
||
argument (event or task) to newEvent in the appointmentListMenu.
|
||
Make the appointmentsListView display the appointmentsListMenu.
|
||
|
||
* UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
|
||
12 to 50 before displaying "...".
|
||
([SOGoAptFormatter -fullDetailsForApt::]): display location only
|
||
if its length > 0, whether location itself is nil or not...
|
||
([SOGoAptFormatter -tooltipForApt::_refDate]): display information
|
||
of which the length > 0.
|
||
|
||
2006-10-26 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
|
||
french and ISO dates.
|
||
|
||
* UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
|
||
from UIxContactSelector to handle contact lists (current and
|
||
additional contacts).
|
||
|
||
* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
|
||
-_freeBusyAsText]): added handling of an "additional"-named query
|
||
parameter that describe the number of additional days after
|
||
enddate that should be returned.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-_responseForResults:results]): give priority to results with
|
||
"c_uid" fields. If none returned, use the first contact received.
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
|
||
-extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
|
||
2 and "CANCELLED" to 0.
|
||
|
||
2006-10-25 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
|
||
of start and end dates to short string dates.
|
||
|
||
* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
|
||
-readFreeBusyAction]): new method that returns an array of numbers
|
||
corresponding to the state in the freebusy of each "quarter of an
|
||
hour" between the "sday" and "eday" date parameters passed in the
|
||
url. This permits to handle the display of the freebusy with Ajax
|
||
mechanisms.
|
||
([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
|
||
since the free busy displays 2 days ahead.
|
||
|
||
* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
|
||
-contactSearchAction]): new action that returns the uid and the
|
||
username + email of the user whose name contain the value of the
|
||
"search" url parameter.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
|
||
useful for the computing of the status of the freebusy.
|
||
|
||
* UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
|
||
-init]): new component that incarnates a user selector for events
|
||
inspired by the new one found in Thunderbird Lightning.
|
||
|
||
2006-10-23 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/generic.js: added code to enable or
|
||
disable anchor visually (following our internal algorithm).
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
|
||
added new "url" ivar with its classic accessors.
|
||
([UIxComponentEditor -urlButtonClasses]): new method that returns
|
||
the class strings for the url button on the appointment/task
|
||
editor (depending on the validity of the url).
|
||
|
||
* UI/Templates/SchedulerUI/UIxTaskEditor.wox,
|
||
UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
|
||
the template to match the Lightning's new task/appointment editor.
|
||
|
||
* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
|
||
|
||
2006-10-20 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder
|
||
-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
|
||
|
||
* SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
|
||
iCalEntityObject instances instead of just iCalEvent's.
|
||
|
||
* SoObjects/Appointments/SOGoAppointmentFolder.m
|
||
([SOGoAppointmentFolder
|
||
-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
|
||
|
||
* SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
|
||
bad way of handling ownership that way.
|
||
|
||
* SoObjects/Contacts/SOGoContactLDAPFolder.m
|
||
([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
|
||
on "cn", just like Mozilla.
|
||
|
||
2006-10-19 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
|
||
"to" should be retained, otherwise it will be autoreleased and a
|
||
crash will occur.
|
||
|
||
* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
|
||
-writeAction]): updated method to fetch the card before initing
|
||
the snapshot.
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
|
||
-extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
|
||
of NSNotFound.
|
||
|
||
* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
|
||
-iCalStringTemplate]): start and due date are now optional.
|
||
|
||
* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
|
||
-setDayStartHour:aStartHour]): added a new "isDisabled" ivar with
|
||
appropriate accessors to be settable through the templates.
|
||
|
||
* UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
|
||
new "isDisabled" ivar with appropriate accessors to be
|
||
settable through the templates.
|
||
|
||
* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
|
||
-availableCalendars]): new method that list the calendars to which
|
||
the user has subscribed.
|
||
([UIxComponentEditor -componentOwner]): returns the owner of the
|
||
editted object.
|
||
|
||
* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
|
||
-extractQuickFieldsFromTodo:_task]): set the start and enddate of
|
||
quickentries to null whenever each or all of them are null, by
|
||
providing an impossible timestamp from with NSNotFound as value.
|
||
|
||
2006-10-18 Wolfgang Sourdeau <wsourdeau@inverse.ca>
|
||
|
||
* UI/WebServerResources/UIxMailEditor.js: update the algorithm
|
||
that handles the creation of new fields with the new APIs and the
|
||
new node structure on the page.
|
||
|
||
* 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.
|