12012-09-16  Francis Lachapelle  <flachapelle@inverse.ca>
2
3	* UI/WebServerResources/dtree.js (s): when selecting a node,
4	also select the parent so the entire row is highlighted.
5
62012-09-13 Ludovic Marcotte  <lmarcotte@inverse.ca>
7
8	* Fixed bug #1942. We now set the app name to "SOGo"
9	for the Samba/OpenChange application so wox are properly
10	found by SOPE.
11
122012-09-12  Ludovic Marcotte  <lmarcotte@inverse.ca>
13
14	* OpenChange/MAPIStoreTasksMessage.m: added a way to get
15	the PidTagBody of a task. This could be generalized eventually
16	with the code in MAPIStoreAppointmentWrapper.
17	* OpenChange/MAPIStoreMessage.m (-saveMessage): added a safety
18	check to avoid a crash when first accepting invitations on
19	a newly created profile.
20
212012-09-07  Francis Lachapelle  <flachapelle@inverse.ca>
22
23	* UI/WebServerResources/SchedulerUI.js (tasksListCallback): list
24	the tasks in a table, along the events table.
25	(saveTabState): save which of the events or the tasks tab is
26	selected.
27
28	* UI/WebServerResources/SOGoTabsController.js
29	(attachToTabsContainer): select and show the active tab if it's
30	defined.
31
32	* UI/WebServerResources/HTMLTableElement.js (getSelectedRows):
33	accept calling this method from a "tbody".
34
35	* UI/Scheduler/UIxCalMainView.m (-saveSelectedListAction): new
36	method to save the name of the selected tab (events or tasks).
37	(-eventsTabClass): return "active" if the selected tab was "events".
38	(-tasksTabClass): idem for "tasks".
39
40	* UI/Scheduler/UIxCalListingActions.m (-tasksListAction): added
41	more quick fields, including the calendar name, location, category
42	and a formatted version of the due date.
43
442012-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
45
46	* OpenChange/MAPIStoreContext.m (CompleteURLFromMapistoreURI):
47	mapistore uris are already escaped.
48	(-getRootFolder:withFID:): all urls are now escaped, both in NSURL
49	and in NSString forms, whether they are used to return a mapitore
50	root uri or a indexing record.
51
52	* OpenChange/NSString+MAPIStore.m
53	(-stringByReplacingPercentEscapesUsingEncoding:): we now return
54	nil for non-ascii strings.
55
562012-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
57
58	* OpenChange/NSString+MAPIStore.m
59	(-stringByReplacingPercentEscapesUsingEncoding:): reimplemented
60	method properly, to work-around the weird behaviour of the
61	original in GNUstep.
62
63	* OpenChange/MAPIStoreMailContext.m
64	(+listContextsForUser:withTDBIndexing:inMemCtx:): we escape the
65	url string of non-ascii folder names.
66	(+createRootSecondaryFolderWithFID:andName:forUser:): same as
67	above.
68	(+*): reverted all of the above.
69
70	* OpenChange/MAPIStoreMailVolatileMessage.m
71	(FillMessageHeadersFromProperties): build a recipient list for the
72	"from" field from the list stored in the value for "orig" in the
73	recipients dict.
74	(FillMessageHeadersFromProperties): now take a "withBcc" parameter
75	that defines whether the "bcc" field must be ignored in the header.
76	(_generateMailDataWithBcc:): the above code enables use to remove
77	the search and replace hack required to remove the "bcc" header in
78	the message text.
79
802012-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
81
82	* OpenChange/MAPIStoreMailMessage.m (-getMessageData:inMemCtx:):
83	property return recipients from all the "from", "to", "cc" and
84	"bcc" header fields.
85
86	* OpenChange/MAPIStoreCalendarAttachment.m
87	(-getPidTagDisplayName:inMemCtx:): return an allocated value,
88	since returned values must be assigned to another parent.
89
902012-09-04  Francis Lachapelle  <flachapelle@inverse.ca>
91
92	* SoObjects/SOGo/WORequest+SOGo.m (-isMacOSXAddressBookApp):
93	recognize OS X 10.8 useragent.
94	(-isICal4): idem.
95
962012-08-28  Jean Raby  <jraby@inverse.ca>
97
98	* Scripts/openchange_cleanup.py:
99	New script to clean an openchange user profile
100
1012012-08-27  Francis Lachapelle  <flachapelle@inverse.ca>
102
103	* SoObjects/Appointments/SOGoAptMailInvitation.m,
104	SoObjects/Appointments/SOGoAptMailNotification.m,
105	SoObjects/Appointments/SOGoAptMailDeletion.m,
106	SoObjects/Appointments/SOGoAptMailUpdate.m,
107	SoObjects/Appointments/SOGoAptMailICalReply.m,
108	SoObjects/Appointments/SOGoCalendarComponent.m: send HTML messages
109	instead of text/plain.
110
111	* UI/WebServerResources/generic.js (openMailTo): mail addresses
112	must now be separated by semi-colons and not commas. This allow
113	display names to contain commas.
114
115	* UI/WebServerResources/SchedulerUI.js (tasksListCallback): prefix
116	tasks with a color box instead of changing the task's background color.
117
118	* UI/Scheduler/UIxCalListingActions.m
119	(-_getStatusClassForStatusCode:andEndDateStamp::): set the
120	timezone of the due date to the user's timezone to properly
121	identify tasks due today.
122
1232012-08-27  Ludovic Marcotte  <lmarcotte@inverse.ca>
124
125	* SoObjects/Appointments/iCalPerson+SOGo.m (mailAddress):
126	We now properly add double-quotes if we find a comma and
127	the person's name isn't already double-quoted. Fixes #1649
128
1292012-08-24  Francis Lachapelle  <flachapelle@inverse.ca>
130
131	* UI/MailPartViewers/UIxMailPartHTMLViewer.m (-_sanitizeContent):
132	fix invalid void tags to insure proper HTML decoding. Fixes #1581.
133
1342012-08-23	Ludovic Marcotte  <lmarcotte@inverse.ca>
135
136	* SoObjects/Mailer/SOGoMailFolder.m - added safety
137	checks around the ACL code so we don't crash if
138	we can't read the ACLs.
139
1402012-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
141
142	* OpenChange/MAPIStoreFolder.m (-getPidTagAccessLevel)
143	(-getPidTagRights, -getPidTagAccessControlListData): fixed
144	methods.
145
146	* OpenChange/MAPIStoreMessage.m
147	(-getPidTagDeleteAfterSubmit:inMemCtx:): moved from
148	MAPIStoreMailMessage.
149
150	* OpenChange/MAPIStoreContactsMessage.m
151	(-getPidTagAlternateRecipientAllowed:inMemCtx:)
152	(-getPidTagMessageFlags:inMemCtx:)
153	(-getPidTagDeleteAfterSubmit:inMemCtx:): new getters.
154
155	* OpenChange/MAPIStoreGCSFolder.m
156	(-setChangeKey:forMessageWithKey:): removed useless method.
157	(-updateVersionsForMessageWithKey:withChangeKey:): set the change
158	key provided by the client as member of the predecessor
159	changelist, but never as the actual change key for the object.
160	This hopefully fixes the issue where Outlook deletes objects that
161	have a different change list than what they expect.
162
1632012-08-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
164
165	* OpenChange/MAPIStoreCalendarMessage.m
166	(-getPidTagMessageClass:inMemCtx:): return
167	"IPM.Schedule.Meeting.Request" when the owner user is an attendee.
168
169	* OpenChange/MAPIStoreAppointmentWrapper.m
170	(-getPidLidAppointmentNotAllowPropose:inMemCtx): new getter that
171	always return "YES", in order to disallow counter proposals.
172
173	* OpenChange/MAPIStoreContext.m (-getPath:ofFMID:inMemCtx:):
174	properly escape urls containing non-ascii chars.
175	(-getRootFoldeR:withFID:): idem.
176
1772012-08-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
178
179	* OpenChange/MAPIStoreCalendarMessage.m
180	(-getMessageData:inMemCtx:): when a "recipients" records is
181	available in the properties, we must return that list instead of
182	the list of attendees since it will be the most recent one.
183	(_fixupAppointmentObjectWithUID::): when an appointment had been
184	deleted, we first attempt to resurrect it from the database before
185	reinstantiating it, which allows the event synchronisation to
186	happen properly in [SOGoAppointmentObject
187	updateContentWithCalendar:fromRequest:].
188
189	* OpenChange/MAPIStoreMapping.m (_updateFolderWithURL:withURL:):
190	we retain and release "oldURL" to avoid releasing it when it
191	is replaced in the list of urls to modify.
192
193	* OpenChange/MAPIStoreAppointmentWrapper.m
194	(-getPidTagInternetCodepage:inMemCtx:): new getter for a property
195	that is sometimes requested.
196	(-getPidTagBody:inMemCtx:): we return an empty string when no
197	"description"/"comment" is actually present.
198
1992012-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
200
201	* OpenChange/MAPIStoreMailFolder.m (-addProperties:): make use of
202	the new methods below when a mail folder has been renamed, as this
203	operation affects the url of mail objects.
204
205	* OpenChange/SOGoMAPIDBObject.m (-setNameInContainer): update the
206	object record in the database to reflect the change of folder
207	name.
208
209	* OpenChange/MAPIStoreMailContext.m (-updateURLWithFolderName):
210	change the folder name used in the context url to use the new
211	folder name after a rename operation, so that further invocations
212	of -url will return the right url.
213
214	* OpenChange/MAPIStoreMailFolder.m
215	(-moveCopyToFolder:withNewName:isMove:isRecursive:): implemented
216	IMAP-based copy operation, for speed.
217	(-addProperties): restored the ability to rename IMAP folders by
218	properly updating the fid/url mapping with our new methods.
219
2202012-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
221
222	* OpenChange/MAPIStoreFolder.m (-moveToFolder:withNewName:):
223	renamed to "moveCopyToFolder:withNewName:isMove:isRecursive:",
224	with the ability to specify whether the operation is a move or
225	copy operation and whether it is recursive or not (for copy).
226
227	* OpenChange/MAPIStoreSOGo.m (sogo_folder_move_folder): if
228	"target_folder_object", we do not attempt to access the
229	corresponding instance member.
230
231	* OpenChange/MAPIStoreMailFolder.m (-
232	moveCopyMessagesWithMIDs:andCount:fromFolder:withMIDs:andChangeKeys:wantCopy:):
233	do not attempt to access targetChangeKeys when NULL, to avoid a
234	SEGFAULT.
235
2362012-08-14  Jean Raby  <jraby@inverse.ca>
237
238	* OpenChange/GNUmakefile: use version_info[{0,1}] instead of
239	version_info.{major,minor} when checking for legacy version
240	of python since these named attributes where added in python2.7
241
2422012-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
243
244	* OpenChange/MAPIStoreSOGo.m (sogo_properties_get_uri): removed
245	useless backend method.
246
247	* OpenChange/MAPIStoreFolder.m (-createFolder:withRow:andFID:):
248	append a "/" to the new folder url when registering with the
249	url/id mapper.
250
251	* OpenChange/MAPIStoreDBFolder.m (-moveToFolder:withNewName:):
252	implemented method.
253
254	* OpenChange/MAPIStoreMailFolder.m (-moveToFolder:withNewName:):
255	invoke changePathTo: on the dbFolder.
256
257	* OpenChange/SOGoMAPIDBFolder.m (-changePathTo:): overriden method
258	in order to update children records too.
259
260	* OpenChange/SOGoMAPIDBObject.m (-performBatchSQLQueries:) new
261	method to perform void queries under a transaction.
262	(-changePathTo:) new method that updates the references for the
263	object record in the dbfs table.
264
265	* SoObjects/SOGo/NSString+Utilities.m
266	(-stringByReplacingPrefix:withPrefix:): new self-explicit method.
267
268	* OpenChange/SOGoMAPIDBFolder.m
269	(-childKeysOfType:includeDeleted:matchingQualifier:andSortOrderings:):
270	records now have a c_parent_path column in order to avoid fetch
271	the children of children due to the nature of our "LIKE" clause.
272
273	* OpenChange/SOGoMAPIDBObject.m (-save): records now have a
274	c_parent_path.
275
276	* OpenChange/MAPIStoreMailFolder.m (-supportsSubFolders):
277	overriden method to return YES.
278
2792012-08-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
280
281	* OpenChange/MAPIStoreMailFolder.m (-moveToFolder:withName:): if
282	the new name is not provided (unlikely), the computed new name
283	must not have the "folder" prefix.
284	We now also make use of -[MAPIStoreMapping updateID:withURL:] to
285	change the references in the mapping database.
286
287	* OpenChange/MAPIStoreFolder.m (-objectId): folder keys always end
288	with a "/" by convention.
289
290	* OpenChange/MAPIStoreMapping.m (-updateID:withURL:): new method
291	that perform a change of url on container and leaf entries.
292
2932012-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
294
295	* OpenChange/MAPIStoreSOGo.m (sogo_properties_get_uri): new
296	backend method.
297
2982012-08-10  Ludovic Marcotte  <lmarcotte@inverse.ca>
299
300	* Changed OpenChange/SOGoMAPIDBObject.m so we use
301	GNUstep's binary encoding - which is an order or
302	magnitude faster at encoding data than any other formats.
303
3042012-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
305
306	* OpenChange/MAPIStoreSOGo.m (sogo_folder_move_folder)
307	(sogo_folder_copy_folder): the object on which the backend method
308	is invoked is now the folder being moved rather than its parent.
309
3102012-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
311
312	* OpenChange/MAPIStoreMailFolder.m
313	(-moveFolderWithFID:fromFolder:withNewName:): first implementation
314	for IMAP folders.
315
316	* OpenChange/MAPIStoreSOGo.m (sogo_folder_move_folder)
317	(sogo_folder_copy_folder): new backend methods.
318	(sogo_folder_move_folder): do not instantiate an NSString from a
319	NULL "new_folder_name" parameter.
320
3212012-08-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
322
323	* OpenChange/MAPIStoreCalendarMessage.m (-save): generate a
324	"nameInContainer" for the new object iif it is not set yet. If
325	set, we generate a new UID from it instead.
326
327	* OpenChange/MAPIStoreMessage.m (-saveMessage): make sure that the
328	PidTagChangeKey and PidTagChangeNumber props are no longer set in
329	the properties dict after the save occurred.
330
331	* OpenChange/MAPIApplication.m (-shouldSetupSignalHandlers):
332	overriden method by returning "NO".
333
3342012-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
335
336	* SoObjects/Appointments/SOGoAptMailNotification.m (-setupValues):
337	test whether each value is non-nil before adding it to the
338	dictionary.
339
340	* OpenChange/MAPIStoreMailVolatileMessage.m (-save): restored
341	registration of message url when saved.
342
3432012-08-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
344
345	* OpenChange/MAPIStoreRecurrenceUtils.m (-[iCalRecurrenceRule
346	fillRecurrencePattern:withEvent:inTimeZone:inMemCtx:]): fixed a
347	crash occurring when the exception has no recurrence-id and
348	ignore the specific occurrence.
349
350	* OpenChange/MAPIStoreMailVolatileMessage.m (MakeMessageBody):
351	take "attachmentParts" parameter, deduced from the ivar with the
352	corresponding name.
353
354	* OpenChange/MAPIStoreSOGoObject.m (-objectId): force generation
355	of objectId by parent, whether it is a folder or not.
356
3572012-08-07  Francis Lachapelle  <flachapelle@inverse.ca>
358
359	* UI/Contacts/UIxListEditor.m (-setReferencesValue:): check for
360	duplicates in the new list, not in the previous version.
361
3622012-08-03  Jean Raby  <jraby@inverse.ca>
363
364	* SoObjects/SOGo/LDAPSource.m (changePasswordForLogin):
365	if userPasswordAlgorithm was not set or was set to "none",
366	use the plaintext password directly instead of using '{none}plaintext'
367	which isn't valid.
368
3692012-08-02  Ludovic Marcotte  <lmarcotte@inverse.ca>
370
371	* OpenChange/MAPIStoreUserContext.m (-_readUserPassword:)
372	We now read per-user passwords instead of relying on
373	a global file.
374
3752012-07-31  Jean Raby  <jraby@inverse.ca>
376
377	* sogo.spec:
378	  Treat logrotate file as a config file (noreplace)
379
3802012-07-31  Francis Lachapelle  <flachapelle@inverse.ca>
381
382	* SoObjects/SOGo/SOGoSieveManager.m
383	(-sieveScriptWithRequirements:): filters must not be conditional
384	to each other.
385
3862012-07-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
387
388	* OpenChange/iCalTimeZone+MAPIStore.[hm]: new category module.
389	(-asTimeZoneStructInMemCtx:): new method that returns a struct
390	TimeZoneStruct as a binary blob from an iCalTimeZone object.
391
392	* OpenChange/MAPIStoreAppointmentWrapper.m
393	(-getPidLidTimeZoneStruct:inMemCtx:): new property getter that
394	returns the equivalent of the iCalTimeZone of the current event.
395
3962012-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
397
398	* OpenChange/MAPIStoreDBFolder.m (-createFolder:withFID:andKey:):
399	invoke "reloadIfNeeded" on the created folder object in order to
400	initialize it.
401
4022012-07-25  Francis Lachapelle  <flachapelle@inverse.ca>
403
404	* SoObjects/Mailer/SOGoMailFolder.m
405	(-deleteUIDs:useTrashFolder:inContext:): fixed comparison with the
406	trash folder name when using subfolders (ex: INBOX/Trash).
407
408	* SoObjects/SOGo/SOGoSieveManager.m
409	(-updateFiltersForLogin:authname:password:account:): write the
410	filters before the vacation auto-reply.
411
412	* SoObjects/Appointments/SOGoCalendarComponent.m
413	(-sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:withType:):
414	fixed the from header when the updated event has no mode organizer.
415
416	* UI/WebServerResources/MailerUI.js (initMailer): define default
417	columns widths when not set.
418
4192012-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
420
421	* OpenChange/MAPIStoreUserContext.m
422	(-initWithUsername:andTDBIndexing:): attempt to read the user
423	password from a property list.
424
425	* OpenChange/samba-get-config.py: new utility taking a samba
426	configuration variable and prints the value on stdout
427
4282012-07-24  Francis Lachapelle  <flachapelle@inverse.ca>
429
430	* UI/WebServerResources/UIxPreferences.js (savePreferences):
431	validate the email address of the sender mail and reply-to fields.
432
4332012-07-23  Jean Raby  <jraby@inverse.ca>
434	* debian*/sogo.logrotate:
435	  drop distro specific log rotate scripts
436	* debian*/sogo.install
437	* debian*/rules :
438	  Use the logrotate script from Scripts/.
439
4402012-07-20  Ludovic Marcotte  <lmarcotte@inverse.ca>
441
442	* UI/MailPartViewers/UIxMailRenderingContext.m
443	(_shouldDisplayAsAttachment:): refactored to consider
444	the "bodyId" parameter only for non text/* parts.
445
4462012-07-20  Francis Lachapelle  <flachapelle@inverse.ca>
447
448	* UI/WebServerResources/MailerUI.js (onEmailTo): append the email
449	address from the href attribute if it doesn't appear in the link content.
450
451	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
452	(-startElement:namespace:rawName:attributes:): don't skip "mailto:"
453	href.
454
455	* SoObjects/Appointments/SOGoAptMailReceipt.m (aptSummary-): new
456	method that returns a properly formatted string of the event title
457	with respect to the current operation (creation/deletion/update).
458
4592012-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
460
461	* OpenChange/NSObject+MAPIStore.m (-getSMTPAddrType:inMemCtx:):
462	new helper getter.
463
464	* OpenChange/MAPIStoreSOGo.m
465	(sogo_message_attachment_create_embedded_message): new backend method.
466
467	* OpenChange/NSObject+MAPIStore.m
468	(+fillAvailableProperties:withExclusions:): new method that fills
469	an existing array of properties with properties existing in
470	another class, as long as they are not listed in the array of
471	exclusions.
472
473	* OpenChange/MAPIStoreObject.m (-init): assigned a mutable array
474	to "proxies"
475	(-canGetProperty:): test the proxies for the availability of
476	properties so that -getAvailableProperties:inMemCtx: can return an
477	accurate result.
478
479	* OpenChange/MAPIStoreMessage.m (-getPidTagSubject:inMemCtx:): now
480	compute the return value based on PidTagNormalizedSubject and
481	PidTagSubjectPrefix as PidTagSubject is never actually set from
482	the client.
483
4842012-07-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
485
486	* OpenChange/MAPIStoreObject.m (-nameInContainer): moved method
487	from MAPIStoreSOGoObject and made mandatory for subclasses.
488	(-url): new methed moved from MAPIStoreSOGoObject.
489
490	* OpenChange/MAPIStoreAppointmentWrapper.m: now a subclass of
491	MAPIStoreObjectProxy.
492
493	* OpenChange/MAPIStoreCalendarMessage.m
494	(-initWithSOGoObject:inContainer:): we now register our
495	appointment wrapper as a proxy.
496
497	* OpenChange/MAPIStoreObject.m (-addProxy:): new method that keeps
498	proxy objects in the new "proxies" ivar.
499	(-getProperty:withTag:inMemCtx:): added code that pass the request
500	to the available object proxies, when the property getters have
501	not been found in the local class.
502
503	* OpenChange/MAPIStoreObjectProxy.[hm]: new class module that
504	provide a facility for providing property getters in the name of
505	another class, working around the fact that Objective-C does not
506	provide multiple-inheritance.
507
508	* OpenChange/NSObject+MAPIStore.m
509	(+getAvailableProperties:inMemCtx:)
510	(-getAvailableProperties:inMemCtx:, canGetProperty:): methods
511	moved from MAPIStoreObject.m
512
5132012-07-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
514
515	* OpenChange/MAPIStoreCalendarFolder.m (-createMessage): attach a
516	WOContext to the newEntry in order to enable page templates
517	resolution when notifications are sent.
518
519	* OpenChange/MAPIApplication.m (-init): a WEResourceManager is
520	setup for the application so that page templates can be properly
521	be initialized.
522
523	* OpenChange/MAPIStoreDBMessage.m (-objectVersion): shift the
524	version number by 16 bits, instead of doing it in -save.
525	(-save): don t swap the bytes of the version number as it would
526	return a wrong change number and a wrong change key for DB objects.
527
5282012-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
529
530	* OpenChange/NSObject+MAPIStore.m (-getSMTPAddrType:inMemCtx:):
531	new helper getter.
532
533	* OpenChange/MAPIStoreSOGo.m
534	(sogo_message_attachment_create_embedded_message): new backend method.
535
536	* OpenChange/NSObject+MAPIStore.m
537	(+fillAvailableProperties:withExclusions:): new method that fills
538	an existing array of properties with properties existing in
539	another class, as long as they are not listed in the array of
540	exclusions.
541
542	* OpenChange/MAPIStoreObject.m (-init): assigned a mutable array
543	to "proxies"
544	(-canGetProperty:): test the proxies for the availability of
545	properties so that -getAvailableProperties:inMemCtx: can return an
546	accurate result.
547
548	* OpenChange/MAPIStoreMessage.m (-getPidTagSubject:inMemCtx:): now
549	compute the return value based on PidTagNormalizedSubject and
550	PidTagSubjectPrefix as PidTagSubject is never actually set from
551	the client.
552
553	* SoObjects/Appointments/SOGoAppointmentFolder.m
554	(_appendCycleException:firstInstanceCalendarDateRange:fromRow:forRange:withTimeZone:toArray:):
555	return immediately if the occurrence does not have a valid
556	recurrence-id.
557
5582012-07-20  Francis Lachapelle  <flachapelle@inverse.ca>
559
560	* UI/WebServerResources/MailerUI.js (onEmailTo): append the email
561	address from the href attribute if it doesn't appear in the link content.
562
563	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
564	(-startElement:namespace:rawName:attributes:): don't skip "mailto:"
565	href.
566
567	* SoObjects/Appointments/SOGoAptMailReceipt.m (aptSummary-): new
568	method that returns a properly formatted string of the event title
569	with respect to the current operation (creation/deletion/update).
570
5712012-07-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
572
573	* OpenChange/MAPIStoreObject.m (-nameInContainer): moved method
574	from MAPIStoreSOGoObject and made mandatory for subclasses.
575	(-url): new methed moved from MAPIStoreSOGoObject.
576
577	* OpenChange/MAPIStoreAppointmentWrapper.m: now a subclass of
578	MAPIStoreObjectProxy.
579
580	* OpenChange/MAPIStoreCalendarMessage.m
581	(-initWithSOGoObject:inContainer:): we now register our
582	appointment wrapper as a proxy.
583
584	* OpenChange/MAPIStoreObject.m (-addProxy:): new method that keeps
585	proxy objects in the new "proxies" ivar.
586	(-getProperty:withTag:inMemCtx:): added code that pass the request
587	to the available object proxies, when the property getters have
588	not been found in the local class.
589
590	* OpenChange/MAPIStoreObjectProxy.[hm]: new class module that
591	provide a facility for providing property getters in the name of
592	another class, working around the fact that Objective-C does not
593	provide multiple-inheritance.
594
595	* OpenChange/NSObject+MAPIStore.m
596	(+getAvailableProperties:inMemCtx:)
597	(-getAvailableProperties:inMemCtx:, canGetProperty:): methods
598	moved from MAPIStoreObject.m
599
6002012-07-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
601
602	* OpenChange/MAPIStoreCalendarFolder.m (-createMessage): attach a
603	WOContext to the newEntry in order to enable page templates
604	resolution when notifications are sent.
605
606	* OpenChange/MAPIApplication.m (-init): a WEResourceManager is
607	setup for the application so that page templates can be properly
608	be initialized.
609
610	* OpenChange/MAPIStoreDBMessage.m (-objectVersion): shift the
611	version number by 16 bits, instead of doing it in -save.
612	(-save): don t swap the bytes of the version number as it would
613	return a wrong change number and a wrong change key for DB objects.
614
6152012-07-18  Ludovic Marcotte  <lmarcotte@inverse.ca>
616
617	* SoObjects/Appointments/SOGoAppointmentObject.m
618	(_setupResponseInRequestCalendar:): we now return the
619	calendar read from the database and not use the one
620	from the request anymore, as it can override properties
621	other than participation status changes.
622
6232012-07-18  Jean Raby  <jraby@inverse.ca>
624	* Tests/Integration/config.py.in: New config parameter: webCalendarURL
625	* Tests/Integration/webdavlib.py(HTTPPOST,HTTPGET):
626	  Allow cookies in post and get requests.
627	* Tests/Integration/test-ui-posts.py: New test class
628	  Currently contains only one test case which exercises addWebCalendar
629
630	* SoObjects/Appointments/GNUmakefile:
631	  use -Wl,--no-as-needed when linking. Fixes #1863
632
633	* Scripts/sql-update-1.3.16_to_1.3.17-mysql.sh
634	* Scripts/sql-update-1.3.16_to_1.3.17.sh:
635	New scripts to expand c_cycleinfo to mediumtext or varchar(1000000)
636	The field was expanded around 1.3.3.
637	See http://www.sogo.nu/bugs/view.php?id=1848
638
6392012-07-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
640
641	* Tests/Integration/webdavlib.py (WebDAVQuery.set_response): make
642	use of xml.etree.cElementTree for speed and avoid using a
643	cStringIO altogether by directly passing the content string.
644
645	* Tests/Integration/test-davacl.py (DAVCalendarSuperUserAclTest._getEvent)
646	(DAVCalendarAclTest._getEvent): ensure that the resulting event
647	does not contain any "\r" char as the XML parser would anyway
648	strip them.
649
6502012-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
651
652	* SoObjects/Appointments/SOGoAppointmentObject.m
653	(-updateContentWithCalendar:fromRequest:): new method spawned from
654	the previous incarnation of PUTRequest:, designed to centralize
655	all the processed performed on an iCalendar instance, new or
656	derived from the original.
657	(-changeParticipationStatus:withDelegate:forRecurrenceId:):
658	reorganized the method workflow by not testing "calendar" as it is
659	guaranteed to be returned. Also, we save the iCalendar object from
660	here, as we cannot invoke the method above, which would reinvoke
661	this method in loop in the current state of the code.
662
663	* SoObjects/Appointments/SOGoCalendarComponent.m
664	(-lookupOccurrence:): now a virtual method forcing the use by
665	subclasses of the new methods below.
666	(-saveCalendar:): new method that enables the saving of an
667	iCalendar object.
668
669	* SoObjects/Appointments/iCalCalendar+SOGo.m: new category module.
670	(-eventWithRecurrenceId, -todoWithRecurrenceId): new method that
671	return as recurrence based on the id passed as parameter.
672
673	* Tests/Integration/test-caldav-scheduling.py
674	(CalDAVSchedulingTest.setUp): use the proper password for
675	attendee1_delegate.
676
6772012-07-12  Jean Raby <jraby@inverse.ca>
678
679	* SoObjects/Mailer/SOGoMailForward.m (from, to, cc, reply-to):
680	mailHeaders returns an array if there are multiple headers of the same type.
681	Handle this case to correctly show multiple from, to, cc and reply-to headers
682	in mail replies/forwards instead of crashing.
683
6842012-07-11  Ludovic Marcotte <lmarcotte@inverse.ca>
685
686	* Finished the implementation and testing of the two
687	new defaults. Also added documentation in the SOGo Installation
688	and Configuration Guide.
689
690	* Updated UI/Templates/SchedulerUI/UIxCalendarProperties.wox to not
691	show the notification options if it's a web calendar or if the active
692	user isn't the owner of the calendar.
693
694	* Added strings to translate and cleaned up the template to send
695	HTML mails instead of text/plain.
696
6972012-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
698
699	* SoObjects/Appointments/SOGoAppointmentFolder.m
700	(-davNotifyOnPersonalModifications)
701	(-setDavNotifyOnPersonalModifications:)
702	(-davNotifyOnExternalModifications)
703	(-setDavNotifyOnExternalModifications:)
704	(-davNotifyUserOnPersonalModifications)
705	(-setDavNotifyUserOnPersonalModifications:)
706	(-davNotifiedUserOnPersonalModifications)
707	(-setDavNotifiedUserOnPersonalModifications:): new dav accessors.
708
709
710	* SoObjects/SOGo/SOGoObject.m (-davBooleanForResult:): new method
711	that returns a valid DAV boolean from a BOOL.
712	(-isValidDAVBoolean:): new method that validates the value as a
713	DAV boolean.
714	(-resultForDAVBoolean:): new method that returns a BOOL from a DAV
715	boolean.
716
7172012-07-09  Ludovic Marcotte <lmarcotte@inverse.ca>
718
719	* Dropped old templates (SOGoAptMailDeletionReceipt.wox
720	SOGoAptMailInvitationReceipt.wox and SOGoAptMailUpdateReceipt.wox)
721	which are in fact replaced by SOGoAptMailReceipt.wox. File added
722	to the repository.
723
724	* Dropped SOGoAppointmentSendEMailReceipts
725
726	* Added two new domain defaults: SOGoNotifyOnPersonalModifications
727	and SOGoNotifyOnExternalModifications. They allow users to be notified
728	when modifying their own calendars or when someone else to it. These
729	defaults are over-writable by users from their calendar properties window.
730
731	* Implemented the code related to the two new defaults together with a
732	third option - which is to notify a specific person when one modifies
733	his/her calendar. This commit is partial as more testing is required
734	and some code changes to trigger the right notifications.
735
7362012-07-09  Jean Raby  <jraby@inverse.ca>
737
738	* Tools/SOGoToolUserPreferences.m:
739	use printf() instead of NSLog to print out user preferences.
740	Makes it easier to grep.
741
742	* UI/WebServerResources/generic.js (onSearchFormSubmit):
743	Restore behavior of a single dot (.) in the search field (wildcard search)
744
745	* UI/WebServerResources/SchedulerUI.js (onMenuRawEvent, onMenuRawTask):
746	New callback to show the event/task content from the menu
747
748	* UI/Scheduler/UIxComponentEditor.m (rawAction):
749	New method that returns the object's raw content in a WOResponse.
750
751	* UI/Templates/SchedulerUI/UIxCal{Day,Month,Main,Week}View.wox:
752	New contextual menu item: Show Raw Source
753
754	* UI/WebServerResources/ContactsUI.js (onMenuRawContact):
755	Rework to use calendar/ics/raw
756
757	* UI/Contacts/UIxContactFolderActions.m (rawAction):
758	Removed / moved to UI/Contacts/UIxContactActions.m
759
760	* UI/Contacts/UIxContactActions.m (rawAction):
761	New method that returns the object's raw content in a WOResponse.
762
763	* UI/Templates/ContactsUI/UIxContactFoldersView.wox:
764	Show vCard content -> Show Raw Source
765
766
7672012-07-05  Jean Raby  <jraby@inverse.ca>
768
769	* UI/WebServerResources/generic.js (openGenericWindow):
770	New method that opens a simple new window.
771
772	* UI/WebServerResources/ContactsUI.js (onMenuRawContact):
773	New callback to show the vCard content from the menu.
774
775	* UI/WebServerResources/ContactsUI.js (onContactMenuPrepareVisibility):
776	Enable the export and raw functions only on vcards contacts.
777
778	* UI/Templates/ContactsUI/UIxContactFoldersView.wox:
779	New contextual menu item: Show vCard content
780
781	* UI/Contacts/UIxContactFolderActions.m (rawAction):
782	New method that returns the raw contact data for all the contact uids provided
783
784	* UI/Contacts/UIxContactView.m (secondaryEmail):
785	function renamed to secondaryEmails. It now returns all addresses
786	instead of the first one found in the vcard.
787
788	* UI/Templates/ContactsUI/UIxContactView.wox:
789	Show all addresses returned from secondaryEmails.
790	This still need some css tweaks.
791
7922012-07-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
793
794	* OpenChange/MAPIStoreRecurrenceUtils.m
795	(-setupRecurrenceWithMasterEntity:fromRecurrencePattern:): add
796	exception dates to master entity based on the
797	"DeletedInstanceDates" member of the struct.
798	(-fillRecurrencePattern:withEvent:inTimeZone:inMemCtx:): new name
799	for fillRecurrencePattern:withStartDate:andEndDate:, add exception
800	dates to struct.
801
802	* OpenChange/NSDate+MAPIStore.m (NSDateCompare): new comparison
803	function for sorting array of NSDate instances.
804
8052012-06-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
806
807	* OpenChange/NSObject+MAPIStore.h: renamed
808	MAPIStoreTallocWrapper.MAPIStoreSOGoObject to .instance, to avoid
809	confusion in certain versions of GCC with our new class type.
810
8112012-06-29  Jean Raby  <jraby@inverse.ca>
812
813	* SoObjects/SOGo/WORequest+SOGo.[mh]
814	(-isAndroid): new method to detect whether the
815	request has been performed from an android client
816
817	* SoObjects/Contacts/SOGoContactFolders.m (appendSystemSources):
818	Let sogo append system sources if the request comes from an android
819	client even if its user agent matches the IPhoneAddressBook
820
8212012-06-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
822
823	* OpenChange/MAPIStoreSOGo.m
824	(sogo_message_attachment_open_embedded_message): added the "mode"
825	parameter.
826
827	* OpenChange/SOGoMAPIDBObject.m: new class module that replaced
828	SOGoMAPIFSMessage.
829
830	* OpenChange/SOGoMAPIDBFolder.m: new class module that replaced
831	SOGoMAPIFSFolder.
832
8332012-06-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
834
835	* SoObjects/SOGo/SOGoObject.m (-initWithName:inContainer:): make
836	sure that "_name" is neither nil nor empty.
837
8382012-06-27  Jean Raby  <jraby@inverse.ca>
839
840	* SoObjects/Appointments/SOGoAppointmentObject.m
841	(PUTAction:): detect conflicting event UID and
842	deny the request accordingly.
843
8442012-06-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
845
846	* Added the SOGoSearchMinimumWordLength domain
847	default which controls the minimal length required
848	before trigging server-side search operations for
849	attendee completion, contact searches, etc. The
850	default value is 2, which means search operations
851	are trigged once the 3rd character is typed.
852
8532012-06-20  Ludovic Marcotte  <lmarcotte@inverse.ca>
854
855	* SoObjects/Appointments/SOGoAppointmentObject.m
856	(-_handleResourcesConflicts:forEvent:): We now
857	handle correctly recurring events overlapping other
858	recurring events.
859
8602012-06-19  Ludovic Marcotte  <lmarcotte@inverse.ca>
861
862	* SoObjects/Appointments/SOGoAppointmentFolder.m (-importCalendar:):
863	We now handle correctly floating events by forcing the use of
864	the user's timezone.
865
866	* SoObjects/Appointments/SOGoCalendarComponent.m (-expandGroupsInEvent:):
867	We now remove all attendees that are equal (email-based comparison) to
868	the event's organizer instead of only for decomposed groups.
869
8702012-06-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
871
872	* SoObjects/SOGo/SOGoGroup.m
873	(+groupWithValue:andSourceSelector:inDomain:): handle the case
874	the value of "objectclass" is actually an NSString instance,
875	otherwise causing a crash with the NSArray methods.
876
8772012-06-04  Francis Lachapelle  <flachapelle@inverse.ca>
878
879	* UI/WebServerResources/UIxFilterEditor.js (savePreferences):
880	don't validate filters if they are not visible (when matching all
881	incoming messages).
882
883	* SoObjects/Appointments/SOGoAppointmentFolder.m
884	(-_appendCycleException:firstInstanceCalendarDateRange:fromRow:forRange:withTimeZone:toArray:):
885	adjust recurrence id according to timezone when dealing with a
886	floating all-day event.
887
8882012-06-01  Francis Lachapelle  <flachapelle@inverse.ca>
889
890	* SoObjects/SOGo/NSString+Utilities.m
891	(-_handleURLs:textToMatch:prefix:inRanges:): don't reset the
892	prefix for the subsequent matching strings. This fixes links in
893	messages with multiple email addresses, some of which already
894	prefixed by "mailto;".
895
8962012-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
897
898	* OpenChange/*: fixed build errors with gcc-4.7
899
900	* UI/MailPartViewers/UIxMailPartAlternativeViewer.m
901	(-childPartName): fixed a potential crash by building the NSString
902	from the integer itself, with the proper format string.
903
904	* SoObjects/SOGo/NSString+Crypto.m
905	(-isEqualToCrypted:withDefaultScheme:): invoke "intValue" rather
906	than "integerValue" on the encoding number as the int type is not
907	crucial and it breaks the build with old versions of GNUstep.
908
909	* SoObjects/SOGo/NSString+Crypto.[hm]: new module that provides
910	category methods for returning encrypted passwords strings and
911	their encryption algorithm.
912
9132012-05-31  Ludovic Marcotte  <lmarcotte@inverse.ca>
914
915	* SoObjects/SOGo/SOGoGroup.m - we now handle lowercase
916	all attribute names
917	* SoObject/SOGo/LDAPSource.m - moved the lowercasing
918	of attributes to SOPE.
919	* Added patch from bug #1608. This add many more password
920	schemes for SQL authentication.
921	* SoObject/Mailer/SOGoMailFolder.m (-_readMailboxACL): we
922	now create the mailbox if we are trying to read ACL of
923	a deleted mailbox.
924	* UI/MailerUI/UIxMailEditor.m (-personalContactInfos): we check
925	if the folder still exist and if the database isn't down
926	before performing any address books search operations.
927	* UI/MailerUI/UIxMailMainFrame.m (-unseenCountFolders): we no
928	longer fill up the list of mailboxes to with the ones that are
929	targets for "fileinto" methods if Sieve scripts aren't enabled
930	in SOGo's domain defaults.
931
9322012-05-29  Francis Lachapelle  <flachapelle@inverse.ca>
933
934	* UI/WebServerResources/UIxMailEditor.js (validateEditorInput):
935	merged with onValidate.
936	(onValidate): don't force the subject to be defined, but alert
937	the user.
938
939	* UI/MailerUI/UIxMailView.m (-messageSubject): don't set the
940	subject to "Untitled" if it's not set.
941
942	* UI/MailPartViewers/UIxMailPartMessageViewer.m (-messageSubject): idem.
943
944	* UI/MailerUI/UIxMailEditor.m (-validateForSend): don't force the
945	subject to be defined.
946
947	* SoObjects/Mailer/SOGoMailObject+Draft.m (-subjectForReply): make
948	sure subject is a defined value to avoid "null" strings in the
949	reply message.
950
9512012-05-28  Francis Lachapelle  <flachapelle@inverse.ca>
952
953	* UI/WebServerResources/SchedulerUI.js (validateUploadForm): hide
954	Cancel button when the form is valid and disable the Submit button.
955
956	* UI/WebServerResources/ContactsUI.js (validateUploadForm): idem.
957
9582012-05-24  Jean Raby  <jraby@inverse.ca>
959
960	* debian*/rules: Restart sogod after pkg upgrade (dh_installinit -R)
961	* Scripts/sogo-init.d-*: add support for conditional restart.
962	  Patch from Romain Le Disez
963	* sogo.spec: Restart sogod during post installation if it was already running
964
965	* Apache/SOGo.conf:
966	Use mod_expires to allow long term caching of static content. (1 year)
967	Note that from now on, a resource's URL _must_ change to let the client
968	reload it.  This is now done automatically for 'rsrc' in the wox templates,
969	but must be done manually for files referenced from css and js.
970
9712012-05-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
972
973	* UI/WebServerResources/generic.js
974	(clickEventWrapper.button_clickEventWrappe): don't invoke
975	"preventDefault" on elements that do not have a tagName of "A".
976
9772012-05-18  Jean Raby  <jraby@inverse.ca>
978
979	* SoObjects/Mailer/SOGoDraftObject.m (bodyPartForAttachmentWithName):
980	Merge back lost code to handle encoding of binary and rcf822 attachments.
981
9822012-05-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
983
984	* OpenChange/gen-property-selectors.py: the use of the "{}" to
985	construct a set is only valid on py2.7 therefore we make use of
986	set([]) instead.
987
9882012-05-15  Jean Raby  <jraby@inverse.ca>
989
990	* SoObjects/Appointments/SOGoAppointmentObject.m (_handleResourcesConflicts):
991	Deny access to resources if the resource's ACL don't allow the organizer
992	to read its freebusy info.
993	Without this, sogo would always auto-accept invitations from 'unprivileged'
994	users, potentially bypassing the multiplebooking parameter.
995
9962012-05-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
997
998	* OpenChange/gen-property-selectors.py: "bannedProps" is now a
999	set, for faster lookups.
1000
1001	* UI/WebServerResources/UIxContactsUserFolders.js: folder ids are
1002	in the form "user:module/folder", therefore we must remove the
1003	first char, which is a slash.
1004
1005	* UI/WebServerResources/generic.js (subscribeToFolder): prepend a
1006	"/" to the folder name, as it comes originally in the form
1007	user:module/folder.
1008
1009	* UI/WebServerResources/UIxPreferences.js (initMailAccounts)
1010	(displayMailAccount): getElementsByTagName seems too standard for
1011	IE, we use $$() now so that we can invoke "each" on the result set
1012	without triggering an exception.
1013
10142012-05-09  Jean Raby  <jraby@inverse.ca>
1015
1016	* SoObjects/Appointments/SOGoAppointmentObject.m (PUTAction):
1017	Delete bitrotten code that could end up duplicating attendees.
1018	Behavior exposed by the new caldav tests
1019
1020	* Tests/Integration/config.py.in
1021	* Tests/Integration/test-caldav-scheduling.py
1022	* Tests/Integration/test-ical.py
1023	* Tests/Integration/test-davacl.py:
1024	Use an unprivileged webdavclient where possible.
1025	This would have uncovered the resources calendar autocreation bug.
1026
1027	* Tests/Integration/test-caldav-scheduling.py:
1028	New tests to excercise somewhat fragile code in dav autoscheduling.
1029
10302012-05-09  Jean Raby  <jraby@inverse.ca>
1031
1032	* SoObject/SOGo/SOGoParentFolder.m (_createPersonalFolder):
1033	Automatically create the folder if its owner is a resource.
1034	(not if the active user is a resource)
1035
10362012-05-09  Ludovic Marcotte  <lmarcotte@inverse.ca>
1037
1038	* SoObjects/Mailer/SOGoDraftObject.m - don't encode message/rfc822
1039	parts in base64 - it's not allowed.
1040
10412012-05-08  Francis Lachapelle  <flachapelle@inverse.ca>
1042
1043	* UI/WebServerResources/ContactsUI.js (configureDraggables)
1044	(configureDroppables, startDragging, whileDragging, stopDragging)
1045	(dropAction): drag'n'drop is how handle by jQuery instead of Scriptaculous.
1046
1047	* UI/WebServerResources/MailerUI.js (configureDraggables)
1048	(configureDroppables, startDragging, whileDragging, stopDragging)
1049	(dropAction): idem.
1050
1051	* UI/WebServerResources/generic.js (onCloseButtonClick)
1052	(showPromptDialog, showSelectDialog, showAuthenticationDialog)
1053	(disposeDialog, _disposeDialog): idem.
1054
1055	* UI/WebServerResources/SOGoRootPage.js (initLogin): idem.
1056
1057	* UI/Contacts/UIxContactView.m (-primaryEmail): in the mailto
1058	link, remove double-quotes and escape single-quotes from the fullname.
1059	(-secondaryEmail): idem.
1060
10612012-05-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1062
1063	* OpenChange/MAPIStoreSOGo.m: register and unregister current
1064	thread before and after each backend operation, in order to avoid
1065	issues in multithreaded environment.
1066
10672012-05-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1068
1069	* UI/WebServerResources/generic.js (accessToSubscribedFolder): use
1070	the last part of the string as folder identifier. Otherwise we end
1071	up with the module name.
1072
1073	* SoObjects/Mailer/SOGoDraftObject.m
1074	(-bodyPartForAttachmentWithName:): attach rfc822 content as
1075	with base64 encoding, just as any other non-text data.
1076
10772012-04-30  Ludovic Marcotte  <lmarcotte@inverse.ca>
1078
1079	* SoObjects/SOGo/SOGoDomainDefaults.{h,m} - added
1080	-hideSystemEMail that honors SOGoHideSystemEMail.
1081	Right now, this variable is limited only to
1082	the calendar-user-address-set response but can/will be
1083	extended later.
1084
1085	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
1086	(-davCalendarUserAddressSet): Modified to honor
1087	SOGoHideSystemEMail domain default.
1088
1089	* SoObjects/Mailer/SOGoDraftObject.m (-lookupName:...):
1090	We prioritize the lookup of the "Drafts" folder over the
1091	"Sent" one if both are matching.
1092
1093	* SoObjects/Mailer/SOGoMailFolder.m: Same as above.
1094
1095
10962012-04-25  Jean Raby  <jraby@inverse.ca>
1097
1098	* SoObjects/Mailer/SOGoDraftObject.m
1099	(-updateFromLDIFRecord:): carry the c_info attribute
1100	in vcards through the x-sogo-contactinfo attribute.
1101	This functionality was lost a while ago.
1102	We used to use the NOTE attribute for this. From now on,
1103	the sogo-connector.autoComplete.commentAttribute have to be set to
1104	'unprocessed:x-sogo-contactinfo' instead of 'Notes'.
1105
1106
11072012-04-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1108
1109	* UI/PreferencesUI/UIxPreferences.m (_extractMainIdentity:): save
1110	the custom full name even when the configured custom email has the
1111	same value as the system value.
1112
1113	* SoObjects/SOGo/SOGoUser.m (-appendSystemMailAccount): append
1114	custom identity even though only the full name has a custom value.
1115
1116	* SoObjects/Mailer/SOGoDraftObject.m
1117	(-bodyPartForAttachmentWithName:): force conversion of rfc822
1118	content to quoted-printable, since it would otherwise risk passing
1119	8bit data via the "APPEND" command.
1120
11212012-04-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1122
1123	* UI/WebServerResources/SchedulerUI.js (updateCalendarStatus): if
1124	"event" is set, we set its returnValue to true, to avoid a bug
1125	occurring since the use of "clickEventWrapper".
1126	(resizeCalendarHeaderDIV): new function that resizes the all-day
1127	event containers progressively.
1128	(_drawCalendarAllDayEvents, _deleteCalendarEventBlocks): invoke
1129	the above.
1130
1131	* UI/WebServerResources/HTMLElement.js: get "HTMLCollection"
1132	and "NodeList" classes by class rather than by direct reference.
1133
1134	* UI/WebServerResources/generic.js (clickEventWrapper): pass the
1135	value of "this" to the invoked callback.
1136
11372012-04-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
1138
1139	* SOPE/GDLContentStore/GCSFolder.m (-writeContent:toName:baseVersion:):
1140	We now keep track of the saved version for all callers. Also updated
1141	all callers to reflect that change.
1142
1143	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:)
1144	Took some of the logic from SOGoContentObject's -PUTAction: to
1145	avoid etag mismatches.
1146
11472012-04-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
1148
1149    * SoObjects/Appointments/SOGoAppointmentObject.m: We now
1150	automatically add/remove attendees to recurrence exceptions
1151	when they are being added to the master event. Also
1152	fixed -PUTAction: so that we fetch the organizer of a recurrence
1153	exception when the master doesn't have a copy of it.
1154
1155	* SoObjects/Appointments/SOGoAppointmentOccurence.m: added
1156	-componentTag to avoid server crash.
1157
11582012-04-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1159
1160	* UI/WebServerResources/SchedulerUI.js (onCalendarReload): invoke
1161	changerCalendarDisplay when no web calendars are present...
1162
1163	* UI/WebServerResources/HTMLElement.js: enhanced both
1164	HTMLCollection and NodeList with the "Enumerable" interface.
1165
1166	* UI/WebServerResources/UIxPreferences.js (displayMailAccount):
1167	disable the "fullName" and "email" input fields of the first
1168	account only when SOGoMailCustomFromEnabled is NO.
1169
1170	* UI/PreferencesUI/UIxPreferences.m (_extractMainIdentity:): the
1171	custom values for "fullName" and "email" are now registered in the
1172	user defaults, if "email" is different from all the values
1173	returned by the user directory AND if SOGoMailCustomFromEnabled is
1174	YES.
1175
1176	* SoObjects/SOGo/SOGoUserDefaults.m (-setMailCustomFullName:)
1177	(-mailCustomFullName): new accessors for the new
1178	"SOGoMailCustomFullName" user default.
1179	(-setMailCustomEmail:, -mailCustomEmail): new accessors for the
1180	new "SOGoMailCustomEmail" user default.
1181
1182	* SoObjects/SOGo/SOGoDomainDefaults.m (-mailCustomFromEnabled):
1183	new getter for the "SOGoMailCustomFromEnabled" domain default.
1184
1185	* SoObjects/Mailer/SOGoDraftObject.m
1186	(-mimeHeaderMapWithHeaders:excluding:) take the new "replyTo"
1187	header into account.
1188
1189	* SoObjects/SOGo/SOGoUser.m (-_appendSystemMailAccount): specify
1190	the value of "SOGoMailReplyTo" in the "replyTo" field of each
1191	identity, if present.
1192	When "SOGoMailCustomFromEnabled" is YES and the user has set
1193	a value for "SOGoMailCustomEmail", a first identity is created and
1194	set at the first position in the list, based on that value and on
1195	"SOGoMailCustomFullName".
1196
1197	* SoObjects/SOGo/SOGoUserDefaults.m (-setMailReplyTo:)
1198	(-mailReplyTo:): accessors for the "SOGoMailReplyTo" user default.
1199
12002012-04-19  Ludovic Marcotte  <lmarcotte@inverse.ca>
1201
1202	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:)
1203	We now handle cases where the last attendee AND the organizer
1204	is removed from the event during a PUT action (happens when
1205	you delete the last attendee of an event with iCal). This used
1206	to crash sogod.
1207	* SoObjects/Appointments/SOGoAppointmentFolder.m (-importCalendar:)
1208	Fixed the import process of broken all-day events (#1055)
1209
12102012-04-19  Francis Lachapelle  <flachapelle@inverse.ca>
1211
1212	* SoObjects/Appointments/SOGoAppointmentFolder.m
1213	(-importCalendar:): associate occurrences of a repeating event to
1214	its master vcalendar to avoid duplicated events when importing a .ics.
1215
12162012-04-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1217
1218	* SoObjects/SOGo/SOGoParentFolder.m (-appendSubscribedSources):
1219	ensure the array set as values in the settings dicts are not nil
1220	prior to setting them.
1221
1222	* SoObjects/Appointments/SOGoAppointmentFolder.m
1223	(-fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:):
1224	fix the date condition for cycle record, by using c_cycleenddate
1225	instead of c_enddate.
1226
12272012-04-18  Ludovic Marcotte  <lmarcotte@inverse.ca>
1228
1229	* SoObjects/Appointments/SOGoAppointmentObject.m (-_handleResourcesConflicts: ...):
1230	We now handle recurring appointments by fetching the freebusy information for one full
1231	year from the date of the event. Also improved the conflict
1232	reporting messages.
1233
1234	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:):
1235	update the versit string in the request when updating the event, in
1236	case a resource auto-accepted the event
1237
1238	* SoObjects/SOGo/SOGoGCSFolder.m: renamed -subscribeUser:reallydo: to
1239	subscribeUserOrGroup:reallydo and we now handle group subscriptions.
1240	Refactored all callers.
1241
1242	* SoObjects/SOGo/SOGoParentFolder.m (-_appendSubscribedSource:): now returns a
1243	BOOL if the permission are still valid or not
1244
1245	* SoObjects/SOGo/SOGoParentFolder.m (-appendSubscribedSources): consumes the
1246	returned value from -_appendSubscribedSource: and cleans up SubscribedFolders
1247	and FolderDisplayNames accordingly in the user's settings.
1248
1249	* SoObjects/SOGo/SOGoUserManager.m (-_fillContactInfosForUser: ...): we now
1250	set the isGroup attribute as we need this for quick groups
1251	resolving.
1252
12532012-04-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1254
1255	* UI/WebServerResources/generic.js (showAuthenticationDialog): new
1256	dialog providing an interface for requesting a username and a
1257	password to acallback passed as parameter.
1258	(accessToSubscribedFolder): fixed method to return the proper url
1259	for folders owned by the active user.
1260
1261	* UI/WebServerResources/SchedulerUI.js (reloadWebCalendars): now
1262	invokes "reloadAction" on every web calendar foldar, in a chain of
1263	simultaneous requests.
1264	(reloadWebCalendar): new function invoking "reloadAction" on a
1265	single cal folder.
1266	(reloadWebCalendarCallback): callback for the above invocation
1267	that takes care of refreshing the views at the end of a refresh
1268	chain, if present, and when useful.
1269
1270	* UI/Scheduler/UIxCalFolderActions.m (reloadAction): new web
1271	method that applies only to SOGoWebAppointmentFolder instances and
1272	which returns a JSON representation of the result returned by
1273	-[SOGoWebAppointmentFolder loadWebCalendar]. This method replaces
1274	-[UIxCalMainActions -reloadWebCalendars].
1275	(setCredentialsAction): new web method acting as a proxy for
1276	-[SOGoWebAppointmentFolder setUsername:andPassword:].
1277
1278	* UI/WebServerResources/generic.js (clickEventWrapper): new
1279	function that returns a wrapper function for click callbacks which
1280	invokes "preventDefault" on the "event" parameter before it is
1281	passed to the real callback.
1282
1283	* UI/Scheduler/UIxCalMainActions.m
1284	(-reloadWebCalendarsAndRedirectAction): removed obsolete method.
1285	(-reloadWebCalendars): removed obsolete method.
1286
1287	* SoObjects/Appointments/SOGoAppointmentFolders.m
1288	(-newWebCalendarWithName:atURL:): perform sanity checks on the url
1289	parameter.
1290
1291	* SoObjects/Appointments/SOGoWebAppointmentFolder.m
1292	(-setUsername:andPassword:): new method that associate an
1293	encrypted login pair for authenticating to remove calendars.
1294	(-loadWebCalendar): rewrote method to make use of curl, thereby
1295	permitting HTTP authentication. A NSDictionary containing
1296	different informations about the connection is not returned,
1297	including the HTTP status and an error tag, when required.
1298
1299	* SoObjects/Appointments/SOGoAppointmentFolder.m
1300	(-importCalendar:): journals and freebusys are not
1301	supported.
1302
13032012-04-16  Jean Raby  <jraby@inverse.ca>
1304
1305	* SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m
1306	(-recurrenceRangesWithinCalendarDateRange:):
1307	Fix of by one error. (bug #1772)
1308
13092012-04-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1310
1311	* SoObjects/SOGo/NSString+Utilities.m (-encryptWithKey:)
1312	(-decryptWithKey:): new methods providing symmetric encryption of
1313	strings.
1314
1315	* Tests/Unit/SOGoTestRunner.m (-run): do not empty the pool after
1316	each test.
1317
13182012-04-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1319
1320	* SoObjects/Appointments/SOGoAppointmentFolder.m (-bareFetchFields: ...),
1321	(-fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:):
1322	restored c-style escaping of sql-style escaping of quote characters.
1323	(-davCalendarShowAlarms, setDavCalendarShowAlarms:): new proxy dav
1324	accessors for "showCalendarAlarms" and "setShowCalendarAlarms:".
1325
13262012-04-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1327
1328	* SoObjects/SOGo/SOGoGCSFolder.m (-componentSQLFilter): new
1329	overridable method that enables passing filters for
1330	toOneRelationshipKeys from subclasses.
1331
1332	* SoObjects/Appointments/SOGoAppointmentFolder.m
1333	(-davCalendarComponentSet): componentSet is now an ivar. Include
1334	VTODO only with showCalendarTasks returns YES.
1335	(-davResourceType): return vtodo-collection only when
1336	showCalendarTasks returns YES.
1337
1338	* UI/Scheduler/UIxCalListingActions.m
1339	(_fetchFields:forComponentOfType:): do not check for
1340	"showCalendarTasks" since it is now handled at the
1341	SOGoApopintmentFolder level.
1342
1343	* SoObjects/Appointments/SOGoAppointmentFolder.m
1344	(-bareFetchFields: ...,
1345	(-fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:):
1346	make use of a mutable array to define the global WHERE clause, by
1347	joining the elements with " AND ".
1348	(-additionalWebdavSyncFilters): don't include 'vtodo' components
1349	when -[self showCalendarTasks] returns NO.
1350
13512012-04-11  Francis Lachapelle  <flachapelle@inverse.ca>
1352
1353	* UI/WebServerResources/ContactsUI.js (onDocumentKeydown): don't
1354	trap keyboard input when inside a textarea.
1355
13562012-04-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1357
1358	* SoObjects/SOGo/NSString+Utilities.m (-objectFromJSONString):
1359	added a work-around for JSON strings that were escaped one too
1360	many time, in previous versions of sope-gdl1-xxx.
1361
13622012-04-04  Jean Raby  <jraby@inverse.ca>
1363
1364	* Added a new tool: 'sogo-tool expire-sessions'
1365		Along with the associated new cronjob, this allows
1366		user sessions expiration without a custom script.
1367
1368	* While there, sort tools in sogo-tool output
1369
13702012-04-03  Francis Lachapelle  <flachapelle@inverse.ca>
1371
1372	* Tools/SOGoToolRemoveDoubles.m (-removeDoublesFromFolder)
1373	(-amountOfFilledQuickFields): lowered the case of the
1374	telephonenumber table fieldname.
1375
1376	* OGoContentStore/OCSContactFieldExtractor.m
1377	(-extractQuickFieldsFromVCard): idem.
1378
13792012-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1380
1381	* OpenChange/MAPIStoreCalendarMessage.m (-save): remove comment if
1382	content is "\n".
1383
1384	* OpenChange/MAPIStoreTasksMessage.m (-save): do not reset fields
1385	that have not been passed in the properties array, since only
1386	RopDeleteProperties should remove them.
1387	Remove comment if content is "\n".
1388
1389	* OpenChange/MAPIStoreObject.m (-addPropertiesFromRow:): dates are
1390	now all converted to the user's timezone, even though it just
1391	inverts the problem we currently have.
1392
1393	* OpenChange/MAPIApplication.m (-init): utcTZ is now initialized
1394	here.
1395
1396	* OpenChange/MAPIStoreTypes.[hm]: new host module for utcTZ.
1397
1398	* OpenChange/MAPIStoreUserContext.m (-timeZone): new method that
1399	returns the timezone of an owner user.
1400
1401	* OpenChange/MAPIStoreObject.m (-ownerTimeZone): removed method,
1402	replaced with the one above.
1403
14042012-03-29  Francis Lachapelle  <flachapelle@inverse.ca>
1405
1406	* UI/WebServerResources/UIxPreferences.js (savePreferences): fixed
1407	validation of end date of vacation of message when not using ISO
1408	format (currently limited to French).
1409
1410	* UI/WebServerResources/ContactsUI.js (startDragging): create an
1411	overlapping safety block (div) to avoid possible selection of the
1412	underlying text.
1413
1414	* UI/WebServerResources/MailerUI.js (startDragging): idem.
1415
14162012-03-29  Francis Lachapelle  <flachapelle@inverse.ca>
1417
1418	* UI/WebServerResources/UIxPreferences.js (savePreferences): fixed
1419	validation of end date of vacation of message when not using ISO
1420	format (currently limited to French).
1421
1422	* UI/WebServerResources/ContactsUI.js (startDragging): create an
1423	overlapping safety block (div) to avoid possible selection of the
1424	underlying text.
1425
1426	* UI/WebServerResources/MailerUI.js (startDragging): idem.
1427
14282012-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1429
1430	* SoObjects/Contacts/SOGoFolder+CardDAV.m (_isValidFilter:):
1431	accept "email" as filter name.
1432	(_appendObject:withBaseURL:toREPORTResponse:): fixed the ordering
1433	of XML elements as the address*-data props where put outside of
1434	the <D:prop> tree.
1435
1436	* SoObjects/SOGo/LDAPSource.m (-allEntryIDs): take the _filter
1437	ivar into account.
1438
14392012-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1440
1441	* OpenChange/SOGoMAPIFSMessage.m
1442	(_readFileChangesDataWithDate:andInode:): use the inode number
1443	rather than the filesize as change indicator since a new file is
1444	created each time the dictionary is written to disk, thanks to the
1445	"atomically" flag.
1446	(-save): write the file atomically.
1447
1448	* SoObjects/Contacts/SOGoFolder+CardDAV.m (_isValidFilter:):
1449	accept "email" as filter name.
1450	(_appendObject:withBaseURL:toREPORTResponse:): fixed the ordering
1451	of XML elements as the address*-data props where put outside of
1452	the <D:prop> tree.
1453
1454	* SoObjects/SOGo/LDAPSource.m (-allEntryIDs): take the _filter
1455	ivar into account.
1456
14572012-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1458
1459	* SoObjects/Contacts/SOGoContactFolders.m
1460	(-lookupName:inContext:acquire:): overriden method that enables
1461	the lookup of hidden public sources with iOS devices.
1462
1463	* SoObjects/Contacts/SOGoContactLDIFEntry.m (-davAddressData): new
1464	getter similar to davCalendarData.
1465
1466	* SoObjects/Contacts/SOGoContactSourceFolder.m
1467	(-davAddressbookMultiget): new REPORT handler based on
1468	-[SOGoAppointmentFolder davCalendarMultiget].
1469
1470	* SoObjects/Contacts/SOGoUserFolder+Contacts.m
1471	(-davDirectoryGateway): new getter that returns the url to the
1472	first available directory source.
1473	(-davResourceType): declare resource as "directory" (carddav).
1474
14752012-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1476
1477	* SoObjects/Contacts/SOGoContactFolders.m
1478	(-lookupName:inContext:acquire:): overriden method that enables
1479	the lookup of hidden public sources with iOS devices.
1480
1481	* SoObjects/Contacts/SOGoContactLDIFEntry.m (-davAddressData): new
1482	getter similar to davCalendarData.
1483
1484	* SoObjects/Contacts/SOGoContactSourceFolder.m
1485	(-davAddressbookMultiget): new REPORT handler based on
1486	-[SOGoAppointmentFolder davCalendarMultiget].
1487
1488	* SoObjects/Contacts/SOGoUserFolder+Contacts.m
1489	(-davDirectoryGateway): new getter that returns the url to the
1490	first available directory source.
1491	(-davResourceType): declare resource as "directory" (carddav).
1492
14932012-03-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1494
1495	* OpenChange/MAPIStoreTasksMessage.m (-save): take PR_HTML as
1496	possible value for the COMMENT field, as as with
1497	MAPIStoreCalendarMessages.
1498
1499	* OpenChange/MAPIApplication.m (-init): removed hack pertaining to
1500	UnixSignalHandler since the class no longer exists.
1501
15022012-03-23  Francis Lachapelle  <flachapelle@inverse.ca>
1503
1504	* Tools/SOGoToolUserPreferences.m (-run): we now take the proper
1505	argument when setting the user defaults from the command-line.
1506
15072012-03-22  Francis Lachapelle  <flachapelle@inverse.ca>
1508
1509	* UI/MailerUI/UIxMailFolderActions.m (-emptyTrashAction:): we now
1510	unsubscribe from the folders found in the trash.
1511
15122012-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1513
1514	* OpenChange/MAPIStoreTasksMessage.m (-save):
1515	PidLidPercentComplete is a double, that we need to convert in
1516	order to obtain the proper value.
1517
15182012-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1519
1520	* SoObjects/SOGo/SOGoUserManager.m (_compactAndCompleteContacts:):
1521	if "mail" is an array, all values are added to "c_emails".
1522
1523	* SoObjects/Contacts/SOGoContactSourceFolder.m
1524	(_flattenedRecord:): if "mail" is an array, we only take the first
1525	value of it.
1526
1527	* SoObjects/Contacts/SOGoContactLDIFEntry.m (-simplifiedRecord):
1528	new record guaranteeing that all array values have been stripped
1529	and converted to strings.
1530
15312012-03-20  Francis Lachapelle  <flachapelle@inverse.ca>
1532
1533	* SoObjects/Mailer/SOGoMailObject+Draft.m
1534	(_contentForEditingFromKeys:): prefer the HTML part over the text
1535	part when composing HTML messages.
1536
15372012-03-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1538
1539	* SoObjects/SOGo/SOGoUserFolder.m (-davLastName, -davFirstName):
1540	quick and dirty implementation of those getters.
1541
1542	* OpenChange/MAPIStoreAppointmentWrapper.m (-_setupITIPContext):
1543	ensure method is uppercase.
1544
1545	* OpenChange/MAPIStoreCalendarMessage.m
1546	(-getPidLidAppointmentSequence:inMemCtx:): new getter.
1547	(-save): properly initialize CREATED, LAST-MODIFIED, DTSTAMP and
1548	SEQUENCE from MAPI properties.
1549
1550	* OpenChange/MAPIStoreAppointmentWrapper.m
1551	(-getPidLidAppointmentSequence:inMemCtx:): new getter.
1552
1553	* OpenChange/NSDate+MAPIStore.m (-isNever): new accessor for dates
1554	occurring in 4500.
1555
1556	* OpenChange/MAPIStoreTypes.m (MAPIChangeKeyGUIDCompare): NSData
1557	arguments passed as "id" due to the pickiness of some versions of
1558	gcc.
1559
15602012-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1561
1562	* Main/SOGo+DAV.m (_fillCollections:where:matches:inContext:):
1563	added bogosupport for
1564	"{http://calendarserver.org/ns/}email-address-set".
1565	(_principalCollectionsMatching:inContext:): relationship between
1566	search criteria is now and "OR" rathern than an "AND".
1567
1568	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
1569	(-davCalendarUserType, -davEmailAddressSet): new DAV accessors.
1570
1571	* OpenChange/MAPIStoreCalendarMessage.m (-save): check recipients
1572	even if PidLidAppointmentStateFlags is nil or 0, since all that
1573	matters is that the "recipients" dict be present in the properties
1574	dictionary.
1575
1576	* OpenChange/SOGoMAPIFSMessage.m (-init): init 2 new ivars:
1577	fileSize and lastModificationTime.
1578	(-properties): check the current file size and last modification
1579	time against cached values and reload the props file if anything
1580	changed.
1581	(-creationTime, -lastModificationTime): new return type: NSDate
1582	instead of NSCalendarDate.
1583
15842012-03-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1585
1586	* OpenChange/MAPIStoreGCSFolder.m
1587	(-predecessorChangeListForMessageWithKey:): same as below.
1588	(-setChangeKey:forMessageWithKey:): synchronise the version cache
1589	if the message entry is not found.
1590	(-updateVersionsForMessageWithKey:withChangeKey:): new method,
1591	common to all GCS messages, that updates the folder cache and
1592	insert the PidTagChangeKey provided by the client during the save
1593	operations.
1594
1595	* OpenChange/MAPIStoreMailFolder.m
1596	(-predecessorChangeListForMessageWithKey:): the returned list must
1597	be binary ordered by GUID (as specified in the SPEC). We now do so
1598	using the new function below.
1599	(-getPidTagMessageClass:inMemCtx:): removed method, as folders are
1600	not supposed to return a PidTagMessageClass attribute.
1601
1602	* OpenChange/MAPIStoreTypes.m (MAPICNCompare): added as void *
1603	parameter so that the function can be used as a comparator
1604	function in NSArray sort methods.
1605	(MAPIChangeKeyGUIDCompare): new comparator function to compare the
1606	GUID of two change key streams.
1607
1608	* OpenChange/MAPIStoreGCSMessage.m (-updateVersions): new proxy
1609	method for -[MAPIStoreGCSFolder
1610	updateVersionsForMessageWithKey:withChangeKey:].
1611
1612	* OpenChange/MAPIStoreGCSBaseContext.m
1613	(+createRootSecondaryFolderWithFID:andName:forUser:): setup the
1614	userContext in the MAPIApp object.
1615
1616	* OpenChange/MAPIStoreMailContext.m
1617	(+createRootSecondaryFolderWithFID:andName:forUser:): setup the
1618	userContext in the MAPIApp object.
1619
1620	* OpenChange/MAPIStoreContactsFolder.m
1621	(-getPidTagDefaultPostMessageClass:inMemCtx:): new getter.
1622
1623	* OpenChange/MAPIStoreCalendarFolder.m
1624	(-getPidTagDefaultPostMessageClass:inMemCtx:): new getter.
1625
1626	* OpenChange/MAPIStoreTasksFolder.m
1627	(-getPidTagDefaultPostMessageClass:inMemCtx:): new getter.
1628
1629	* OpenChange/MAPIStoreFolder.m
1630	(-getPidTagDefaultPostMessageClass:inMemCtx:): new getter.
1631
1632	* OpenChange/MAPIStoreMessage.m
1633	(-getPidTagMessageStatus:inMemCtx:): removed useless getter.
1634
1635	* OpenChange/MAPIStoreSOGo.m (sogo_backend_init): check for
1636	"SOGoDebugLeaks" in the user defaults and activate GSDebug
1637	allocation utilities.
1638
1639	* OpenChange/NSData+MAPIStore.m (+dataWithChangeKeyGUID:andCnt:):
1640	new method replacing _dataFromChangeKeyGUID:andCnt: from
1641	MAPIStore{GCS,Mail}Folder.
1642
16432012-03-16  Jean Raby  <jraby@inverse.ca>
1644
1645	* sogo.spec debian/sogo.postint: upon installation, update timestamp
1646	on WebServerResources/* to let the webserver know the files changed.
1647	Should fix issues where browsers would use a locally cached version
1648	of a resource when the sogo package have just been upgraded.
1649
16502012-03-15  Francis Lachapelle  <flachapelle@inverse.ca>
1651
1652	* UI/WebServerResources/generic.js (onPreferencesClick): don't
1653	allow the user to open the preferences window multiple times.
1654
1655	* UI/WebServerResources/SOGoDragHandles.js (enableRightSafety):
1656	new method to display a "safety" block on top of the right block
1657	when dragging the handle. This fixes a problem when the right
1658	block contains an instance of CKEditor.
1659
16602012-03-14  Francis Lachapelle  <flachapelle@inverse.ca>
1661
1662	* UI/MailerUI/UIxMailFolderActions.m (-deleteAction): we now
1663	unconditionaly unsubscribe from the folder and subscribe to the
1664	folder moved to the trash.
1665
1666	* SoObjects/Mailer/SOGoMailFolder.m (-renameTo): idem.
1667
1668	* UI/WebServerResources/UIxPreferences.js (focusCKEditor)
1669	(hideSignature): new functions to wait until the CKEditor is ready
1670	before performing certain actions. Fixes a problem with IE.
1671
1672	* UI/WebServerResources/SOGoTimePicker.js (position): new method
1673	to be able to recompute the position of the widget.
1674
1675	* UI/WebServerResources/UIxAppointmentEditor.js
1676	(refreshAttendees): when changing the attendees, we recompute the
1677	position of the time pickers because the attendees link could
1678	shift up or down the time fields.
1679
16802012-03-13  Francis Lachapelle  <flachapelle@inverse.ca>
1681
1682	* UI/WebServerResources/UIxFilterEditor.js (savePreferences):
1683	only save the filters if there's at least one rule and one action defined.
1684
1685	* UI/WebServerResources/ContactsUI.js (configureDraggables):
1686	increased the delay before starting drag and drop.
1687
1688	* UI/WebServerResources/MailerUI.js (configureDraggables): idem.
1689
1690	* UI/WebServerResources/UIxAclEditor.js (addUser): fixed
1691	positioning of new user.
1692
16932012-03-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1694
1695	* OpenChange/MAPIStoreCalendarFolder.m
1696	(-getPidTagDefaultPostMessageClass:inMemCtx:): new getter.
1697
1698	* OpenChange/MAPIStoreFolder.m
1699	(_modifyPermissionEntryForUser:withRoles:isAddition:withACLFolder:):
1700	skip any modification when user is nil.
1701	(_usernameFromEntryId:): when the bytes array is nil or is empty,
1702	we return a nil username.
1703	(-modifyPermissions:withCount:andFlags:): ignore the presence of
1704	certain fields but not others depending on the requested
1705	modification.
1706
17072012-03-12  Francis Lachapelle  <flachapelle@inverse.ca>
1708
1709	* SoObjects/SOGo/WORequest+SOGo.m (-isIPhoneAddressBookApp): catch
1710	the user agent of iOS 5.0.1 on iPad.
1711
17122012-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1713
1714	* OpenChange/MAPIStoreGCSFolder.m (-lastMessageModificationTime):
1715	force a synchronisation from here to ensure that the cache is
1716	up-to-date.
1717
1718	* OpenChange/MAPIStoreTypes.m (_reverseCN): fixed used of ull
1719	constants on 32 bit platforms.
1720
1721	* OpenChange/MAPIStoreGCSFolder.m (-componentQualifier): now
1722	provided by the parent class itself.
1723	(-contentComponentQualifier): new method that returns a qualifier
1724	that translated to "c_content like '%BEGIN:XXX%'". This is a hack
1725	to work-around the fact that calendar folders may content both
1726	vevent and vtodo and that c_component, being part of the quick
1727	table, is no longer available when a record is deleted.
1728	(-synchroniseCache): update version values for deleted records
1729	too, by taking into account the fact that their c_version value
1730	might still be 0. Make use of contentComponentQualifier above.
1731	Remove the modified records from the SOGoGCSFolder cache.
1732	(-getDeletedKeysFromChangeNumber:andCN:inTableType:): wander the
1733	list of deleted records and no longer increase the change number,
1734	as this is now done from "synchroniseCache". Also, handle the case
1735	were deleted records might already have been reported by comparing
1736	their change number to the one provided as parameter. The
1737	resulting change number is now guaranteed to be the highest one.
1738	(-component): new subclassable method that returns a string
1739	matching the folder's handled component.
1740
1741	* OpenChange/MAPIStoreFolder.m
1742	(-getPidTagLocalCommitTimeMax:inMemCtx:): returns
1743	MAPISTORE_ERR_NOT_FOUND if the resulting date is nil.
1744
1745	* OpenChange/MAPIStoreGCSMessage.m
1746	(-getPidTagPredecessorChangeList:inMemCtx:): when the list is
1747	missing, request a synchronisation from the container as the
1748	message might now have been synchronised yet...
1749
1750	* OpenChange/MAPIStoreTypes.m (MAPICNCompare): new function that
1751	returns an NSComparisonResult for two change numbers (reverse
1752	format).
1753
17542012-03-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1755
1756	* OpenChange/MAPIStoreCalendarMessage.m
1757	(-getPidLidAppointmentMessageClass:inMemCtx:): returns "IPM.Appointment".
1758	(-getPidLidSideEffects:inMemCtx:): returns the value specified in
1759	OXOCAL, section 2.2.2.2.
1760	(_fixupAppointmentObjectWithUID:): renamed method and made more
1761	generic, in order to handle the case where the response record has
1762	already been deleted.
1763	(-save): handle organizer and attendees more in compliance with
1764	the spec, in order to avoid ending up with an empty event when an
1765	invitation is being replied to. Of course, the documentation
1766	happened to be inexact with regardes to the value of
1767	"PidTagRecipientTrackStatus", which can be 5 even though the user
1768	replied with another value... Also, lowered the priority of
1769	SOGo-specific hacks for setting the organizer.
1770
17712012-03-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1772
1773	* OpenChange/MAPIStoreMailVolatileMessage.m (-submitWithFlags:):
1774	skip any message that is not of class "IPM.Note", in order to
1775	avoid sending invitations or responses.
1776
1777	* SoObjects/Mailer/SOGoMailFolder.m (-renameTo:): reset the
1778	imap4URL to nil and change the nameInContainer after a successful
1779	operation.
1780
1781	* OpenChange/MAPIStoreFolder.m
1782	(-getTable:andRowCount:tableType:andHandleId:): if the current
1783	user is not the owner of the folder, the permissions table cannot
1784	be open and MAPISTORE_ERR_DENIED is now returned.
1785
1786	* SoObjects/Contacts/NGVCard+SOGo.m
1787	(_setupEmailFieldsInLDIFRecord:): the value of card elements were
1788	not properly extracted when no email field were of type "home" or
1789	"work".
1790
17912012-03-08  Francis Lachapelle  <flachapelle@inverse.ca>
1792
1793	* UI/WebServerResources/generic.js (getTopWindow): extend the
1794	attributes of document.body before calling "hasClassName" to fix
1795	an error with IE9.
1796
17972012-03-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1798
1799	* OpenChange/MAPIStoreFolder.m: commented out key cache ivars
1800	(temporarily).
1801
1802	* OpenChange/MAPIStoreContext.m (-getRootFolder:inMemCtx:): do not
1803	store the looked up folders when they are not descendants of
1804	SOGoObject. Return MAPISTORE_ERR_NOT_FOUND when the looked up
1805	folder is owner by the current user and MAPISTORE_ERR_DENIED
1806	otherwise.
1807
1808	* OpenChange/MAPIStoreGCSFolder.m (-synchroniseCache): ensure that
1809	any record that are marked as updated are removed from the record
1810	cache of the corresponding SOGoGCSFolder instance.
1811
1812	* OpenChange/MAPIStoreFolder.m (-getPidTagSubFolders:inMemCtx:):
1813	invoke [self folderKeys] rather than the corresponding ivar.
1814
1815	* OpenChange/MAPIStoreTypes.m (NSObjectFromMAPISPropValue)
1816	(NSObjectFromSPropValue): treat PT_ERROR just as PT_LONG.
1817
18182012-03-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1819
1820	* SoObjects/Mailer/SOGoMailFolder.m
1821	(-archiveUIDs:inArchiveNamed:inContext:): output filename is now
1822	escaped without its extension.
1823
1824	* SoObjects/Contacts/NGVCard+SOGo.m
1825	(-_setupEmailFieldsInLDIFRecord:): simplified code and fixed a bug
1826	where the home mail would be taken for both first and second email
1827	fields when no work mail was present.
1828
18292012-03-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1830
1831	* OpenChange/MAPIStoreAppointmentWrapper.m,,
1832	OpenChange/MAPIStoreAttachment.m,
1833	OpenChange/MAPIStoreCalendarAttachment.m,
1834	OpenChange/MAPIStoreCalendarMessage.m,
1835	OpenChange/MAPIStoreContactsAttachment.m,
1836	OpenChange/MAPIStoreContactsMessage.m,
1837	OpenChange/MAPIStoreFAIMessage.m,
1838	OpenChange/MAPIStoreFSMessageTable.m,
1839	OpenChange/MAPIStoreFolder.m, OpenChange/MAPIStoreFolderTable.m,
1840	OpenChange/MAPIStoreGCSFolder.m, OpenChange/MAPIStoreGCSMessage.m,
1841	OpenChange/MAPIStoreGCSMessageTable.m,
1842	OpenChange/MAPIStoreMailAttachment.m,
1843	OpenChange/MAPIStoreMailFolder.m,
1844	OpenChange/MAPIStoreMailMessage.m,
1845	OpenChange/MAPIStoreMailMessageTable.m,
1846	OpenChange/MAPIStoreMessage.m, OpenChange/MAPIStoreNotesMessage.m,
1847	OpenChange/MAPIStoreObject.m,
1848	OpenChange/MAPIStorePermissionsTable.m,
1849	OpenChange/MAPIStoreTasksMessage.m,
1850	OpenChange/MAPIStoreVolatileMessage.m: updated name of getters to
1851	reflect the new nomenclature.
1852
1853	* OpenChange/NSArray+MAPIStore.[hm]: updated to new name of
1854	handled structs.
1855
1856	* OpenChange/gen-property-selectors.py: adapted for new getters
1857	name, based on new property names. Added all new clashing
1858	properties to bannedProps.
1859
18602012-03-02  Jean Raby  <jraby@inverse.ca>
1861
1862	* Scripts/sogo-backup.sh: new script to automate backups.
1863	Updated sogo.cron to include a commented out entry for sogo-backup.sh
1864	Include updates.php in the packages
1865
18662012-03-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1867
1868	* SoObjects/SOGo/LDAPSource.m (_convertRecordToLDAPAttributes):
1869	make sure no field get listed twice in the list of valid field
1870	names by using "removeDoubles".
1871	(_makeLDAPChanges): don't bother checking whether the removed
1872	attributes are strings.
1873
1874	* SoObjects/SOGo/NSArray+Utilities.m (-[NSMutableArray
1875	removeDoubles]): new method removing doublons.
1876
18772012-03-01  Francis Lachapelle  <flachapelle@inverse.ca>
1878
1879	* UI/WebServerResources/ContactsUI.js (appendAddressBook): assume
1880	that lists can be created in the new addressbook.
1881
18822012-02-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1883
1884	* OpenChange/MAPIStoreMailFolder.m
1885	(-moveCopyMessagesWithMIDs:andCount:fromFolder:withMIDs:andChangeKeys:wantCopy:):
1886	we sync the version cache with the folder in order to update the
1887	target message change keys, which was causing versioning issues
1888	with Outlook 2010.
1889
1890	* OpenChange/gen-property-selectors.py: bannedProps is now an
1891	array instead of a dict of "True" values.
1892	Added "PrOabContainerGuid" to bannedProps.
1893
18942012-02-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1895
1896	* OpenChange/MAPIStoreUserContext.m (-rootFolders:):
1897	-[NGImap4Connection enableExtensions:] now takes an array of
1898	strings rather than a single string argument.
1899
19002012-02-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1901
1902	* SoObjects/Mailer/SOGoMailFolder.m: ensure the imap connection is
1903	available before performing certain operations, otherwise return
1904	an exception. This only applies on methods that return an
1905	exception, others were left untouched.
1906
19072012-02-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1908
1909	* OpenChange/MAPIStoreMailContext.m
1910	(+listContextsForUser:withTDBIndexing:inMemCtx:): added back
1911	"trashName".
1912
1913	* SoObjects/Appointments/SOGoCalendarComponent.m
1914	(-sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:withType:):
1915	added a "msgType" parameter that is added as value to the new
1916	"x-sogo-message-type" header.
1917	(-sendIMIPReplyForEvent:from:to:): added a "x-sogo-message-type"
1918	to the headers.
1919
1920	* OpenChange/MAPIStoreMailContext.m
1921	(+listContextForUser:withTDBIndexing:inMemCtx:): make sure special
1922	folders have all the "folder" prefixes appended to their list of
1923	names (for nested folders).
1924
1925	* OpenChange/MAPIStoreContext.m
1926	(+createRootFolder:withFID:andName:forUser:withRole:): when the
1927	creation of a folder fails in the proper contact, fallback on the
1928	fallback context.
1929
1930	* SoObjects/Mailer/SOGoMailAccount.m
1931	(-toManyRelationshipKeysWithNamespaces:): for some reason, we were
1932	explicitly returning the drafts folder name in the batch whether
1933	the corresponding folder exists or not, which is useless and
1934	wrong since the folder in question might actually be a child of
1935	another folder.
1936
1937	* OpenChange/MAPIStoreContext.m (-init): restored "containersBag"
1938	mechanism where root context folders that are deeper than the
1939	first level of their hierarchy needs to have their parent folders
1940	retained.
1941
19422012-02-23  Jean Raby   <jraby@inverse.ca>
1943
1944	* debian/rules: add a symlink to let gdb find debugging symbols
1945  for libSOGo on debian/ubuntu. (gdb bug #9538)
1946
19472012-02-22  Francis Lachapelle  <flachapelle@inverse.ca>
1948
1949	* SoObjects/SOGo/SOGoUserManager.m
1950	(-authenticationSourceIDsInDomain:): when looking for a specific
1951	domain, also return sources that are not associated to a domain.
1952
1953	* SoObjects/SOGo/SOGoSource.h
1954	(-lookupContactEntryWithUIDorEmail:inDomain:): changed this method
1955	of the protocol to specify a domain.
1956	(-fetchContactsMatching:inDomain:): idem.
1957
1958	* SoObjects/Contacts/SOGoContactFolder.h
1959	(-lookupContactsWithFilter:onCriteria:sortBy:ordering:inDomain:):
1960	changed this method of the protocol to specify a domain.
1961
1962	* UI/WebServerResources/UIxAclEditor.js (addUser): fixed case when
1963	both canSubscribeUsers and isPublicAccessEnabled are disabled.
1964
1965	* SoObjects/SOGo/SQLSource.m
1966	(-_lookupContactEntry:considerEmail:inDomain:): if the configuration
1967	parameter DomainFieldName is defined for the source, set the user
1968	domain to the value of this field.
1969	(-fetchContactsMatching:inDomain:): when the configuration parameter
1970	DomainField is defined, limit the results to the entries matching
1971	the specified domain.
1972
1973	* SoObjects/SOGo/SOGoUserManager.m (-sourceIDsInDomain): if the
1974	source is not associated to a domain, set it to the requested
1975	domain. It will be used by sources with dynamic domain assignation.
1976
19772012-02-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1978
1979	* SoObjects/SOGo/SQLSource.m (_lookupContactEntry:considerEmail:):
1980	make sure the value of column pointer to by _kindField is not nil,
1981	nor an NSNull instance before treating it like a string.
1982	Use the value of "_imapHostField", when available, to map the
1983	"c_imaphostname" value of the contact/user record.
1984	(-init): new "_imapHostField" ivar, holder of the value of
1985	IMAPHostFieldName of the source configuration dictionary.
1986
19872012-02-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
1988
1989	* SoObjects/SOGo/SOGoSQLUserProfile.m (-fetchJSONProfileFromDB):
1990	removed an escaping hack for Oracle that should no longer be
1991	required after the recent fixes in the Oracle adaptor, and which
1992	was causing bad unescaping of double-escaped backslashes.
1993
1994	* Tests/Unit/TestSBJsonParser.m (-test_parseJSONString): added a
1995	line for escaped characters.
1996
1997	* SoObjects/Appointments/SOGoAppointmentFolders.m
1998	(-davEventsDefaultClassification,)
1999	(setDavEventsDefaultClassification:)
2000	(-davTasksDefaultClassification)
2001	(-setDavTasksDefaultClassification:): new DAV accessors for the
2002	default classification preferences.
2003
2004	* Tests/Integration/test-default-classification.py: new test
2005	module for setting/getting defaults classification preferences.
2006
20072012-02-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2008
2009	* UI/Scheduler/UIxComponentEditor.m (-setComponent:): fetch
2010	default classification from user defauts.
2011
2012	* UI/PreferencesUI/UIxPreferences.m
2013	(-calendarClassificationsList): new getter for the list of
2014	classifications.
2015	(-itemClassificationText): new i81n getter.
2016	(-setEventsDefaultClassification:, -eventsDefaultClassification)
2017	(-setTasksDefaultClassification:, -tasksDefaultClassification):
2018	new accessors.
2019
2020	* SoObjects/SOGo/SOGoUserDefaults.m
2021	(-setCalendarEventsDefaultClassification:)
2022	(-calendarEventsDefaultClassification)
2023	(-setCalendarTasksDefaultClassification:)
2024	(-calendarTasksDefaultClassification): new accessors related to
2025	the user-configured default classification of calendar components.
2026
2027	* UI/Scheduler/UIxComponentEditor.m: s/privacy/classification/g,
2028	which is a better description for the "CLASS" attribute.
2029
20302012-02-20  Francis Lachapelle  <flachapelle@inverse.ca>
2031
2032	* UI/WebServerResources/UIxMailEditor.js (onWindowResize): we now
2033	make use of the ckeditor javascript api to reszie the container.
2034
20352012-02-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2036
2037	* OpenChange/MAPIStoreGCSFolder.m (-setDisplayName:): new method
2038	that intercept the setting of PR_DISPLAY_NAME_UNICODE following
2039	the mechanism described below.
2040	(-getPrDisplayName:inMemCtx): overriden method.
2041
2042	* OpenChange/MAPIStoreGCSBaseContext.m (+folderNameSuffix): new
2043	method that returns an optional suffix to differentiate between
2044	SOGo folders that are common to multiple Outlook folders, in
2045	particular for Calendar and Tasks folder.
2046	(+getFolderDisplayName:): new utility method that returns a
2047	display name with the above suffix added properly.
2048
2049	* OpenChange/MAPIStoreObject.m (-setMAPIRetainCount)
2050	(-retainCount): removed accessors as well as the corresponding
2051	"mapiRetainCount" ivar as this was part of an unused feature.
2052
20532012-02-16  Francis Lachapelle  <flachapelle@inverse.ca>
2054
2055	* UI/WebServerResources/UIxAttendeesEditor.js (checkAttendee):
2056	stop observing events on input field before removing the row,
2057	otherwise the blur event is triggered and generates an error.
2058
20592012-02-14  Francis Lachapelle  <flachapelle@inverse.ca>
2060
2061	* UI/WebServerResources/ContactsUI.js (contactsListCallback): when
2062	restoring selection after the folder refresh, call "selectElement"
2063	on each row. This fixes the contacts selection retrieval when using the
2064	contextual menu.
2065
20662012-02-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2067
2068	* SoObjects/SOGo/SOGoUserManager.m (_compactAndCompleteContacts:):
2069	we make sure that "source" is not nil before assigning it to the
2070	compact record.
2071
2072	* SoObjects/SOGo/SQLSource.m (_lookupContactEntry:considerEmail:):
2073	assign self as value for "source" in the returned record.
2074	(-fetchContactsMatching): same as above.
2075
2076	* SoObjects/SOGo/SOGoSQLUserProfile.m (_sqlJsonRepresentation:):
2077	removed obsolete method.
2078	(-storeJSONProfileInDB:): we now properly escape the stored value
2079	via the adaptor methods and by using a hacking EOAttribute
2080	instance (FIXME).
2081
2082	* OpenChange/MAPIStoreMailFolder.m (-ensureFolderExists): new
2083	method that attempts to create a folder when it does not exists
2084	and returns NO if that creation failed or YES in any other case.
2085	(-createFolder:withFID:andKey:): rc was never initialized when in
2086	success code.
2087	(-messageKeysMatchingQualifier:andSortOrderings:)
2088	(-folderKeysMatchingQualifier:andSortOrderings:)
2089	(-permissionEntries): invoke "ensureFolderExists" prior to any
2090	operation.
2091
2092	* OpenChange/MAPIStoreContext.m
2093	(+createRootFolder:withFID:andName:forUser:withRole:): removed the
2094	"andTDBIndexing:" argument.
2095	(+createRootSecondaryFolderWithFID:andName:forUser:): same as
2096	above.
2097
2098	* OpenChange/MAPIStoreCalendarMessage.m
2099	(-subscriberCanReadMessage): returns YES when the current role is
2100	ComponentDAndTViewer too.
2101
21022012-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2103
2104	* UI/WebServerResources/JavascriptAPIExtensions.js
2105	(String.asCSSIdentifier): escape the "+" character as its going to
2106	be used in a regexp.
2107
21082012-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2109
2110	* UI/Contacts/UIxContactView.m (-photoURL, -hasPhoto): copied code
2111	from UIxContactEditor, thereby replacing "photosURL".
2112
21132012-02-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2114
2115	* UI/MailPartViewers/UIxMailPartHTMLViewer.m (+initialize): added
2116	all simple tag to "VoidTags", based on list from
2117	http://www.w3.org/TR/html4/index/elements.html.
2118
2119	* UI/WebServerResources/JavascriptAPIExtensions.js
2120	(String.asCSSIdentifier): same as below.
2121
2122	* SoObjects/SOGo/NSString+Utilities.m (-setupCSSEscaping): add
2123	"_P_" as escaping sequence for "+".
2124
2125	* UI/MailPartViewers/UIxMailPartHTMLViewer.m (+initialize): added
2126	all simple tag to "VoidTags", based on list from
2127	http://www.w3.org/TR/html4/index/elements.html.
2128
21292012-02-10  Francis Lachapelle  <flachapelle@inverse.ca>
2130
2131	* UI/WebServerResources/generic.js (openMailTo): recipients are
2132	now a JSON string (see commit of February 2nd).
2133
2134	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
2135	(-startElement:namespace:rawName:attributes:): we should not add
2136	end tags to void tags (ex: <br>).
2137
21382012-02-08  Francis Lachapelle  <flachapelle@inverse.ca>
2139
2140	* SoObjects/SOGo/SOGoGCSFolder.m (+webdavAclManager): must include
2141	"write" in the "current-user-privilege-set" so the latest version
2142	of AddressBook.app (bundled with 10.7.3) knows the personal
2143	addressbook is writable by the owner.
2144
2145	* UI/WebServerResources/UIxAttendeesEditor.js
2146	(performSearchCallback): set the uid parameter to null instead of
2147	an empty string when the returned contact has no uid (ie, it comes
2148	from a personal addressbook).
2149
21502012-02-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2151
2152	* SoObjects/SOGo/LDAPSource.m: escape built DNs using the new
2153	-[NSString escapedForLDAPDN] method.
2154
21552012-02-03  Francis Lachapelle  <flachapelle@inverse.ca>
2156
2157	* UI/WebServerResources/UIxMailEditor.js (onRemoveAttachments):
2158	instead of extracting the filename from the text nodes under the
2159	list element, we now use the title attribute. This fixes an issue
2160	with IE that would append an extra space to the filename.
2161
21622012-02-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2163
2164	* OpenChange/MAPIStoreFolderTable.m
2165	(-evaluatePropertyRestriction:intoQualifier:): overriden method to
2166	always return true for restrictions on PR_CHANGE_NUM, in order to
2167	help the fxics mechanism.
2168
2169	* OpenChange/MAPIStoreFolder.m (-deleteFolder): cleanup the caches
2170	in order to let the folder disappear.
2171
2172	* OpenChange/MAPIStoreSOGo.m (sogo_backend_create_root_folder):
2173	new backend method.
2174
2175	* OpenChange/MAPIStoreFolder.m (-createFolder:withFID:andKey:):
2176	modified method to return a enum mapistore_error, in order to
2177	better determine of the failures that occur.
2178
2179	* OpenChange/MAPIStoreMailFolder.m (-deleteFolder): overriden method.
2180
2181	* SoObjects/Mailer/SOGoMailFolder.m (-exists): new method that
2182	returns whether an IMAP folder exists or not yet.
2183
21842012-02-02  Francis Lachapelle  <flachapelle@inverse.ca>
2185
2186	* UI/MailerUI/UIxMailMainFrame.m (-composeAction): recipient
2187	addresses are now passed as a JSON-formatted string.
2188
2189	* UI/MailerUI/UIxMailAccountActions.m (-composeAction): the
2190	received "mailto" parameter is now a JSON-formatted string; we
2191	parse it accordingly.
2192
21932012-02-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2194
2195	* OpenChange/MAPIStoreUserContext.m (-destroy): dont't release
2196	"username" as it is not initially retained.
2197	(+userContextWithUsername:andTDBIndexing:): the resulting instance
2198	is cached in the table from here instead.
2199
2200	* OpenChange/MAPIStoreTable.m (-destroyHandle:): skih operation if
2201	the handle parameter is 0.
2202
2203	* OpenChange/SOGoMAPIFSMessage.m (-delete): returns the exception
2204	rather than raising it.
2205
2206	* OpenChange/SOGoMAPIFSFolder.m (-delete): new method that removes
2207	the directory from the filesystem.
2208
2209	* OpenChange/MAPIStoreGCSFolder.m (-deleteFolder): overriden method.
2210
2211	* OpenChange/MAPIStoreFolder.m (-deleteFolder): implemented method.
2212
2213	* SoObjects/SOGo/SOGoParentFolder.m (-removeSubFolder): new method
2214	that removes a subfolder entry from the folder cache.
2215
2216	* OpenChange/MAPIApplication.m (-setUserContext:): do not retain
2217	the user context.
2218
22192012-02-01  Francis Lachapelle  <flachapelle@inverse.ca>
2220
2221	* UI/WebServerResources/UIxCalUserRightsEditor.js (onUpdateACL):
2222	added some serious warnings when giving access rights to any
2223	authenticated users or public access.
2224
2225	* UI/WebServerResources/UIxMailUserRightsEditor.js (onUpdateACL): idem.
2226
2227	* UI/WebServerResources/UIxContactsUserRightsEditor.js (onUpdateACL): idem.
2228
2229	* UI/Common/UIxUserRightsEditor.m (-folderName): new method that
2230	returns the folder display name.
2231	(-userDisplayName): now also return the names of anonymous and
2232	authenticated users.
2233
22342012-01-31  Francis Lachapelle  <flachapelle@inverse.ca>
2235
2236	* SoObjects/SOGo/WOResourceManager+SOGo.m
2237	(-pathToLocaleForLanguageNamed:): if the language has a CamelCase
2238	form, add the first part to the lookup languages.
2239
22402012-01-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2241
2242	* OpenChange/MAPIStoreMailContext.m
2243	(+listContextsForUser:withTDBIndexing:inMemCtx:): now returns
2244	secondary folders.
2245	(+[MAPIStoreOutboxContext
2246	listContextsForUser:withTDBIndexing:inMemCtx:]): overridden method
2247	in outbox-specific class.
2248
22492012-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2250
2251	* OpenChange/MAPIStoreMailFolder.m (-addProperties): overriden
2252	method in order to intercept rename operations.
2253	(-initWithSOGoObject:inContainer:): removed obsolete method.
2254
2255	* OpenChange/MAPIStoreGCSFolder.m (-addProperties): overriden
2256	method in order to intercept rename operations.
2257
2258	* SoObjects/Mailer/SOGoMailFolder.m (-renameTo:): new method,
2259	implementing most of the code from [UIxMailFolderActions
2260	renameFolderAction].
2261
2262	* OpenChange/MAPIStoreFallbackContext.m
2263	(+listContextsForUser:withTDBIndexing:inMemCtx:): now returns the
2264	fallback subfolders as secondary contexts (tmp hack).
2265
2266	* OpenChange/MAPIStoreUserContext.m (-rootFolders): new method
2267	replacing the "...root" methods in way that can match the
2268	MAPIModuleName.
2269
2270	* OpenChange/MAPIStoreGCSBaseContext.m
2271	(+listContextsForUser:inMemCtx:): centralized code for all GCS
2272	classes.
2273
22742012-01-30  Francis Lachapelle  <flachapelle@inverse.ca>
2275
2276	* UI/WebServerResources/UIxCalUserRightsEditor.js (onUpdateACL):
2277	ask confirmation when giving access to all authenticated users or
2278	when giving public access.
2279
2280	* UI/WebServerResources/UIxMailUserRightsEditor.js (onUpdateACL): idem.
2281
2282	* UI/WebServerResources/UIxContactsUserRightsEditor.js (onUpdateACL): idem.
2283
2284	* UI/WebServerResources/SchedulerUI.js (onViewEventCallback):
2285	moved start/end time just under the event name.
2286
2287	* UI/WebServerResources/generic.js (showConfirmDialog): this
2288	function now accepts two additional arguments to change the
2289	default "yes" and "no" buttons.
2290
22912012-01-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2292
2293	* OpenChange/MAPIStoreMailContext.[hm]: removed
2294	"MAPIStoreInboxContext", "MAPIStoreSentItemsContext",
2295	and child folders."MAPIStoreDraftsContext" and
2296	"MAPIStoreOutboxContext" which have made obsolete by the new
2297	provisioning and instantiation mechanisms.
2298
2299	* OpenChange/MAPIStoreContext.m (-woContext:, -mapping)
2300	(-authenticator): those methods are now part of
2301	MAPIStoreUserContext.
2302	(-setupBaseFolder:): removed method, obsoleted by those below.
2303	(-getRootFolder:withFID:): the "root folder" is now instantiated
2304	by lookups from the root folder provided by the user context and
2305	the chain of folders listed in the context url path.
2306	(-MAPIStoreFolderClass): new method returning the Class object
2307	representing the context's class of objects.
2308	(-rootSOGoFolder): new method that returns the proper root folder
2309	depending on the context's class of objects.
2310
2311	* OpenChange/MAPIStoreFolder.m (-initWithURL:inContext:): all
2312	folders are now instantiated the same way since root objects are
2313	now stored in the MAPIStoreUserContext instancesB.
2314	(-setContext:): new setter to provide a reference to the folder's
2315	mapistore context instance from the topmost parent.
2316	(-setupVersionsMessage:): new helper method invoked during the
2317	folder instantiations, from the moment its parent context has been
2318	made available, which does not occur at the same moment for parent
2319	and child folders...
2320
2321	* OpenChange/MAPIApplication.m (-init): removed the "mapiContext"
2322	but added the "userContext" ivars.
2323
2324	* SoObjects/SOGo/SOGoFolder.m (-outlookFolderClass): removed
2325	useless method.
2326
2327	* OpenChange/MAPIStoreUserContext.[hm]: new class for accessing
2328	user data common to all "mapistore contexts" as a singleton: the
2329	same instance is used across all requests until all related
2330	objects have been freed.
2331
23322012-01-27 Ludovic Marcotte  <lmarcotte@inverse.ca>
2333
2334	* SoObjects/Appointments/SOGoAppointmentFolder.m
2335	(bareFetchFields: ...) - we now cache the returned
2336	results - just like for fetchFields:...
2337
2338	* SoObjects/Appointments/SOGoAppointmentFolderObject.m
2339	(_folderCalenars) - we now ask for the c_content and use
2340	a local autorelease pool to avoid consuming too much memory
2341
23422012-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2343
2344	* OpenChange/MAPIStoreCommonViewsContext.[hm],
2345	OpenChange/MAPIStoreDeferredActionsContext.[hm],
2346	OpenChange/MAPIStoreFreebusyContext.[hm],
2347	OpenChange/MAPIStoreJournalContext.[hm],
2348	OpenChange/MAPIStoreRemindersContext.[hm],
2349	OpenChange/MAPIStoreScheduleContext.[hm],
2350	OpenChange/MAPIStoreSearchContext.[hm],
2351	OpenChange/MAPIStoreShortcutsContext.[hm],
2352	OpenChange/MAPIStoreSpoolerContext.[hm],
2353	OpenChange/MAPIStoreViewsContext.[hm]: deleted obsolete classes.
2354
2355	* OpenChange/MAPIStoreFolder.m (supportsSubFolders): new
2356	overridable method that returns whether the current folder can
2357	contain subfolders, nowithstanding the right of the current user
2358	to create or access them.
2359
2360	* OpenChange/MAPIStoreSOGo.m (sogo_backend_list_contexts): new
2361	backend method.
2362
2363	* OpenChange/MAPIStoreContext.m
2364	(+listAllContextsForUser:inMemCtx:): centralized method for
2365	returning all contexts available from all context classes for one
2366	user.
2367	(+listContextsForUser:inMemCtx:): new individual method invoked by
2368	the above. Overridden by concrete subclasses.
2369
23702012-01-26 Ludovic Marcotte  <lmarcotte@inverse.ca>
2371
2372    * SoObjects/SOGo/LDAPSource.{h,m} - now honor
2373	userPasswordAlgorithm when changing the password with
2374	no password-policy. It'll now be encrypted per your
2375	preference. This fixes #755
2376
23772012-01-25  Ludovic Marcotte  <lmarcotte@inverse.ca>
2378
2379	* SOPE/GDLContentStore/GCSFolder.m - we now use the proper
2380	method to determine column types, avoiding the generation
2381	of broken UPDATE statements on MySQL when snoozing alarms.
2382
23832012-01-24  Francis Lachapelle  <flachapelle@inverse.ca>
2384
2385	* UI/Scheduler/UIxCalFolderActions.m (-importAction): failback to
2386	latin-1 when utf-8 decoding doesn't work.
2387
23882012-01-19  Francis Lachapelle  <flachapelle@inverse.ca>
2389
2390	* UI/WebServerResources/UIxMailToSelection.js
2391	(addressFieldChanged): remove commas before testing email regexp.
2392
23932012-01-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2394
2395	* UI/WebServerResources/UIxFilterEditor.js (setupNewFilterData):
2396	mark new filter as active by default.
2397
23982012-01-17  Francis Lachapelle  <flachapelle@inverse.ca>
2399
2400	* UI/WebServerResources/UIxPreferences.js (initPreferences): When
2401	the mail composer is set to use HTML, the reply position popup
2402	menu is disabled. When switching to text-based message,
2403	the popup menu is now correctly re-enabled.
2404
24052012-01-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2406
2407	* SoObjects/SOGo/SQLSource.m (_lookupContactEntry:considerEmail:)
2408	(fetchContactsMatching:): assigned self to the "source" key of the
2409	returned dictionaries.
2410
24112012-01-13  Francis Lachapelle  <flachapelle@inverse.ca>
2412
2413	* SoObjects/Appointments/SOGoAppointmentFolder.m
2414	(-caldavFreeBusyRequestOnRecipient:withUID:andOrganizer:from:to:):
2415	if the recipient is not associated to a user (from an
2416	authentication source), verify if it is a contact (from an
2417	addressbook source). If it is, SOGoFreeBusyObject will take care
2418	of fetching the freebusy information if the contact is associated
2419	to a MS Exchange server.
2420
2421	* SoObjects/Appointments/SOGoFreeBusyObject.m
2422	(-iCalPersonWithUID:): if no user is found from an authentication
2423	source, verify if it matches a contact from an addressbook
2424	source.
2425	(-contentAsStringWithMethod:andUID:andOrganizer:andContact:from:to:):
2426	added new parameter "contactID".
2427
2428	* SoObjects/Appointments/iCalPerson+SOGo.m (-contactIDInContext:):
2429	new method that tries to associated the person's email address to
2430	a contact ID.
2431
24322012-01-12  Francis Lachapelle  <flachapelle@inverse.ca>
2433
2434	* SoObjects/SOGo/SOGoSource.h (-bindDN, -bindPassword)
2435	(-MSExchangeHostname): new accessors to the SOGoDNSource protocol.
2436
2437	* SoObjects/SOGo/LDAPSource.m (-_convertLDAPEntryToContact:):
2438	added a reference to the instance source in the returned dictionary.
2439
2440	* SoObjects/SOGo/SOGoUserManager.m
2441	(-_compactAndCompleteContacts:): keep the source instance in the
2442	returned dictionary.
2443
2444	* UI/MainUI/SOGoUserHomePage.m (-readFreeBusyAction): the http
2445	post can now include an optional "uid" parameter to perform the
2446	freebusy lookup on the user corresponding to the specified
2447	uid. This covers the special case where we want to query a user
2448	from a contact source (not an authentication source) and for which
2449	external freebusy information is available (currently limited to a
2450	Microsoft Exchange server with Web Services enabled).
2451
2452	* SoObjects/Appointments/SOGoFreeBusyObject.m
2453	(-fetchFreeBusyInfosFrom:to:forUser:): new method currently
2454	limited perform a SOAP request to a MS Exhange server to retrieve
2455	the freebusy information of a user.
2456
2457	* UI/Scheduler/UIxComponentEditor.m (-_loadAttendees): when the
2458	attendee's email address doesn't match a user from the
2459	authentication source(s), perform a lookup in the addressbook
2460	source(s). If the email matches a user from a source with a
2461	MSExchangeHostname, return a concatenation of the active user uid
2462	and this contact uid.
2463
2464	* UI/WebServerResources/UIxAttendeesEditor.js
2465	(performSearchCallback): if a matching contact has the
2466	"isMSExchange" attribute, prefix the uid with the login uid.
2467	(_performAjaxRequest): query the freebusy information from the
2468	login user (/SOGo/so/<loginuser>/freebusy.ifb/ajaxRead?uid=<contact>)
2469	when a contact uid is specified. Otherwise, perform the query on
2470	the user instance as usual (/SOGo/so/<contactuser>/freebusy.ifb/ajaxRead).
2471
24722012-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2473
2474	* OpenChange/MAPIStoreCalendarMessage.m (-save): same as below +
2475	ensure that nil fields are removed from non-new instances.
2476
2477	* OpenChange/MAPIStoreAppointmentWrapper.m
2478	(-getPrStartDate:inMemCtx:, -getPrEndDate:inMemCtx:): remove the
2479	tz offset from dates in all-day events.
2480
2481	* OpenChange/MAPIStoreTasksMessage.m (-save): the dates provided
2482	by Outlook for start, due and completed are all-day dates, we thus
2483	need to remove the timezone offset from those dates.
2484
24852012-01-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2486
2487	* OpenChange/MAPIStoreGCSMessageTable.m
2488	(_fixedDatePropertyRestriction:inMemCtx:): attached the result to
2489	the memCtx passed as parameter to avoid a leak.
2490
24912012-01-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2492
2493	* SoObjects/Appointments/SOGoAppointmentObject.m
2494	(_requireResponseFromAttendees:): initialize listHasChanged to NO.
2495
2496	* OpenChange/MAPIStoreMailFolder.m (_parseCOPYUID): the uniString
2497	buffer was allocated one byte too short.
2498
24992012-01-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2500
2501	* OpenChange/NSObject+MAPIStore.m (-getValue:forTag:inMemCtx:):
2502	handle PT_SVREID just as PT_BINARY.
2503
2504	* OpenChange/MAPIStoreCalendarFolder.m (-exchangeRightsForRoles):
2505	add the freebusy read rights when the user has read permission on
2506	calendar objects.
2507
25082012-01-05  Francis Lachapelle  <flachapelle@inverse.ca>
2509
2510	* SoObjects/SOGo/SOGoUserManager.m (-_registerSource:inDomain::):
2511	log error when duplicated IDs are found.
2512
25132012-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2514
2515	* UI/WebServerResources/ContactsUI.js
2516	(onAddressBooksMenuPrepareVisibility): the "new list", "sharing" and "import"
2517	options are now greyed out properly, depending on the object type
2518	and the new attributes below.
2519
2520	* UI/Contacts/UIxContactFoldersView.m
2521	(-currentContactFolderAclEditing)
2522	(-currentContactFolderListEditing): new attribute accessors.
2523
2524	* SoObjects/SOGo/SOGoFolder.m (-sendFolderAdvisoryTemplate:):
2525	moved method from SOGoGCSFolder in order to make it available to
2526	other folder classes.
2527
2528	* SoObjects/SOGo/LDAPSource.m (-initFromUDSource:inDomain:): use
2529	the new setters for certain ivars + take the new "abOU" key into
2530	account.
2531	(-setListRequiresDot:, -listRequiresDot:, -setSourceID:)
2532	(-setDisplayName, -displayName, -setModifiers:): new accessors.
2533	(-_convertRecordToLDAPAttributes): we now strip object classes that
2534	are not supported by the server prior to remove the related fields.
2535	(-hasUserAddressBooks): new method that returns whether user
2536	addressbooks are supported, i.e. when "abOU" is set.
2537	(-addressBookSourcesForUser:): when "abOU" is set, returns an
2538	array of LDAPSource instances representing the personal
2539	addressbooks of the specified user.
2540	(-addAddressBookSource:withDisplayName:forUser:)
2541	(-renameAddressBookSource:withDisplayName:forUser:)
2542	(-removeAddressBookSource:forUser:): new methods with a
2543	self-explicit name.
2544
2545	* SoObjects/Contacts/SOGoContactSourceFolder.m
2546	(-setIsPersonalSource, -isPersonalSource): new accessors for the
2547	"isPersonalSource ivar".
2548	(-lookupName:inContext:acquire:): setup the object classes of the
2549	new entries to "inetorgperson" and "mozillaabpersonalpha".
2550	(-lookupContactsWithFilter:onCriteria:sortBy:ordering:): check
2551	whether "listRequiresDot" is set on the current source and return
2552	the full listing if not required.
2553	(-compare:): enhanced to treat personal sources as if they were
2554	regular GCS folders, in order to sort them properly.
2555	(-delete, -renameTo:): implemented method, required for the
2556	corresponding web methods.
2557	(-ownerInContext:) adapted method to personal sources.
2558
2559	* SoObjects/Contacts/SOGoContactFolders.m (-appendPersonalSource):
2560	overriden method for returning LDAP-based user addresbook sources.
2561	(-newFolderWithName:andNameInContainer:): idem
2562	(-renameLDAPAddressBook:withDisplayName:): new method that enables
2563	the renaming of LDAP-based user addresbook sources.
2564	(-removeLDAPAddressBook:): new method that enables
2565	the removal of LDAP-based user addresbook sources.
2566
25672012-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2568
2569	* SoObjects/SOGo/SOGoParentFolder.m (-appendPersonalSources): made
2570	method public so that it can be easily overriden in subclasses.
2571
2572	* SoObjects/SOGo/SOGoUser.m (-authenticationSource): new method
2573	that returned the SOGoSource instance that successfully recognized
2574	the user represented by the current instance.
2575
2576	* SoObjects/SOGo/SOGoUserManager.m
2577	(_fillContactInfosForUser:withUIDorEmail:inDomain:): we now set
2578	the identifier of the source that authenticated the specified user
2579	as the "SOGoSource" entry of the returned dictionary.
2580
25812012-01-03  Francis Lachapelle  <flachapelle@inverse.ca>
2582
2583	* SoObjects/Appointments/SOGoAptMailNotification.m (-setupValues):
2584	don't set the start/end times when dealing with an all-day event.
2585
2586	* SoObjects/Appointments/SOGoAptMailInvitation.m (-getBody): don't
2587	display the start/end times when dealing with an all-day event.
2588
2589	* SoObjects/Appointments/SOGoAptMailReceipt.m (-_formattedUserDate:): idem.
2590
2591	* SoObjects/Appointments/SOGoAptMailUpdate.m (-getSubject): idem.
2592
2593	* SoObjects/Appointments/SOGoAptMailDeletion.m (-getBody): idem.
2594
25952012-01-02  Francis Lachapelle  <flachapelle@inverse.ca>
2596
2597	* UI/WebServerResources/UIxPreferences.js (getFilterFromEditor):
2598	return a string (JSON) so the data is properly passed to the
2599	opened window with IE7.
2600
2601	* UI/WebServerResources/UIxFilterEditor.js (ensureFieldValidity):
2602	a field value is always considered invalid when empty.
2603
26042011-12-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2605
2606	* SoObjects/SOGo/LDAPSourceSchema.[hm]: new class module enabling
2607	schema auto-discovery.
2608
2609	* UI/WebServerResources/UIxContactEditor.js
2610	(validateContactEditor): the birth date is validated slightly
2611	differently, by enabling empty and 2-digit years as well as single
2612	digits months and days.
2613
2614	* UI/Contacts/UIxContactView.m (-defaultAction, -dealloc): retain
2615	and release the "card" ivar.
2616	(_formattedURL:): the url should be displayed only if it is
2617	non-nil AND non-empty.
2618	(-vcardAction): removed useless method.
2619
2620	* UI/Contacts/UIxContactEditor.m (init): removed the "snapshot",
2621	"preferredEmail", "card", "photosURL" and "contactCategories" ivars.
2622	(-ldifRecord): new getter that proxy the invocation to the client
2623	object, but by taking the contactEmail and contactFN url
2624	parameters. Replaces the "-snapshot" getter, since the LDIF record
2625	is now directly edited.
2626	(-addressBooksList): the client object container class is no
2627	longer taken into account when fetching the current user's permissions.
2628	(-supportCategories, -supportPhotos): new getters that enables the
2629	categories and photo tabs.
2630	(-setJsonContactCategories:, -jsonContactCategories): now make
2631	use of the special "vcardcategories" parameter found in the
2632	contact LDIF record.
2633
2634	* SoObjects/SOGo/SQLSource.m (_lookupContactEntry:considerEmail:):
2635	enhanced to copy the "c_XX" fields to unprefixed equivalents.
2636
2637	* SoObjects/Contacts/NSString+LDIF.m (mustEncodeLDIFValue): new
2638	method, replacing "_isLDIFSafe" in a clearly public manner.
2639
2640	* SoObjects/SOGo/LDAPSource.m (-[NGLdapEntry _asDictionary]): new
2641	utility method to convert an entry into a "SOGo LDIF record".
2642	(-[NGLdapAttribute _asArrayOrString]): new utility method to
2643	convert an LDAP attribute into a string or an array of strings
2644	when the attribute has one or more values.
2645	(-initFromUDSource:inDomain:): handle the new "modifiers",
2646	"mapping" and "objectClasses" configuration keys, used when the
2647	source instance is used as an addressbook. All LDAP fields are now
2648	converted to lowercase.
2649	(_searchAttributes): removed method as the special "*" attribute
2650	is not costly enough to justify its existence, thereby reducing
2651	code complexity.
2652	(-lookupContactEntry:, -lookupContactEntryWithUIDorEmail:)
2653	(-lookupLoginByDN:): merged common code in the new
2654	-_lookupLDAPEntry: method, that accepts an EOQualifier as argument.
2655	(--addContactEntry:withID:, -updateContactEntry: and
2656	removeContactEntryWithID:): new methods for editing addressbook
2657	sources.
2658
2659	* SoObjects/Contacts/SOGoContactSourceFolder.m (-source): new
2660	getter for the "source" ivar.
2661	(-lookupName:inContext:acquire:): accept the creation of new LDIF
2662	entries via web methods ending with "AsContact".
2663	(-saveLDIFEntry:, -deleteLDIFEntry:): new proxy methods for the
2664	new SOGoSource -addContactEntry:withID:, -updateContactEntry: and
2665	removeContactEntryWithID: methods, enabling the creation,
2666	modification and deletion of LDAP contacts.
2667	(-aclsForUser:): implemented method based on the array returned by
2668	-[<SOGoSource> modifiers].
2669
2670	* SoObjects/Contacts/SOGoContactLDIFEntry.m (-vCard): the vcard is
2671	now generated automatically from the LDIF record of the entry,
2672	using the new method provided by NGVCard+SOGo.
2673	(-aclsForUser:): new overriden method similar to the
2674	implementation from SOGoContentObject.
2675
2676	* SoObjects/Contacts/SOGoContactGCSEntry.m (-setLDIFRecord)
2677	(-ldifRecord, -hasPhoto): new accessors required by the
2678	SOGoContactObject protocol.
2679	(-lookupName:inContext:acquire:): return the only photo element
2680	when the "photo" key is requested, if present in the card.
2681	(-save): now returns an NSException, instead of void.
2682
2683	* SoObjects/Contacts/SOGoContactEntryPhoto.m
2684	(+entryPhotoWithID:inContainer:, -setPhotoID:): removed methods,
2685	since there can only be one PHOTO element per contact.
2686	(-photo): simplified thanks to the constraint mentionned above.
2687
2688	* SoObjects/Contacts/NSDictionary+LDIF.m (-ldifRecordAsString):
2689	new method implementing the code previously found in
2690	SOGo/NSDictionary+Utilities.m, in order to produce a textual
2691	representation of an LDIF record.
2692
2693	* SoObjects/Contacts/NSDictionary+LDIF.[hm]: new category module.
2694
2695	* SoObjects/Contacts/NGVCard+SOGo.m (-asLDIFRecord): new method
2696	implementing the conversion code previously found in
2697	UIxContactEditor, in order to produce an "LDIF record" in the form
2698	of an NSDictionary matching the inetOrgPerson and
2699	mozillaAbPersonAlpha object classes.
2700	(-updateFromLDIFRecord:) reciprocal method to "-asLDIFRecord",
2701	with conversion code moved from UIxContactEditor.
2702
2703	* SoObjects/Contacts/SOGoFolder+CardDAV.m (_isValidFilter:): make
2704	use of the lowercase instance of the string, which was erroneously
2705	ignored previously.
2706
27072011-12-29  Ludovic Marcotte  <lmarcotte@inverse.ca.>
2708
2709	* SoObjects/SOGo/SOGoSQLUserProfile.m (_sqlJsonRepresentation:):
2710	don't escape the / character as it's generating invalid JSON
2711	output on newer versions of PostgreSQL.
2712
2713	* Dropped all references to "SOGoMailCheckAllUnseenCounts". We
2714	now check all folders for which filters are defined with a
2715	"fileinto" action - even if they are disable.
2716
2717	* UI/MailerUI/UIxMailAccountActions.m (_jsonFolders:) - we
2718	use a local autorelease pool in the tight loop to avoid consuming
2719	too many LDAP connections during its execution.
2720
27212011-12-23  Francis Lachapelle  <flachapelle@inverse.ca>
2722
2723	* UI/Scheduler/UIxAppointmentEditor.m (-viewAction): the end
2724	date/time is now also returned.
2725
2726	* UI/PreferencesUI/UIxPreferences.m (-vacationEndDate): return
2727	current date when no end date is defined.
2728
2729	* Tools/SOGoToolUserPreferences.m (-run): fixed possible out of
2730	bound exception when parsing arguments.
2731
27322011-12-22  Francis Lachapelle  <flachapelle@inverse.ca>
2733
2734	* UI/Scheduler/UIxTaskEditor.m (-takeValuesFromRequest:inContext:): remove alarms
2735	when no start date is defined.
2736
2737	* UI/WebServerResources/UIxTaskEditor.js (onTimeControlCheck):
2738	disable the reminder popup menu when no start date is defined.
2739
27402011-12-15  Ludovic Marcotte  <lmarcotte@inverse.ca>
2741
2742	* SoObjects/SOGo/SOGoSieveManager.m - slightly reworked
2743	the code to use NSURL in order to instanciate the SOPE
2744	Sieve code - that permits using TLS.
2745
27462011-12-14  Francis Lachapelle  <flachapelle@inverse.ca>
2747
2748	* UI/WebServerResources/ContactsUI.js (getMenus): register the
2749	function onWindowResize only if it's not already defined.
2750
27512011-12-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2752
2753	* SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord): set
2754	"c_category" to NULL when empty.
2755
2756	* OGoContentStore/OCSContactFieldExtractor.m
2757	(-extractQuickFieldsFromVCard:): same as above.
2758
27592011-12-12  Francis Lachapelle  <flachapelle@inverse.ca>
2760
2761	* Tools/SOGoEAlarmsNotifier.m
2762	(-_sendMessageWithHeaders:content:toAttendee:from:withMailer:):
2763	encode sender and recipient addresses in quoted printatble.
2764
2765	* SoObjects/Contacts/SOGoContactGCSFolder.m
2766	(-fixupContactRecord:): fallback on organization name when the
2767	contact has no display name, no firstname, and no lastname.
2768
2769	* UI/Contacts/UIxContactView.m (-fullName): idem.
2770
27712011-12-09  Francis Lachapelle  <flachapelle@inverse.ca>
2772
2773	* UI/MainUI/SOGoRootPage.m (_cookieWithUsername:): the SOGoLogin
2774	cookie now expires in one month.
2775
27762011-12-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2777
2778	* UI/SOGoUI/UIxComponent.m (-userHasCalendarAccess)
2779	(-userHasMailAccess): moved from UIxPageFrame.
2780
2781	* UI/Common/UIxToolbar.m (-cssClasses): new accessor that
2782	generates the CSS classes dynamically depending on the button
2783	state and it descriptor's cssClass.
2784
2785	* UI/WebServerResources/generic.js (parent$): handle the case
2786	where window.opener is null.
2787
27882011-12-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2789
2790	* OpenChange/MAPIStoreFSMessageTable.m
2791	(-evaluatePropertyRestriction:intoQualifier:): interpret filtering
2792	on PR_SUBJECT_UNICODE in order to include
2793	PR_NORMALIZED_SUBJECT_UNICODE and PR_SUBJECT_PREFIX_UNICODE in the
2794	search, as PR_SUBJECT_UNICODE might not actually exist on the FS
2795	messages.
2796
2797	* OpenChange/MAPIStoreObject.m (-addPropertiesFromRow:): perform
2798	test on PT_STRING8 alone after "masking" the ulPropTag with 0xfff,
2799	since PT_XX values are not bitmasks.
2800
28012011-12-06  Francis Lachapelle  <flachapelle@inverse.ca>
2802
2803	* UI/WebServerResources/ContactsUI.js (contactsListCallback):
2804	Force deselection of all rows when changing addressbook.
2805
28062011-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2807
2808	* SoObjects/Appointments/iCalEvent+SOGo.m (-firstOccurrenceRange):
2809	same as below.
2810
2811	* SoObjects/Appointments/SOGoAppointmentFolder.m
2812	(_flattenCycleRecord:forRange:intoArray:): reverted to retrieving
2813	the event start date using the old and buggy method, adapted to
2814	the new NGCards API.
2815
28162011-12-05  Francis Lachapelle  <flachapelle@inverse.ca>
2817
2818	* UI/WebServerResources/MailerUI.js (deleteSelectedMessages)
2819	(onMailboxTreeItemClick, onMessageSelecitionChange)
2820	(configureMessageListEvents): update the message content div only
2821	if it exists (will be hidden in single-window mode).
2822
2823	* UI/WebServerResources/UIxContactsUserFolders.js
2824	(initUserFoldersWindow): registered "click" event on new Done button.
2825
2826	* UI/WebServerResources/UIxMailEditor.js (onContactAdd): show
2827	contacts in a pane instead of a new window.
2828	(onContactFolderChange): new method to update the contacts list
2829	when changing contacts folder from the new popup menu.
2830	(configureDragHandle): new method to allow the new contacts pane
2831	to be resizable.
2832	(onMailEditorResize): was onWindowResize. Now computes the space
2833	used by the search contacts pane.
2834
2835	* UI/WebServerResources/ContactsUI.js (getMenus): the function now
2836	overloads the returning array with the menus defined by the
2837	previously defined function with the same name. Used in
2838	UIxMailEditor.wox that loads both MailerUI.js and ContactsUI.js.
2839	(contactsListCallback): added support for 2-column view. Also
2840	used in mail editor to refresh the new contacts pane.
2841	(initContacts, onContactSelectionChange): don't update contactView when the div
2842	doesn't exist.
2843	(configureDraggables): don't allow drag'n'drop when the folders
2844	list doesn't exist.
2845
2846	* UI/MainUI/UIxLoading.m: new class for empty template used when
2847	loading the iframe in single-window mode.
2848
28492011-12-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2850
2851	* UI/Scheduler/UIxComponentEditor.m (-setCategory): ensure that
2852	the new category is reported in the "categories" ivar.
2853
2854	* SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord):
2855	-[iCalEntityObject categories] returns an NSArray that we need to
2856	convert to a string for the database content.
2857
2858	* SoObjects/Appointments/iCalToDo+SOGo.m (-quickRecord):
2859	-[iCalEntityObject categories] returns an NSArray that we need to
2860	convert to a string for the database content.
2861
28622011-12-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2863
2864	* OpenChange/MAPIStoreNotesMessage.m
2865	(-getPrMessageClass:inMemCtx:): explicit method.
2866	(-getPrSubject:inMemCtx:): explicit method.
2867
2868	* OpenChange/MAPIStoreMessage.m (-getPrAccess:inMemCtx:)
2869	(-getPrAccessLevel:inMemCtx:): reimplemented methods in a generic
2870	way just like the MAPIStoreFolder versions.
2871
2872	* OpenChange/MAPIStoreFSMessage.m (-subscriberCanModifyMessage):
2873	handle the case where the message is being created.
2874
2875	* OpenChange/MAPIStoreFSFolder.m
2876	(-messageKeysMatchingQualifier:andSortOrderings:): ensure the
2877	active user can read the folder messages before returning them.
2878
28792011-12-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2880
2881	* OpenChange/MAPIStoreFAIMessage.m (-subscriberCanReadMessage)
2882	(-subscriberCanModifyMessage): always return "NO" for subscribers.
2883
2884	* OpenChange/MAPIStoreFSFolder.m: mapped role strings into
2885	variables.
2886
2887	* OpenChange/MAPIStoreGCSMessage.m (-getPrAccess:inMemCtx:)
2888	(-getPrAccessLevel:inMemCtx:): return a value based on the ACL
2889	getters below.
2890
2891	* OpenChange/MAPIStoreFSMessage.m (-subscriberCanReadMessage):
2892	returns YES when the message is of class
2893	"IPM.Microsoft.ScheduleData.FreeBusy", as a hack until freebusy
2894	messages are handled by the backend.
2895
2896	* OpenChange/MAPIStoreContext.m (_prepareContextClass): now return
2897	the context via a pointer parameter. Return a proper "enum
2898	mapistore_error" value.
2899
2900	* OpenChange/MAPIStoreCalendarMessage.m (-appointmentWrapper):
2901	pass the owner user as parameter to the appointment wrapper
2902	contructor rather than the active user.
2903	(-save): make use of the owner user coordinates instead of the
2904	ones of the active user. Handle the "sent-by" parameter for the
2905	organizer element.
2906
2907	* OpenChange/MAPIStoreFolder.m
2908	(-openMessage:withMID:forWriting:inMemCtx:): takes a new
2909	"forWriting:" parameter and make use of subscriberCanModifyMessage
2910	and subscriberCanReadMessage to return a proper error code, if
2911	needed.
2912
2913	* OpenChange/MAPIStoreSOGo.m (sogo_folder_open_message): added the
2914	"write_access" parameter.
2915
2916	* OpenChange/MAPIStoreTasksMessage.m:
2917	invoke component:secure: with the secure parameter set to "YES" in
2918	all accessors that requires the iCalTask object.
2919
2920	* OpenChange/MAPIStoreCalendarMessage.m (-appointmentWrapper):
2921	invoke component:secure: with the secure parameter set to "YES".
2922
2923	* OpenChange/MAPIStoreTasksMessageTable.m
2924	(-evaluatePropertyRestriction:intoQualifier:): return
2925	MAPIRestrictionStateAlwaysTrue for PR_SENSITIVITY since privacy
2926	filtering is performed internally.
2927
2928	* OpenChange/MAPIStoreGCSMessageTable.m (-componentQualifier):
2929	removed useless accessor, left over by a previous commit.
2930
2931	* OpenChange/MAPIStoreGCSFolder.m (-aclQualifier): new accessor
2932	providing an additional qualifier when listing elements of a
2933	table, based on the current user rights.
2934	(-messageKeysMatchingQualifier:andSortOrderings:): make use of the
2935	new -aclQualifier method when the active user is not the owner of
2936	the sogo object. Slightly simplified code by storing all
2937	qualifiers in an array passed as parameter to the EOAndQualifier
2938	constructor.
2939
2940	* OpenChange/MAPIStoreMessage.m (-subscriberCanReadMessage)
2941	(-subscriberCanModifyMessage): new getters for ACL operations at
2942	the message level.
2943
2944	* OpenChange/MAPIStoreFolder.m (-subscriberCanCreateMessages)
2945	(-subscriberCanModifyMessages, -subscriberCanReadMessages)
2946	(-subscriberCanDeleteMessages, -subscriberCanCreateSubFolders):
2947	new getters for ACL operations at the folder level.
2948
29492011-11-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
2950
2951	* SoObjects/SOGo/SOGoFolder.m
2952	(_expandPropertyResponse:forObject:): set the element in the 404
2953	bag only if the value is nil to avoid iCal complaining about lack
2954	of support for sharing.
2955
2956	* SoObjects/Appointments/SOGoCalendarProxy.m (+webdavAclManager):
2957	overriden method.
2958	(-davGroupMemberSet, -setDavGroupMemberSet:): instantiate the
2959	"Calendar" object from the result of -[self lookupUserFolder]
2960	instead of "container", since we might attach proxy objects to
2961	other containers.
2962
2963	* Main/SOGo+DAV.m (-davPrincipalURL): new DAV getter.
2964	(-davPrincipalSearchPropertySet): added "calendar-user-type", even
2965	though it's a lie.
2966	(-davComplianceClassesInContext:): declare
2967	"calendar-query-extended", "extended-mkcol",
2968	"calendarserver-principal-property-search" as additional classes,
2969	even though it's a lie.
2970
2971	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
2972	(-davCalendarUserAddressSet): make sure each email address is
2973	reported only once, we also return the user principal in the list
2974	(for iCal).
2975
2976	* SoObjects/SOGo/SOGoObject.m (-davComplianceClassesInContext:):
2977	declare "calendar-query-extended", "extended-mkcol",
2978	"calendarserver-principal-property-search" as additional calendar
2979	classes, even though it's a lie.
2980	(-davCurrentUserPrincipal): new method.
2981
2982	* SoObjects/Appointments/SOGoAppointmentFolder.m (-davResourceId):
2983	new DAV getter.
2984
2985	* SoObjects/SOGo/SOGoUserFolder.m (-davResourceId): new DAV getter.
2986
2987	* SoObjects/SOGo/SOGoFolder.m (-davPrincipalURL): moved from
2988	SOGoUserFolder.
2989
2990	* SoObjects/SOGo/WORequest+SOGo.m (-isICal, -isICal4): updated for
2991	iCal 5.
2992
2993	* SoObjects/Appointments/SOGoAppointmentInboxFolder.m
2994	(-davScheduleDefaultCalendarURL): fixed method to return a
2995	properly formatted XML chunk.
2996	(-displayName): returns nameInContainer.
2997
2998	* SoObjects/Appointments/SOGoAppointmentFolder.m
2999	(-davCalendarTimeZone): fixed by embedding the VTIMEZONE element
3000	in a VCALENDAR.
3001
30022011-11-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3003
3004	* OpenChange/MAPIStoreTypes.m (NSObjectFromSPropValue): set the
3005	resulting string to @"" when the unicode or string pointers are
3006	NULL.
3007
30082011-11-28  Francis Lachapelle  <flachapelle@inverse.ca>
3009
3010	* UI/SOGoUI/UIxComponent.m (-singleWindowModeEnabled): new method
3011	that returns true if the single-window mode is enabled. This mode
3012	can be forced by setting the cookie "SOGoWindowMode" to "single".
3013
3014	* UI/MailerUI/UIxMailEditor.m (-contactFolders)
3015	(-personalContactInfos, -setCurrentFolder:, -currentContactFolderId)
3016	(-currentContactFolderName, -currentContactFolderOwner)
3017	(-currentContactFolderClass): getters/setters for new contacts
3018	pane in the mail editor.
3019
30202011-11-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3021
3022	* OpenChange/MAPIStoreContext.m
3023	(-initFromURL:withConnectionInfo:andTDBIndexing:): assign a
3024	SOGoUser corresponding to the object owner and to the active user
3025	to the "ownerUser" and "activeUser" ivars.
3026
3027	* SoObjects/Appointments/SOGoAppointmentFolder.m
3028	(-bareFetchFields:from:to:title:component:additionalFilters:):
3029	we must not attempt to instantiate an EOQualifier with a "nil"
3030	format, otherwise it causes an exception. Settings the qualifier
3031	as nil instead.
3032
30332011-11-24  Francis Lachapelle  <flachapelle@inverse.ca>
3034
3035	* UI/WebServerResources/ContactsUI.js (resetCategoriesMenu): the
3036	event listener must be on mousedown since click is already
3037	observed by document.body.
3038
30392011-11-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3040
3041	* OpenChange/MAPIStoreContactsMessageTable.m
3042	(-evaluatePropertyRestriction:intoQualifier:): returns
3043	"MAPIRestrictionStateAlwaysTrue" for PR_SENSITIVITY.
3044
3045	* OpenChange/MAPIStoreContactsMessage.m
3046	(-getPrSensitivity:inMemCtx:): new getter that always returns 0.
3047
30482011-11-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3049
3050	* OpenChange/NSArray+MAPIStore.m (-asMVUnicodeInMemCtx:) renamed
3051	from "asArrayOfUnicodeStringsInCtx".
3052	(-asMVUnicodeInMemCtx:, -asMVLongInMemCtx:): new conversion
3053	methods.
3054
3055	* OpenChange/MAPIStoreTypes.m (NSObjectFromValuePointer):
3056	simplified method by using set_SPropValue_proptag and
3057	NSObjectFromSPropValue.
3058
3059	* OpenChange/NSObject+MAPIStore.m (-getValue:forTag:inMemCtx:):
3060	renamed from "getMAPIValue:...".
3061	(-arrayFromMAPIMVLong:, +arrayFromMAPIMVUnicode:)
3062	(+arrayFromMAPIMVString:, +arrayFromMAPIMVBinary:)
3063	(+arrayFromMAPIMVGuid:, +arrayFromMVShort:, +arrayFromMVLong:)
3064	(+arrayFromMVI8:, +arrayFromMVUnicode:, +arrayFromMVString:)
3065	(+arrayFromMVBinary:, +arrayFromMVGuid:, +arrayFromMVFileTime:)
3066	new constructors for multivalue types.
3067
30682011-11-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
3069
3070	* SoObjects/SOGo/WORequest+SOGo.m - for now, we consider iCal 4
3071	and iCal 5 to be the same and added new strings to recognize
3072	Apple Address Book on Mac OS X 10.7 (Lion)
3073
3074	* SoObjects/Contacts/SOGoContactGCSFolder.m - we now skip list
3075	if we deal with Apple Address Book. If we don't do this and
3076	a "vlist" is present, no card will be displayed at all.
3077
30782011-11-21  Francis Lachapelle  <flachapelle@inverse.ca>
3079
3080	* UI/WebServerResources/UIxPreferences.js (initPreferences):
3081	initialize calendar for the new vacation end date optional parameter.
3082
3083	* UI/PreferencesUI/UIxPreferences.m (-enableVacationEndDate)
3084	(-disableVacationEndDate, -setEnableVacationEndDate:)
3085	(-vacationEndDate, -setVacationEndDate:): getters/setters for the
3086	new optional vacation end date.
3087
30882011-11-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3089
3090	* OpenChange/MAPIStoreFolder.m (-lookupFolder:): explicitly set
3091	the MAPIStoreContext's woContext as context to the looked up
3092	folder, although one could expect it to have been set during the
3093	lookup at the SOGo level...
3094
3095	* OpenChange/MAPIStoreFSFolder.m (-lookupFolder:): removed useless
3096	overriding of method.
3097
3098	* OpenChange/MAPIStoreMailFolder.m (-[MAPIStoreMailFolder
3099	lookupFolder:]): removed useless overriding of method.
3100	(-[MAPIStoreInboxFolder lookupFolder:]): in altnamespace mode,
3101	perform the same association of the woContext to the looked up
3102	folder as in MAPIStoreFolder.
3103
3104	* OpenChange/MAPIStoreContext.m
3105	(-initFromURL:withConnectionInfo:andTDBIndexing:): instantiate a
3106	SOGoUser corresponding to the username of the new context and
3107	associated it to the woContext ivar.
3108
31092011-11-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3110
3111	* OpenChange/MAPIStoreFolder.m (-permissionEntries): new public
3112	method.
3113	(-modifyPermissions:withCount:andFlags:): new backend op public
3114	method.
3115	(-aclFolder, -rolesForExchangeRights:, -exchangeRightsForRoles:):
3116	new mandatory methods.
3117
3118	* OpenChange/SOGoMAPIFSFolder.m (-defaultUserID, -addUserInAcls:)
3119	(-removeAclsForUsers:, -aclUsers, -aclsForUser:)
3120	(-setRoles:forUser:): implemented standard ACL methods.
3121
3122	* OpenChange/MAPIStorePermissionsTable.m
3123	(+[MAPIStorePermissionEntry
3124	entryWithUserId:andMemberId:forFolder:]): constructor now takes a
3125	memberId and the container folder as parameters.
3126	(-[MAPIStorePermissionEntry getPrMemberId:inMemCtx:]): now based
3127	on the new memberId ivar.
3128	(-[MAPIStorePermissionEntry getPrEntryId:inMemCtx:]): now make use
3129	of MAPIStoreInternalEntryId for regular member ids and return an
3130	empty blob for special ones, as specified in oxcperm.
3131	(-[MAPIStorePermissionEntry getPrMemberName:inMemCtx:]): now
3132	returns the real CN of the user for regular member ids and return
3133	@"" or @"Anonymous" for special ones, as specified in oxcperm.
3134	(-[MAPIStorePermissionEntry getPrMemberName:inMemCtx:]): now
3135	returns the real member rights, based on the aclFolder of the
3136	container, using standard SOGo methods.
3137
3138	* OpenChange/MAPIStorePermissionsTable.h
3139	(MAPIStorePermissionsEntry): made class public.
3140
3141	* OpenChange/MAPIStoreSOGo.m (sogo_folder_modify_permissions): new
3142	backend op.
3143	(sogo_backend_init): invoke "disableLocalCache" to avoid the
3144	caching of ACL.
3145
3146	* SoObjects/SOGo/SOGoCache.m (-disableLocalCache): new method to
3147	disable the local cache altogether (helper for non-WO access).
3148
31492011-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3150
3151	* OpenChange/MAPIStoreSamDBUtils.m: new module containing helpers
3152	pertaining to the SamDB.
3153	(MAPIStoreSamDBUserAttribute): new function that returns the value
3154	of a specified key from a user record matching one simple criteria.
3155	(MAPIStoreInternalEntrydId, MAPIStoreExternalEntryId): moved
3156	functions from MAPIStoreMessage.m.
3157
3158	* OpenChange/MAPIStoreMessage.m (MAPIStoreInternalEntryId): now
3159	takes a ldb_context * parameter pointing to the samdb, which
3160	enables us: 1) to return the real legacyExchangeDN 2) to make use
3161	of sAMAccountName as search parameter for the username.
3162
31632011-11-16  Ludovic Marcotte  <lmarcotte@inverse.ca>
3164
3165	*  SoObjects/SOGo/SOGoSieveManager.m (-updateFiltersForLogin:...)
3166	We now handle connection exceptions to avoid crashing sogod.
3167
31682011-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3169
3170	* OpenChange/MAPIStoreContactsMessage.m (-getPrBody:inMemCtx:):
3171	same as below.
3172
3173	* OpenChange/MAPIStoreAppointmentWrapper.m (-getPrBody:inMemCtx:):
3174	removed parsing hack since things are now done properly from
3175	NGCards.
3176
3177	* Tests/Unit/TestVersit.m (-test_rendering, -test_parsing):
3178	adapted to new NGCards data structure and improved to test further
3179	important use cases.
3180
31812011-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3182
3183	* Tests/Unit/TestVersit.m: new test module for versit parsing and
3184	outputting.
3185
31862011-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3187
3188	* OpenChange/MAPIStoreCalendarMessage.m (-save): set the DESCRIPTION
3189	field to the value of PR_BODY_UNICODE or, a textual version of
3190	PR_HTML. COMMENT would be nice later.
3191
3192	* OpenChange/MAPIStoreAppointmentWrapper.m (-getPrBody:inMemCtx:):
3193	make use of -[NSString asCardAttributeValues].
3194
3195	* OpenChange/MAPIStoreContactsMessage.m (-save): set the NOTE
3196	field to the value of PR_BODY_UNICODE or, a textual version of
3197	PR_HTML.
3198
3199	* OpenChange/MAPIStoreMessage.m (-addProperties): intercept
3200	PR_RTF_COMPRESSED attributes and convert them automatically to a
3201	PR_HTML attribute.
3202
3203	* OpenChange/MAPIStoreVolatileMessage.m (-addProperties:):
3204	transfer the content of the "properties" ivar instead of the
3205	"newProperties" parameter, so as to benefit from treatment that
3206	could have happened in parent classes.
3207
3208	* OpenChange/MAPIStoreMailVolatileMessage.m
3209	(_generateMailDataWithBcc:): don't write the resulting mail body
3210	to /tmp/mimegen.eml.
3211
32122011-11-09  Francis Lachapelle  <flachapelle@inverse.ca>
3213
3214	* UI/WebServerResources/SOGoRootPage.js (onLoginClick): don't
3215	assume that the checkbox rememberLogin is always part of the template.
3216
32172011-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3218
3219	* OpenChange/MAPIStoreRecurrenceUtils.m
3220	(-fillRecurrencePattern:withStartDate:andEndDate:): fixed a crash
3221	occurring when no byday mask was specified. We also force a value
3222	for the monthday in the case of a yearly event without a proper
3223	one.
3224
32252011-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3226
3227	* OpenChange/MAPIStoreFolder.m (-addProperties:): we now override
3228	this method instead of -addPropertiesFromRow:. Also, invoking
3229	resetCache is no longer required since the "properties" ivar is
3230	no longer used in this class.
3231
3232	* OpenChange/MAPIStoreObject.m (-addPropertiesFromRow:): now
3233	invokes [self addProperties:] to modify the "properties" ivar,
3234	instead of doing it directly. This enables subclasses to only need
3235	overriding -addProperties:.
3236	(-resetProperties): removed useless method.
3237
3238	* OpenChange/MAPIStoreVolatileMessage.m (-addPropertiesFromRow:):
3239	removed obsolete overloading of method.
3240
32412011-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3242
3243	* OpenChange/MAPIStoreMessage.m (-setReadFlag:): make overrides
3244	optional.
3245
3246	* OpenChange/MAPIStoreCalendarMessage.m (-save): handle all day
3247	events based on the value of PidLidAppointmentSubType.
3248	Don't add the timezone component to the vCalendar in that case.
3249	Take PidLidAppointmentStateFlags into account before building the
3250	list of attendees. Take the organizer passed in the recipients
3251	into account when specified.
3252
32532011-11-01  Francis Lachapelle  <flachapelle@inverse.ca>
3254
3255	* UI/WebServerResources/UIxAclEditor.js (addUser): fixed CSS class
3256	"normal-person" that was replaced by "normal-user".
3257
32582011-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3259
3260	* OpenChange/MAPIStoreCalendarMessage.m (-save): added work-around
3261	for setting of organizer as an attendee record.
3262
3263	* OpenChange/MAPIStoreMailMessage.m (-setReadFlag:): implemented
3264	basic method, only dealing with actual setting or unsetting of
3265	"\Seen".
3266
3267	* OpenChange/MAPIStoreCalendarMessage.m (-setReadFlag:): overriden
3268	with dumb implementation, since it seems to be invoked on this
3269	kind of object.
3270
32712011-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3272
3273	* OpenChange/MAPIStoreContactsAttachment.m
3274	(-getPrAttachEncoding:inMemCtx:, -getPrAttachFlags:inMemCtx:)
3275	(-getPrAttachmentFlags:inMemCtx:)
3276	(-getPrAttachmentHidden:inMemCtx:)
3277	(-getPrAttachmentLinkid:inMemCtx:, -getPrAttachSize:inMemCtx:):
3278	new getters.
3279
3280	* OpenChange/MAPIStoreSOGo.m (sogo_message_set_read_flag): new
3281	backend op.
3282
3283	* OpenChange/MAPIStoreMailMessage.m (-_fetchBodyData): fetch body
3284	keys with BODY.PEEK rather than just BODY, to disabled the
3285	automatic setting of the "\Seen" flag.
3286
3287	* SoObjects/Mailer/SOGoMailBodyPart.m (-fetchBLOBWithPeek:): new
3288	method that enables the fetching of body parts either via "BODY"
3289	or "BODY.PEEK".
3290
3291	* SoObjects/Mailer/SOGoMailObject.m
3292	(-addRequiredKeysOfStructure:path:toArray:acceptedTypes:withPeek:):
3293	added a "withPeek" parameter that enables the fetching of body
3294	parts either via "BODY" or "BODY.PEEK".
3295
32962011-10-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3297
3298	* OpenChange/MAPIStoreMailVolatileMessage.m (_generateMailData):
3299	don't consider "orig" type recipients.
3300	Added "withBCC" parameter. Reorganized code to produce better
3301	mime-compliant messages, in particular with regards to the
3302	handling of multipart/* body parts. Split method in many
3303	specialized submethods for code clarity.
3304	(-getMessageData:inMemCtx:): overriden method for this class.
3305
3306	* OpenChange/MAPIStoreSOGo.m (sogo_message_modify_recipients):
3307	adapted backend function to the new prototype, where the message
3308	recipients are preparsed and now passed an array of "struct
3309	mapistore_message_recipient", rather than a struct
3310	ModifyRecipientRow.
3311
3312	* OpenChange/MAPIStoreTypes.m (NSObjectFromValuePointer): new
3313	function returning an instance of an appropriate class based on a
3314	property tag and a corresponding value passed as void *.
3315
3316	* OpenChange/MAPIStoreFSMessage.m (-canGetProperty:): method moved
3317	up in MAPIStoreVolatileMessage.
3318
33192011-10-27  Francis Lachapelle  <flachapelle@inverse.ca>
3320
3321	* UI/WebServerResources/UIxAttendeesEditor.js
3322	(performSearchCallback): show a list email address (usually an
3323	LDAP group) unless the list has no email address (usually a
3324	personal contacts list).
3325
3326	* UI/WebServerResources/SOGoRootPage.js (initLogin): added sliding
3327	effect to about box.
3328
33292011-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3330
3331	* OpenChange/MAPIStoreObject.m (-canGetProperty:): new method that
3332	determines whether a property can be requested on a
3333	MAPIStoreObject instance or descendant thereof, in order to take
3334	different ways of fetching properties into account, whether
3335	through a dynamic getter or some dictionary...
3336	(-getAvailableProperties:inMemCtx:): now compute the returned
3337	array based on the result of invocations of -[self
3338	canGetProperty:].
3339
3340	* OpenChange/MAPIStoreFSMessage.m
3341	(+getAvailableProperties:inMemCtx:): fixed a leak by attaching the
3342	array of enum MAPITAGS to "properties".
3343	(-canGetProperty:): overriden method.
3344
3345	* OpenChange/MAPIStoreVolatileMessage.m: MAPIStoreMemMessage renamed
3346	to MAPIStoreVolatileMessage.
3347	(-getAvailableProperties:inMemCtx:) removed obsolete method.
3348	(-init): creationTime and lastModificationTime are now ivars.
3349	(-lookupAttachment:): implemented manadatory method.
3350
3351	* OpenChange/SOGoMAPIVolatileMessage.m: SOGoMAPIMemMessage renamed
3352	to SOGoMAPIVolatileMessage.
3353
33542011-10-26  Francis Lachapelle  <flachapelle@inverse.ca>
3355
3356	* SoObjects/SOGo/SQLSource.m
3357	(-checkLogin:password:perr:expire:grace:): authentication can be
3358	performed against any database column defined in the new
3359	LoginFieldNames defaults parameter.
3360	(-_lookupContactEntry:considerEmail:): idem.
3361
33622011-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3363
3364	* OpenChange/MAPIStoreFSMessage.m,
3365	OpenChange/MAPIStoreMailVolatileMessage.m: new descendants of
3366	MAPIStoreMemMessage.
3367
3368	* OpenChange/MAPIStoreDraftsMessage: replaced class with
3369	MAPIStoreMemMessage, enabling the creation of mails from any mail
3370	folder.
3371
3372	* OpenChange/MAPIStoreMessage.m
3373	(-modifyRecipientsWithRows:andCount:andColumns:): take BCC
3374	recipients into account.
3375
3376	* OpenChange/MAPIStoreMessage.m
3377	(_convertRecipientFromRow:andColumns:): temp hack: make use of
3378	set_mapi_SPropValue_sogo instead of set_mapi_SPropValue, which was
3379	reversed in openchange to the old behaviour.
3380
3381	* OpenChange/MAPIStoreObject.m (-init): renamed "newProperties"
3382	ivar to "properties".
3383	(-addNewProperties:): renamed to "-addProperties:"
3384	(-resetNewProperties:): renamed to "-resetProperties:"
3385	(-setProperties:): renamed to "-addPropertiesFromRow:"
3386
3387	* OpenChange/MAPIStoreSOGo.m (sogo_message_create_attachment):
3388	implemented new backend method.
3389
33902011-10-25  Francis Lachapelle  <flachapelle@inverse.ca>
3391
3392	* UI/MainUI/SOGoRootPage.m (-cookieUsername)
3393	(-cookieWithUsername:): getter/setter for the new SOGoLogin
3394	cookie. This is used for the new "Remember username" checkbox that
3395	appears on the login page.
3396
33972011-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3398
3399	* OpenChange/EOQualifier+MAPIFS.[hm]: now evaluates
3400	SOGoMAPIMemMessage.
3401
3402	* OpenChange/SOGoMAPIFSMessage.[hm]: now a subclass of
3403	SOGoMAPIMemMessage.
3404
3405	* OpenChange/MAPIStoreDraftsMessage.m (_saveAttachment:): make use
3406	of MAPIStoreMIME.
3407
3408	* OpenChange/MAPIStoreMIME.[hm]: new class module implementing a
3409	singleton helper that deduces mime types from file extensions,
3410	based on the content of /etc/mime.types.
3411
3412	* OpenChange/MAPIStoreAttachment.m,
3413	OpenChange/MAPIStoreCalendarAttachment.m,
3414	OpenChange/MAPIStoreMailAttachment.m: replaced the
3415	getProperty:withTag:inMemCtx: method with its switch case to make
3416	use of the more recent dynamic property getters API.
3417
3418	* OpenChange/gen-property-selectors.py: added a few exclusions,
3419	which are either undocumented or unused.
3420
34212011-10-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3422
3423	* OpenChange/MAPIStoreAttachment.m
3424	(-getProperty:withTag:inMemCtx:): fallback on super's
3425	implementation to benefit from the property getters methods.
3426
3427	* OpenChange/MAPIStoreContactsMessage.m (-getPrBody:inMemCtx:): if
3428	the attribute length is 0, return MAPISTORE_ERR_NOT_FOUND.
3429	(-_fetchAttachmentParts, -getPidLidHasPicture:inMemCtx:)
3430	(-attachmentKeysMatchingQualifier:andSortOrderings:)
3431	(-lookupAttachment:): new methods for retrieving contact pictures
3432	in the VCARD.
3433	(_updatePhotoInVCard:fromProperties:): new method that inserts a
3434	"PHOTO" element in the VCARD depending on the PR_ATTACH_*
3435	properties.
3436
3437	* OpenChange/MAPIStoreContactsAttachment.[hm]: new class module
3438	for handling contact "attachments", that is, contact pictures.
3439
3440	* OpenChange/plreader.m (PLReaderDumpPListFile): ignore "error" if
3441	the returned property list object is not nil, since "error" might
3442	still be set with GNUstep.
3443
34442011-10-21  Francis Lachapelle  <flachapelle@inverse.ca>
3445
3446	* SoObjects/SOGo/SOGoUserManager.m
3447	(-_compactAndCompleteContacts:): add the key "isGroup" when defined.
3448
3449	* UI/MainUI/SOGoUserHomePage.m (:_usersForResults:inDomain:):
3450	add a boolean value in the returning array that identifies if the
3451	user is actually a group.
3452
3453	* UI/Common/UIxAclEditor.m (-currentUserClass): return the CSS
3454	class that identifies the user as a single contact or list of contacts.
3455
3456	* UI/WebServerResources/UIxContactsUserFolders.js
3457	(addUserLineToTree): extract the new field that is set to 1 when
3458	the user is actually a group.
3459
3460	* UI/WebServerResources/UIxAclEditor.js (addUser): new argument to
3461	to identify the type of user (person or group).
3462
3463	* UI/WebServerResources/UIxMailToSelection.js
3464	(expandContactListCallback): don't expand contacts without an
3465	email address.
3466
34672011-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3468
3469	* OpenChange/MAPIStoreDraftsMessage.m (-getPrDisplayTo:inMemCtx:)
3470	(-getPrDisplayBcc:inMemCtx:): new getters.
3471
34722011-10-18  Francis Lachapelle  <flachapelle@inverse.ca>
3473
3474	* UI/WebServerResources/generic.js (log): fixed an issue with
3475	Firefox and IE when SOGo was opened using a targeted link.
3476
3477	* SoObjects/Mailer/SOGoMailFolder.m
3478	(-copyUIDs:toFolder:inContext:): now returns the raw IMAP response
3479	when the copy operation failed (most probably something like "Over quota").
3480
34812011-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3482
3483	* OpenChange/MAPIStoreSOGo.m (sogo_backend_init): invoke
3484	-[NSProcessInfo initializeWithArguments:count:environment:] in
3485	order to avoid an infinite loop with GNUstep occurring under
3486	strange circumstances. Make use of "samba" as process name.
3487
3488	* OpenChange/MAPIStoreMapping.m (-initForUsername:withIndexing:):
3489	attach the struct tdb_wrap *indexing to a new memCtx ivar, in
3490	order to make sure its value is retained until the release of the
3491	mapping instance.
3492
34932011-10-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3494
3495	* OpenChange/MAPIStoreGCSMessageTable.m
3496	(-evaluatePropertyRestriction:intoQualifier:): removed useless
3497	condition to avoid warnings with certain versions of gcc.
3498
34992011-10-14  Francis Lachapelle  <flachapelle@inverse.ca>
3500
3501	* UI/WebServerResources/UIxMailToSelection.js
3502	(addressFieldChanged): we now split on commas only if no email
3503	address is detected.
3504
3505	* UI/WebServerResources/SOGoMailDataSource.js (load): associated a
3506	unique id to the source using the url and its parameters.
3507
3508	* UI/WebServerResources/SOGoDataTable.js (render): add the new
3509	source id to the current render id. This should solve incorrect
3510	messages appearing when fast-switching between folders or sort order.
3511
3512	* SoObjects/SOGo/NSString+Utilities.m (-_rangeOfURLInRange:):
3513	fixed handling of brackets (inequality signs <>).
3514
35152011-10-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
3516
3517	* SoObjects/SOGo/SOGoGCSFolder.m (setRoles:forUser:..)
3518	We now even cache "None" roles.
3519	* SoObjects/Mailer/SOGoMailObject.m (fetchCoreInfos)
3520	We now handle correctly untagged responses.
3521
35222011-10-13  Francis Lachapelle  <flachapelle@inverse.ca>
3523
3524	* Tools/SOGoToolUserPreferences.m (-run): added possibility to
3525	specify a file (-f filename) when setting a user
3526	default/setting. Removed the constraint of specifying
3527	administrative credentials of the SIeve server when not setting a
3528	parameter related to Sieve.
3529
35302011-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3531
3532	* OpenChange/MAPIStoreSOGo.m (sogo_manager_generate_uri): new
3533	backend op. Code from j.kerihuel@openchange.org.
3534
3535	* OpenChange/MAPIStoreAppointmentWrapper.m
3536	(-initWithICalEvent:andUser:andSenderEmail:inTimeZone:): take a
3537	new "senderEmail" parameter in order to help the process of
3538	deducting the attendee in an invitation message not including a
3539	"METHOD".
3540	(-_setupITIPContextFromAttendees): fixed method to set the method
3541	as "REPLY" when the user is organizer rather than the other way
3542	around.
3543
35442011-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3545
3546	* OpenChange/MAPIStoreAppointmentWrapper.m (-_setupITIPContext):
3547	new method that contains the common code for determining the ITIP
3548	status of the event and of the attendees.
3549
3550	* OpenChange/MAPIStoreMailMessage.m (-init): "headerMethod" has
3551	become obsolete.
3552	(-getPrIconIndex:inMemCtx:, -getPrMessageClass:inMemCtx:): when
3553	mail is event, forward the invocation to the
3554	MAPIStoreAppointmentWrapper equivalent.
3555
3556	* OpenChange/MAPIStoreAppointmentWrapper.m
3557	(-getPidLidReminderSet:inMemCtx:)
3558	(-getPidLidReminderDelta:inMemCtx:)
3559	(-getPidLidReminderTime:inMemCtx:)
3560	(-getPidLidReminderSignalTime:inMemCtx:)
3561	(-getPidLidReminderOverride:inMemCtx:)
3562	(-getPidLidReminderType:inMemCtx:)
3563	(-getPidLidReminderPlaySound:inMemCtx:)
3564	(-getPidLidReminderFileParameter:inMemCtx:): implemented those
3565	alarm-related getters (see OXORMDR).
3566	(-getPrIconIndex:inMemCtx:, -getPrMessageClass:inMemCtx:): updated
3567	code to handle REQUEST, REPLY (positive, negative and tentative)
3568	as well as "COUNTER" and "CANCEL".
3569
3570	* OpenChange/MAPIStoreCalendarMessage.m (_setupAlarmDataInEvent:):
3571	new method invoked from -save that sets VALARM elements on the
3572	current event based on the PidLidReminder* properties.
3573	(-getPidLidReminderSet:inMemCtx:)
3574	(-getPidLidReminderDelta:inMemCtx:)
3575	(-getPidLidReminderTime:inMemCtx:)
3576	(-getPidLidReminderSignalTime:inMemCtx:)
3577	(-getPidLidReminderOverride:inMemCtx:)
3578	(-getPidLidReminderType:inMemCtx:)
3579	(-getPidLidReminderPlaySound:inMemCtx:)
3580	(-getPidLidReminderFileParameter:inMemCtx:): new alarm-related
3581	forwarders to homonymous methods in MAPIStoreAppointmentWrapper.
3582
35832011-10-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3584
3585	* OpenChange/MAPIStoreMailFolder.m (-synchroniseCache): improved
3586	method to only fetch non-deleted messages in part 1, and to
3587	automatically remove message records in part 2, so that we know
3588	when a delete message has already been taken into account with
3589	regards to version numbers. The version number generation having
3590	been moved from getDeletedKeysFromChangeNumber:andCN:inTableType:.
3591	This also fixes the case where the last modification date was
3592	increased when any deleted message was found, because "known
3593	deleted messages" are now ignored.
3594	(-getDeletedKeysFromChangeNumber:andCN:inTableType:) Simplified
3595	method by moving most of it into -synchroniseCache and by
3596	returning the highest deleted modseq reported by the latter.
3597
35982011-10-07  Francis Lachapelle  <flachapelle@inverse.ca>
3599
3600	* UI/WebServerResources/UIxPreferences.js
3601	(displayAccountSignature): fixed the link to edit the signature
3602	when no signature was defined.
3603
36042011-10-06  Francis Lachapelle  <flachapelle@inverse.ca>
3605
3606	* UI/WebServerResources/generic.js (getListIndexForFolder): the
3607	personal folder now stays on top, as returned by the server.
3608
36092011-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3610
3611	* SoObjects/SOGo/SOGoObject.m (-davComplianceClassesInContext:):
3612	take all the supported DAV object classes in charge, in order to
3613	simplify the handling of those on topmost folders.
3614
3615	* OpenChange/MAPIStoreFolder.m (-deleteMessageWithMID:andFlags:):
3616	invoke "prepareDelete" on the message object when available.
3617
36182011-10-03  Francis Lachapelle  <flachapelle@inverse.ca>
3619
3620	* UI/WebServerResources/generic.js (snoozeAlarm): new function to
3621	snooze an alarm for a specific number of minutes.
3622	(showAlarmCallback): offer the user to snooze the alarm right
3623	after triggering the browser-native alert.
3624	(showSelectDialog): new function that construct a dialog box with
3625	a popup menu.
3626
3627	* UI/Scheduler/UIxAppointmentEditor.m (-viewAction): accepts the
3628	new form parameter snoozeAlarm, which delays the alarm to the
3629	specified number of minutes.
3630
3631	* SoObjects/Appointments/SOGoCalendarComponent.m (-snoozeAlarm:):
3632	new method to set the next alarm of the event in a specified
3633	number of minutes. Only affect the quick table, not the original vCalendar.
3634
36352011-10-03  Ludovic Marcotte  <lmarcotte@inverse.ca>
3636
3637	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:)
3638	We compare sequence numbers to make sure we correctly accept
3639	invitation replies for the "right" objects
3640
36412011-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3642
3643	* OpenChange/MAPIStoreDraftsMessage.m (-submit): unregister id
3644	from mapping after operation.
3645
3646	* OpenChange/MAPIStoreSOGo.m (sogo_message_modify_recipients):
3647	this backend op now has a "columns" arguments for the user data
3648	row.
3649
36502011-09-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3651
3652	* OpenChange/MAPIStoreMailMessage.m (-getMessageData:inMemCtx:):
3653	same as below.
3654
3655	* OpenChange/MAPIStoreCalendarMessage.m
3656	(-getMessageData:inMemCtx:): delegated code to
3657	MAPIStoreAppointmentWrapper so that organizers and invitees are
3658	properly reported both in invitation emails and events.
3659
3660	* OpenChange/MAPIStoreMessage.m (MAPIStoreInternalEntryId)
3661	(MAPIStoreExternalEntryId): new helper functions that return an
3662	NSData with the entry id for the requested user or contact.
3663	(-getMessageData:inMemCtx:): adapted to the new mapistore_message
3664	struct and column handling.
3665
3666	* OpenChange/NSData+MAPIStore.m (-appendUInt16): new method.
3667
3668	* OpenChange/EOQualifier+MAPIFS.m (-[EOKeyValueQUalifier
3669	_evaluateMAPIFSMessageProperties:): ensure finalKey is never nil
3670	nor undefined.
3671
36722011-09-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3673
3674	* OpenChange/MAPIStoreFSMessage.m (-getPrChangeKey:inMemCtx:):
3675	first return the value stored in the plist, if present. Otherwise
3676	fallback to the method making use of objectVersion.
3677
3678	* OpenChange/MAPIStoreSOGo.m (sogo_folder_move_copy_messages):
3679	added the "target_change_keys" parameter.
3680
3681	* OpenChange/MAPIStoreFolder.m
3682	(-moveCopyMessagesWithMID:fromFolder:withMID:wantCopy:): ensure
3683	the message URL exists in the MAPIStoreMapping, otherwise fail
3684	with MAPISTORE_ERR_NOT_FOUND, to avoid a crash. Passe the target
3685	changeKey as property to the new message.
3686
3687	* OpenChange/MAPIStoreFSMessage.m (-objectVersion): return
3688	0xff...fff when "version" does not exist in the object properties.
3689
36902011-09-27  Francis Lachapelle  <flachapelle@inverse.ca>
3691
3692	* UI/Common/UIxPageFrame.m (-userHasVacationEnabled): new method
3693	that returns whether the user has an automatic vacation message enabled.
3694
3695	* SoObjects/SOGo/SOGoUserDefaults.m (-setBusyOffHours): new setter
3696	for the new defaults SOGoBusyOffHours, which defines if periods
3697	outside business hours should be opaque (busy).
3698	(-busyOffHours): getter corollary to the new method above.
3699
3700	* UI/PreferencesUI/UIxPreferences.m (-setBusyOffHours:): new
3701	setter for the new defaults SOGoBusyOffHours.
3702	(-busyOffHours): getter corollary to the new method above.
3703
3704	* SoObjects/Appointments/SOGoFreeBusyObject.m
3705	(-fetchFreeBusyInfosFrom:to:): add off-hours if defaults
3706	SOGoBusyOffHours is true.
3707
37082011-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3709
3710	* OpenChange/MAPIStoreFolder.m
3711	(-moveCopyMessagesWithMID:fromFolder:withMID:wantCopy:): ensure
3712	that "data" is not NULL before passing it to
3713	set_SPropValue_proptag as it might be converted to a PT_ERROR
3714	value.
3715	(-moveCopyMessageWithMID:fromFolder:withMID:wantCopy:): fixed
3716	method name. Added PR_CHANGE_KEY and PR_PREDECESSOR_CHANGE_LIST to
3717	list of excluded properties.
3718
3719	* SoObjects/Mailer/SOGoDraftObject.m (-sendMailAndCopyToSent:):
3720	renamed "sendMail" and made copying the messsage to the sent
3721	folder opetional.
3722	(-sendMail): new method that invokes the above one with "yes".
3723
3724	* OpenChange/MAPIStoreMemMailMessage.m (-save): fixed "subject"
3725	header, "to" and other recipients. Fixed "content-type", that was
3726	deduced after "message" was generated. Take the client-provided
3727	PR_CHANGE_KEY into account to avoid synchronisation errors.
3728
3729	* OpenChange/MAPIStoreDraftsMessage.m (-_commitProperties): make
3730	use of "PR_SUBJECT_PREFIX_UNICODE" and
3731	"PR_NORMALIZED_SUBJECT_UNICODE" to construct the "subject" header.
3732	(-submit): invoke the new "-sendMailAndCopyToSent:" method with
3733	"NO".
3734
3735	* OpenChange/MAPIStoreMailMessage.m (-getPrChangeKey:inMemCtx)
3736	(-getPrPredecessorChangeList:inMemCtx): when a record is not
3737	returned, invoke the container's synchroniseCache method, as was
3738	done in -objectVersion.
3739
3740	* OpenChange/MAPIStoreMailFolder.m (-synchroniseCache): renamed
3741	local var "folderWasModified" to "foundChange", as in
3742	MAPIStoreGCSFolder's version. Fixed a bug where "foundChange"
3743	would be reset to NO when deletes were not found, even if new
3744	elements were detected.
3745
37462011-09-23  Francis Lachapelle  <flachapelle@inverse.ca>
3747
3748	* UI/PreferencesUI/UIxPreferences.m (-defaultCalendarList, -itemCalendarText,
3749	-userDefaultCalendar, -setUserDefaultCalendar:): new methods to
3750	show a popup menu for the new defaults SOGoDefaultCalendar. This
3751	option sets which calendar is used when creating an event or a
3752	task (selected, personal, first enabled).
3753
3754	* UI/WebServerResources/SchedulerUI.js (eventsListCallback):
3755	events are always editable and erasable for superusers.
3756	(newEvent): added supported for the new defaults SOGoDefaultCalendar.
3757
37582011-09-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3759
3760	* OpenChange/MAPIStoreGCSMessage.m (-getPrChangeKey:inMemCtx:):
3761	first force a synchronisation of the parent cache if the change key
3762	cannot be retrieved and invoke abort if the change key is still
3763	not available afterwards.
3764
3765	* OpenChange/MAPIStoreMailMessage.m (-getPrChangeKey:inMemCtx:):
3766	same as above.
3767
3768	* OpenChange/MAPIStoreMailFolder.m (-lastMessageModificationTime):
3769	invoke "synchroniseCache" in order to make sure we return the real
3770	last modification time.
3771	(-synchroniseCache): improved to increment the last modification
3772	time when messages have been deleted.
3773
3774	* OpenChange/SOGoMAPIFSMessage.m (-mapistoreMessageClass): method
3775	implemented poorly (but work for now) and that differentiates
3776	between the MAPIStoreMessage classes based on certain elements in
3777	their folder path.
3778
3779	* OpenChange/MAPIStoreFolder.m (-messageClass): removed method,
3780	replaced with the new mechanism below.
3781
3782	* OpenChange/NSObject+MAPIStore.h (-mapistoreMessageClass): new
3783	category method that returns the proper MAPIStoreMessage wrapper
3784	class from instances of SOGoObject and children classes.
3785
37862011-09-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
3787
3788	* OpenChange/MAPIStoreContactsMessage.m
3789	Added more field mappings (surname, given name,
3790	middle name, etc.)
3791
37922011-09-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3793
3794	* OpenChange/MAPIStoreMailFolder.m (-createMessage): return a MAPIStoreMemMailMessage.
3795
3796	* OpenChange/SOGoMemMessage.m: new class that only provides a
3797	temporary (memory-based) dictionary of Exchange attributes.
3798	Similar to SOGoMAPIFSMessage except for the ability to save the
3799	dictionary in question.
3800
3801	* OpenChange/MAPIStoreMemMailMessage.m: new class that enables the
3802	saving of composed mail messages, during the different copy
3803	operations.
3804
3805	* OpenChange/MAPIStoreDraftsMessage.m (-getPrChangeKey)
3806	(-getPrPredecessorChangeList:inMemCtx:): return
3807	MAPISTORE_ERR_NOT_FOUND.
3808	(-getPidLidImapDeleted:inMemCtx:, -getPrInternetMessageId:inMemCtx:): same
3809	as above.
3810
3811	* OpenChange/MAPIStoreMailFolder.m (-[MAPIStoreDraftsFolder
3812	messageClass, createMessage]): restore methods.
3813
3814	* OpenChange/MAPIStoreFolder.m
3815	(-moveCopyMessagesWithMIDs:andCount:fromFolder:withMIDs:wantCopy:):
3816	adapted to be invoked from the target folder.
3817	Implemented generic version for specialized folders lacking an
3818	implementation and for copying/moving items across folders of
3819	different types.
3820	(-postNotificationsForMoveCopyMessagesWithMIDs:andMessageURLs:andCount:fromFolder:withMIDs:wantCopy:):
3821	new helper method that performs the whole notification magic for
3822	message moves.
3823
3824	* OpenChange/MAPIStoreSOGo.m (sogo_folder_move_copy_messages):
3825	adapted to last backend changes.
3826
38272011-09-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3828
3829	* OpenChange/MAPIStoreMailFolder.m
3830	(-moveCopyMessagesWithMIDs:andCount:toFolder:withMIDs:wantCopy:):
3831	improved by acting directly on source and dest MIDs, by handling
3832	multiple messages at once and by accepting proper UID ranges in
3833	the COPYUID response.
3834
3835	* OpenChange/MAPIStoreSOGo.m (sogo_folder_move_copy_messages):
3836	adapted to new backend prototype.
3837
3838	* OpenChange/MAPIStoreFolder.m (-createMessage): reverse the
3839	specification of the "mid" parameter as the copy/move hack in
3840	MAPIStoreMailFolder is no longer needed.
3841
38422011-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3843
3844	* OpenChange/MAPIStoreObject.m (-getReplicaKeyFromGlobCnt:): new
3845	method that returns the same result as
3846	getReplicaKey:fromGlobCnt:inMemCtx: in the form of an NSData
3847	instance.
3848
3849	* OpenChange/MAPIStoreContactsMessage.m (-save): same as below.
3850
3851	* OpenChange/MAPIStoreTasksMessage.m (-save): same as below.
3852
3853	* OpenChange/MAPIStoreCalendarMessage.m (-save): set the
3854	PR_CHANGE_KEY to the value passed by the client after the version
3855	cache has been updated a first time.
3856
3857	* OpenChange/MAPIStoreMailMessage.m (-getPrChangeKey:inMemCtx:,
3858	(-getPrPredecessorChangeList:inMemCtx:): same as below.
3859
3860	* OpenChange/MAPIStoreGCSMessage.m (-getPrChangeKey:inMemCtx:,
3861	(-getPrPredecessorChangeList:inMemCtx:): wrapper accessors around
3862	the getters defined in MAPIStoreGCSFolder below.
3863
3864	* OpenChange/MAPIStoreMailFolder.m
3865	(-setChangeKey:forMessageWithKey:, -changeKeyForMessageWithKey:)
3866	(-predecessorChangeListForMessageWithKey:): same as below.
3867
3868	* OpenChange/MAPIStoreGCSFolder.m (-changeKeyForMessageWithKey:)
3869	(-predecessorChangeListForMessageWithKey:)
3870	(-setChangeKey:forMessageWithKey: (NSString *) messageKey): new
3871	methods for retrieving or setting the PR_CHANGE_KEY for the
3872	specified record. The PR_PREDECESSOR_CHANGE_LIST is also handled,
3873	albeit set automatically.
3874
3875	* OpenChange/NSString+MAPIStore.m (+stringWithGUID:)
3876	(-extractGUID:): new wrapper methods around the GUID utility
3877	functions in libndr.
3878
3879	* OpenChange/NSData+MAPIStore.m (+dataWithXID: asXIDInMemCtx:):
3880	new method to handle XID structs.
3881	(-appendUInt8, -appendUInt32): new methods to easily append
3882	integer values.
3883
38842011-09-19  Ludovic Marcotte  <lmarcotte@inverse.ca>
3885
3886	* OpenChange/MAPIStoreDraftsMessage.m: (_commitProperties)
3887	We now correctly handle the "importance" property
3888
3889	* Added handling of PR_IMPORTANCE and PidLidBusyStatus
3890	for event objects
3891
38922011-09-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
3893
3894	* SoObjects/Mailer/SOGoMailBaseObject.m: (imap4Connection):
3895	Cache "corruption" bug fix that could lead us to using the
3896	wrong IMAP connection for OpenChange users
3897
3898	* OpenChange/MAPIStoreMapping.m: (unregisterURLWithID:)
3899	We also remove the keys/values from the indexing database
3900
3901	*  OpenChange/MAPIStoreSOGo.m
3902	RopMoveCopyMessages, RopCopyTo and messages move/copy
3903	notifications support for messages
3904
3905	* OpenChange/MAPIStoreContactsMessage.m: massive improvements
3906	to support many new properties
3907
3908	* OpenChange/MAPIStoreTasksMessage.m: massive improvements
3909	to support many new properties
3910
3911	* OpenChange/MAPIStoreFolder.m: (getPrAccess:inMemCtx:) fixed
3912	permissions issue - we were returning a wrong value leading to
3913	IMAP subfolders not being "writable"
3914
3915	* SoObject/Mailer/SOGoMailFolder.m (prefetchCoreInfosForMessageKeys:)
3916	Fixed a MAJOR issue regarding keys handling. We should NEVER assume
3917	the untagged IMAP response's order will be the same as the FETCH's one!
3918
3919	* SoObjects/Mailer/SOGoMailBaseObject.m: (imap4Connection) We now
3920	ensure the context is valid to properly get the user's login by
3921	using the container's context if the current one is nil
3922
3923	* OpenChange/MAPIStoreMailFolder.m: (moveCopy...) Cleaned up some
3924	code and we now also correctly send notification updates for the
3925	destination folder
3926
39272011-09-04  Ludovic Marcotte  <lmarcotte@inverse.ca>
3928
3929	* OpenChange/MAPIStoreMapping.m: (MAPIStoreMappingTDBTraverse())
3930	Fixed a major issue regarding the use of strtoll. It was overflowing
3931	keys as they are unsigned long long int. We now make use of strtoull
3932	which fixes the problem and avoids major cache corruption of the
3933	indexing.tdb database (per user).
3934
3935	* OpenChange/MAPIStoreSOGo.m: Some cleanups to ease current and
3936	future debugging
3937
39382011-08-18  Francis Lachapelle  <flachapelle@inverse.ca>
3939
3940	* UI/WebServerResources/UIxContactEditor.js
3941	(regenerateCategoriesMenu): register the onMenuClickHandler
3942	function on the mouse down event instead of the click event, since
3943	the contextual menu is hidden on the mouse down event. This fixes
3944	the bug where a predefined category could never be selected from
3945	the combo box.
3946
39472011-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3948
3949	* OpenChange/MAPIStoreMailFolder.m
3950	(-[MAPIStoreMailFolder createFolder:withFID:inContainer:): new method
3951	that enables the specification of a SOGo object container.
3952	(-[MAPIStoreMailFolder createFolder:withFID:): rewritten method to make
3953	use of the above.
3954	(-[MAPIStoreInboxFolder createFolder:withFID:): rewritten method to make
3955	use of the above, with the choice container depending on the
3956	"usesAltNamespace" ivar.
3957	(-[MAPIStoreInboxFolder initWithURL:inContext:): overriden method
3958	to initialize the "usesAltNamespace" ivar based on the flags set
3959	on the "INBOX" folder.
3960	(-[MAPIStoreInboxFolder
3961	folderKeysMatchingQualifier:andSortOrderings:])
3962	(-[MAPIStoreInboxFolder lookupFolder:]):
3963	overriden methods to make use of "usesAltNamespace".
3964	(-[MAPIStoreMailFolder _imapFolderNameRepresentation:): new
3965	private method that combines the SOGo representation of an IMAP
3966	folder leaf, without the "folder" prefix, with the current folder
3967	as parent.
3968	(-[MAPIStoreMailFolder _cleanupSubfolderKeys:): new private method
3969	that tests the list of children keys passed as parameter and
3970	compare each one of them with the special folders: trash, sent and
3971	drafts and those that are found.
3972	(-[MAPIStoreInboxFolder _imapFolderNameRepresentation:): overriden
3973	method by taking the "altnamespace" ivar into account.
3974
3975	* SoObjects/Mailer/SOGoMailAccount.m
3976	(-toManyRelationshipKeysWithNamespaces:): new method, superseding
3977	"toManyRelationshipKeys" that enables the returning of namespaces
3978	"folders" or not.
3979
3980	* OpenChange/MAPIStoreMailMessage.m (-objectVersion): updated code
3981	as in MAPIStoreGCSMessage's version.
3982
3983	* OpenChange/MAPIStoreMailFolder.m (-messageTable): we no longer
3984	cache the table object as we don't want to assign different
3985	handles to the same memory object, causing inconsistencies with
3986	tables instantiated twice with different parameters.
3987
39882011-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3989
3990	* SoObjects/Mailer/SOGoMailFolder.m
3991	(-lookupName:inContext:acquire:): fixed a crash occurring when the
3992	key didn't end with ".eml".
3993
39942011-08-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
3995
3996	* OpenChange/MAPIStoreMailMessageTable.m
3997	(-getRow:withRowID:andQueryType:inMemCtx:): overriden method to
3998	prefetch the "core infos" of messages that are going to be
3999	fetched.
4000
40012011-08-12  Francis Lachapelle  <flachapelle@inverse.ca>
4002
4003	* UI/WebServerResources/HTMLElement.js (refreshSelectionByIds):
4004	replaced the call to the Prototype method "down" in favor to a
4005	global access with the element ID. This fixes a multiple-message
4006	selection issue with IE.
4007
40082011-08-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4009
4010	* SoObjects/Mailer/SOGoMailFolder.m
4011	(-prefetchCoreInfosForMessageKeys:): new method that enables the
4012	prefetching and caching of "core infos" for messages.
4013	(-lookupName:inContext:acquire:): looked up messages are now fed
4014	with their cached core infos, if present.
4015
4016	* SoObjects/Mailer/SOGoMailObject.m: (addFlags:, removeFlags:)
4017	release "coreInfos" rather than flagsCache, which has been
4018	obsoleted.
4019	(_hasFlag:): make use of "coreInfos" to fetch the flags since most
4020	of the time the other infos will be fetch for the same object,
4021	bringing a 30ms speedup per message.
4022	(-setCoreInfos): new accessor that enables setting coreInfos from
4023	an external object.
4024	(+initialize): coreInfoKeys was renamed to SOGoMailCoreInfoKeys
4025	and has now been published.
4026
4027	* OpenChange/MAPIStoreTable.m (-setHandleId:): only register the
4028	table in the notification cache if the provided handle id is not
4029	null.
4030
4031	* OpenChange/MAPIStoreCalendarMessage.m (-save): resynchronise the
4032	container cache after the operation.
4033
4034	* OpenChange/MAPIStoreTasksMessage.m (-save): resynchronise the
4035	container cache after the operation.
4036
4037	* OpenChange/MAPIStoreContactsMessage.m (-save): resynchronise the
4038	container cache after the operation.
4039
4040	* OpenChange/MAPIStoreGCSMessage.m (-objectVersion): ensure that a
4041	change number is available when the message is "not new", but
4042	resynchronise the cache in doing so.
4043
4044	* OpenChange/MAPIStoreSOGo.m (sogo_table_handle_destructor): added
4045	new backend operation.
4046
4047	* OpenChange/NSAutoreleasePool+MAPIStore: removed module since it
4048	was a lot of code to handle one specific case.
4049
4050	* OpenChange/MAPIStoreGCSMessageTable.m
4051	(-evaluatePropertyRestriction:intoQualifier:): create a local
4052	talloc context and free it at the end when generating a new date
4053	restriction.
4054
4055	* OpenChange/plreader.m (-displayKey:withIndentation:): display
4056	alternative hex representation of the keys.
4057
40582011-08-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4059
4060	* OpenChange/MAPIStoreFSFolderTable.[hm]: new module.
4061
4062	* OpenChange/MAPIStoreFSFolder.m (-folderTable): overriden method
4063	to return a "MAPIStoreFSFolderTable" instance.
4064	(-folderKeysMatchingQualifier:andSortOrderings:): overriden method
4065	in order to evaluate folders by applying the received qualifer to
4066	the properties message.
4067
4068	* OpenChange/MAPIStoreFolder.m (-objectVersion): implemented
4069	method based on the value provided in the folder props dictionary.
4070	(-propertiesMessage): new getter.
4071
4072	* OpenChange/MAPIStoreObject.m (-objectVersion): now a mandatory
4073	method for subclasses.
4074
40752011-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4076
4077	* OpenChange/MAPIStoreMapping.m
4078	(+mappingForUsername:withIndexing:): modified contrusctor to make
4079	use of a "username" parameter that enable per-user "singletons".
4080	(-increateUseCount, -decreaseUseCount): new accessors that enable
4081	the registration/unregistration of the mapping object from the
4082	singleton registry.
4083
40842011-08-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4085
4086	* OpenChange/MAPIStoreFolder.m (-lookupMessage:): set the WOContext
4087	of the resulting SOGoObject to the value attached to the current
4088	MAPIStoreContext.
4089
4090	* OpenChange/MAPIStoreCalendarMessageTable.m
4091	(-evaluatePropertyRestriction:intoQualifier:): implemented
4092	searches on PR_OWNER_APPT_ID in order to enable the retrieval of
4093	the requested invitation.
4094
4095	* OpenChange/MAPIStoreCalendarMessage.m (-save): fixed attendees
4096	handling (only change the attendee partstat) and avoid saving the
4097	event when the newpartstat is "undefined".
4098
4099	* OpenChange/MAPIStoreAppointmentWrapper.m
4100	(-getPrOwnerApptId:inMemCtx:): properly reimplemented the method
4101	following the spec.
4102	(-getPidLidServerProcessed:inMemCtx:): now returns yes in order to
4103	prevent the client from uselessly updating the event.
4104
4105	* OpenChange/MAPIStoreMailMessage.m
4106	(-getPrReplyRequested:inMemCtx:): commented out method.
4107	(-getPrResponseRequested:inMemCtx:): returns NO when the message
4108	is an invitation, as the mail handling is performed internally by
4109	SOGo.
4110	(-getPrOwnerApptId:inMemCtx:): properly forwards the call to
4111	MAPIStoreAppointmentWrapper when required.
4112	(-getPidLidMeetingType:inMemCtx:): new method.
4113
4114	* OpenChange/MAPIStoreContext.m (-activeUser): new helper method.
4115
4116	* OpenChange/MAPIStoreSOGo.m (sogo_backend_init): invoke
4117	-activateApplication on the new app in order to make it accessible
4118	via [WOApplication application].
4119
4120	* SoObjects/Appointments/SOGoAppointmentFolder.m
4121	(-lookupCalendarFoldersForUID:): make use of -[SOGoUser
4122	lookupCalendarFoldersForUID:].
4123
4124	* SoObjects/Appointments/SOGoAppointmentObject.m
4125	(_handleAttendee:withDelegate:ownerUser:statusChange:inEvent:):
4126	enable updating the attendee's calendar when a WORequest is not
4127	available at all, for example from OpenChange.
4128
41292011-08-05  Francis Lachapelle  <flachapelle@inverse.ca>
4130
4131	* UI/Contacts/UIxContactView.m (-contactCardTitle): removed this
4132	method since we no longer prefix the contact name by a label
4133	("Card For").
4134	(-_cardStringWithLabel:value:url:): new method that wraps the
4135	value with an <A> link with the specified URL type. Used for
4136	telephone numbers.
4137
41382011-08-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4139
4140	* OpenChange/MAPIStoreAppointmentWrapper.m
4141	(-getPidLidGlobalObjectId:inMemCtx:)
4142	(-getPidLidCleanGlobalObjectId:inMemCtx:): reimplemented methods
4143	by following the spec carefully (MS-OXICAL: 2.1.3.1.1.20.26).
4144
4145	* OpenChange/NSString+MAPIStore.m (-convertHexStringToBytes): new
4146	method that returns an NSData from a string of hex values
4147	represented as text.
4148
41492011-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4150
4151	* OpenChange/MAPIStoreDraftsMessage.m (-getMessageData:inMemCtx:):
4152	overriden method.
4153	Made module able to handle SOGoMailObject as well, since we can
4154	possibly have such objects as value for sogoObject.
4155	(-getPrImportance:inMemCtx:): overriden method.
4156	(-getPrReceivedByEmailAddress:inMemCtx:): overriden method.
4157	(-getPrSenderEmailAddress:inMemCtx:): overriden method.
4158	(-getPrDisplayCc:inMemCtx:): overriden method.
4159
4160	* OpenChange/MAPIApplication.m (+isCachingEnabled): new overriden
4161	method that returns "NO" in order to avoid leaking dictionaries
4162	that we don't use since we are not WO-based.
4163
4164	* OpenChange/MAPIStoreMapping.m (-initWithIndexing:)
4165	(-registerURL:withID:): removed noisy warnings.
4166
4167	* OpenChange/MAPIStoreSOGo.m (sogo_backend_create_context):
4168	adaoted to new prototype.
4169
41702011-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4171
4172	* OpenChange/MAPIStoreFolder.m (-permissionsTable): new method
4173	that returns a permissions table for the current folder.
4174
4175	* OpenChange/MAPIStorePermissionsTable.[hm]: new class module for
4176	handling permission objects. Currently only provide stub entries
4177	for the "anonymous" and "default" users.
4178
4179	* OpenChange/MAPIStoreContactsMessageTable.m
4180	(-evaluateContentRestriction:intoQualifier:): overriden method in
4181	order to evaluate PR_MESSAGE_CLASS_UNICODE.
4182	(-evaluatePropertyRestriction:intoQualifier:): added stub support for
4183	PidLidAddressBookProviderArrayType,
4184	PidLidAddressBookProviderEmailList and real support for
4185	PidLidEmail[123]OriginalDisplayName.
4186
4187	* OpenChange/MAPIStoreTable.m (-operatorFromRestrictionOperator):
4188	code split from -evaluatePropertyRestriction:intoQualifier: and
4189	exposed for external use.
4190
41912011-08-02  Francis Lachapelle  <flachapelle@inverse.ca>
4192
4193	* UI/WebServerResources/MailerUI.js (_onMenuLabelFlagX): fixed a
4194	bug when changing the flag of multiple messages.
4195
4196	* UI/WebServerResources/SOGoRootPage.js (onLoginClick): reset
4197	error message (if any) when login in.
4198
41992011-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4200
4201	* OpenChange/MAPIStoreFSMessage.m
4202	(-getAvailableProperties:inMemCtx:): take only NSNumber keys into
4203	account.
4204
42052011-07-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4206
4207	* OpenChange/MAPIStoreTable.m (-dealloc): free the list of
4208	columns, otherwise the last list set is leaked.
4209
42102011-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4211
4212	* OpenChange/MAPIStoreSOGo.m (sogo_folder_get_deleted_fmids):
4213	implemented new backend method.
4214
4215	* OpenChange/MAPIStoreTable.m (-loggingPrefix): removed method as
4216	it was causing crashes when the parent object was deallocated.
4217
4218	* SoObjects/Mailer/SOGoMailFolder.m (-statusForFlags:): new method
4219	that returns the values of flags passed as parameters.
4220	(-fetchUIDsOfVanishedItems:): new method that returns the list of
4221	UID that are reported to have vanished since the specified modseq.
4222
42232011-07-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4224
4225	* OpenChange/MAPIStoreGCSMessageTable.m
4226	(-evaluatePropertyRestriction:intoQualifier:): now handles
4227	PR_CHANGE_NUM using the new methods below.
4228
4229	* OpenChange/MAPIStoreGCSMessage.m (-objectVersion): overriden
4230	method to make use of -[MAPIStoreGCSFolder
4231	changeNumberForMessageWithKey:].
4232
4233	* OpenChange/MAPIStoreGCSFolder.m (-initWithURL:inContext:)
4234	(initWithSOGoObject:inContainer:): initialise the new
4235	"versionsMessage" ivar, pointing to a SOGoMAPIFSMessage object
4236	that includes versioning information.
4237	(-lastMessageModificationTime): return the date value stored in
4238	"versionsMessage".
4239	(-synchroniseCache): new method that updates "versionsMessage"
4240	differentually with versioning data from the server.
4241	(-lastModifiedFromMessageChangeNumber:): new helper method that returns
4242	the corresponding c_lastmodified from a MAPI change number.
4243	(-changeNumberForMessageWithKey:): new helper method that returns the
4244	version number associated with a message.
4245
4246	* OpenChange/MAPIStoreMailMessageTable.m
4247	(-evaluatePropertyRestriction:intoQualifier:): now handles
4248	PR_CHANGE_NUM using the new methods below.
4249
4250	* OpenChange/MAPIStoreMailMessage.m (-objectVersion): overriden
4251	method to make use of -[MAPIStoreMailFolder
4252	changeNumberForMessageUID:].
4253
4254	* OpenChange/MAPIStoreMailFolder.m (-initWithURL:inContext:)
4255	(initWithSOGoObject:inContainer:): initialise the new
4256	"versionsMessage" ivar, pointing to a SOGoMAPIFSMessage object
4257	that includes versioning information.
4258	(-lastMessageModificationTime): return the date value stored in
4259	"versionsMessage".
4260	(-synchroniseCache): new method that updates "versionsMessage"
4261	differentually with versioning data from the server.
4262	(-modseqFromMessageChangeNumber:): new helper method that returns
4263	the corresponding IMAP "modseq" from a MAPI change number.
4264	(-messageUIDFromMessageKey:): new helper method.
4265	(-changeNumberForMessageUID:): new helper method that returns the
4266	version number associated with a message.
4267
4268	* OpenChange/MAPIStoreTable.m (-loggingPrefix): overriden method
4269	in order to get more useful informations.
4270
4271	* OpenChange/MAPIStoreObject.m (-loggingPrefix): overriden method
4272	in order to get more useful informations.
4273
4274	* OpenChange/MAPIStoreFSMessageTable.m
4275	(-evaluatePropertyRestriction:intoQualifier:): overriden method to
4276	handle PR_CHANGE_NUM, based on the messages version number.
4277
4278	* OpenChange/MAPIStoreFSMessage.m (-objectVersion): overriden
4279	method to retrieve the object version from the "version" attribute
4280	in the properties list.
4281	(-save): update the "version" attribute in the saved property list
4282	from openchangedb.
4283
4284	* OpenChange/MAPIStoreAppointmentWrapper.m
4285	(-getPidLidGlobalObjectId:inMemCtx:): work-around certain buggy
4286	events which might now have a "CREATED" element.
4287
4288	* OpenChange/MAPIStoreContactsMessage.m: commented out
4289	"-getPrOabName:inMemCtx:" and "-getPrOabLangid:inMemCtx:" as they
4290	seem to be useful only for contact lists.
4291
4292	* OpenChange/MAPIStoreFolder.m
4293	(-faiMessageKeysMatchingQualifier:andSortOrderings:):
4294	reimplemented method to make use of the new method below.
4295
4296	* OpenChange/SOGoMAPIFSFolder.m
4297	(-toOneRelationshipKeysMatchingQualifier:andSortOrderings:): moved
4298	method from -[MAPIStoreFSFolder
4299	messageKeysMatchingQualifier:andSortOrderings:] in order to make
4300	it available to all the SOGoMAPIFSFolder clients.
4301
4302	* OpenChange/MAPIStoreContext.m (-getNewChangeNumber): new
4303	utility method that returns a change number from the mapistore db
4304	via the openchangedb API.
4305
4306	* OpenChange/SOGoMAPIFSMessage.m (-save): serialize the properties
4307	dictionary in binary plist format to avoid GNUstep bugs where
4308	high unsigned long long values are not parsed properly.
4309	(-properties): corrolary to the above change.
4310
4311	* OpenChange/NSArray+MAPIStore.m (-asArrayOfUnicodeStringsInCtx:):
4312	the return type is now "struct WStringArray_r *".
4313
4314	* OpenChange/NSString+MAPIStore.m (-asUnicodeInMemCtx): return an
4315	empty string when length == 0, otherwise the resulting pointer
4316	will be NULL.
4317
4318	* OpenChange/plreader.m: new test tool to dump property lists
4319	independently from their serialization format.
4320
43212011-07-27  Francis Lachapelle  <flachapelle@inverse.ca>
4322
4323	* SoObjects/SOGo/SOGoUserFolder.m (-ownerInContext:): in case the
4324	user domain is specified in the URL but not in the user login
4325	name, we remove it (user@domain => user).
4326
4327	* SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): drop
4328	the domain from the login name when loginDomains are enabled but
4329	domain-based UID is disabled.
4330
43312011-07-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4332
4333	* OpenChange/MAPIStoreMailFolderTable.[hm]: removed useless class.
4334
4335	* OpenChange/MAPIStoreTable.m (-lookupChild:)): new method that
4336	subclasses must override and that a child object matching the
4337	table type.
4338
4339	* OpenChange/MAPIStoreObject.m (-lookupChild:): removed method as
4340	it was too generic. Each subclass has now its own set of
4341	specialized methods.
4342	(-childKeysMatchingQualiflier:andSortOrderings:) same as above.
4343
4344	* OpenChange/MAPIStoreMessage.m (-lookupAttachment:): new method,
4345	replacing -[MAPIStoreObject lookupChild:].
4346	(-attachmentKeysMatchingQualiflier:andSortOrderings:) same as
4347	above, replacing (-[MAPIStoreObject
4348	childKeysMatchingQualiflier:andSortOrderings:]).
4349
4350	* OpenChange/MAPIStoreFolder.m (-lookupFolder:, -lookupMessage:)
4351	(-lookupFAIMessage:): new methods, replacing -[MAPIStoreObject
4352	lookupChild:].
4353	(-messageKeysMatchingQualiflier:andSortOrderings:) same as
4354	above, replacing (-[MAPIStoreObject
4355	childKeysMatchingQualiflier:andSortOrderings:]).
4356	(-faiMessageKeysMatchingQualiflier:andSortOrderings:) same as
4357	above, replacing (-[MAPIStoreObject
4358	childKeysMatchingQualiflier:andSortOrderings:]).
4359	(-folderKeysMatchingQualiflier:andSortOrderings:) same as
4360	above, replacing (-[MAPIStoreObject
4361	childKeysMatchingQualiflier:andSortOrderings:]).
4362
43632011-07-26  Francis Lachapelle  <flachapelle@inverse.ca>
4364
4365	* UI/MailerUI/UIxMailListActions.m
4366	(-getUIDsInFolder:withHeaders:): we check if the array of messages
4367	UIDs is nil prior adding it to the returned dictionary.
4368
43692011-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4370
4371	* SoObjects/Mailer/SOGoMailAccount.m (-hasCapability): new proxy
4372	method that determines whether an IMAP capability is present on
4373	the server.
4374	(-supportsQResync): new method that returns whether the server
4375	supports the "QRESYNC" capability.
4376
43772011-07-25  Francis Lachapelle  <flachapelle@inverse.ca>
4378
4379	* UI/MainUI/SOGoRootPage.m (-connectAction): don't add the domain
4380	if domain-based UIDs are not enabled.
4381	(-changePasswordAction): idem.
4382
4383	* SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): added
4384	test for the ivar "realUID" since it can be undefined if the
4385	corresponding source is down.
4386
43872011-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4388
4389	* OpenChange/MAPIStoreSOGo.m (sogo_table_get_row_count): added new
4390	backend operation.
4391
4392	* Tests/Unit/SaxXMLReaderFactory+SOGoTests.m: new module offering
4393	a category on SaxXMLReaderFactory that enables finding our NGCards
4394	SAX driver in our source directories.
4395
43962011-07-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4397
4398	* OpenChange/MAPIStoreMailMessage.m: make use of the new class
4399	below for calendar contents.
4400
4401	* OpenChange/MAPIStoreCalendarMessage.m: make use of the new class
4402	below.
4403	(-save): handle invitation replies.
4404
4405	* OpenChange/MAPIStoreAppointmentWrapper.m: new wrapper class
4406	module that implements the getters for iCalEvent objects.
4407
44082011-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4409
4410	* OpenChange/MAPIStoreMailMessage.m (-subject): new overridable
4411	accessor common to certain properties.
4412
4413	* OpenChange/MAPIStoreObject.m: moved "-getEmptyString:inMemCtx:",
4414	"-getLongZero:inMemCtx:", "-getYes:inMemCtx:", "-getNo:inMemCtx:"
4415	into NSObject+MAPIStore.m
4416
4417	* OpenChange/MAPIStoreFolder.m (-lookupFolder:, -createMessage:):
4418	assign the parent context woContext to the newly created
4419	SOGoObject to enable access to "activeUser".
4420
4421	* SoObjects/SOGo/SOGoObject.m (-setContext, -context): new
4422	accessors for the "context" ivar.
4423
44242011-07-20  Francis Lachapelle  <flachapelle@inverse.ca>
4425
4426	* UI/WebServerResources/UIxMailToSelection.js
4427	(addressFieldLostFocus): call addressFieldChanged to validate the
4428	entry and split recipients in multiple fields.
4429
44302011-07-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4431
4432	* OpenChange/MAPIStoreCalendarMessage.m: reordered certain private
4433	methods.
4434	(-ownerTimeZone): moved into MAPIStoreObject.
4435
4436	* OpenChange/MAPIStoreMailMessage.m (-_setupBodyData): new
4437	centralized method that performs the common operations required to
4438	fetch the message body.
4439	(-getPrHtml:inMemCtx,-getPrBody:inMemCtx:): make use of the above
4440	method.
4441
4442	* SoObjects/SOGo/NSString+Utilities.m
4443	(-countOccurrencesOfString:): new self-explicit method.
4444
44452011-07-19  Francis Lachapelle  <flachapelle@inverse.ca>
4446
4447	* SoObjects/SOGo/SOGoUserFolder.m (-_davFetchUsersMatching:):
4448	append the domain to the username when SOGoEnableDomainBasedUID is
4449	set to YES. When using domains, fetch matching users from visible
4450	domains.
4451
44522011-07-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4453
4454	* OpenChange/NSString+MAPIStore.m (-asUnicodeInMemCtx:): use an
4455	alternative method to convert the string to a utf8 array of bytes
4456	to avoid an undefined conditional bug in GNUstep.
4457
44582011-07-18  Francis Lachapelle  <flachapelle@inverse.ca>
4459
4460	* SoObjects/SOGo/SOGoSystemDefaults.m (-enableDomainBasedUID): new
4461	method that returns the boolean value of the new system defaults
4462	SOGoEnableDomainBasedUID if at least one domain is defined.
4463
4464	* SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): try to
4465	extract the domain part of the login name only if the new system
4466	defaults SOGoEnableDomainBasedUID is set to YES. If the domain is not
4467	specified but SOGoEnableDomainBasedUID is enabled, add the domain to the
4468	login name.
4469
4470	* SoObjects/SOGo/SOGoUserManager.m
4471	(-contactInfosForUserWithUIDorEmail): try to extract the domain
4472	part of the login name only if the new system defaults
4473	SOGoEnableDomainBasedUID is set to YES..
4474
4475	* SoObjects/SOGo/SOGoSession.m
4476	(+decodeValue:usingKey:login:domain:password:): idem.
4477
4478	* SoObjects/SOGo/SOGoUserManager.m
4479	(-_sourceCheckLogin:andPassword:domain:perr:expire:grace:): the
4480	domain argument is now a pointer so it will be set according to
4481	the matching authentication source.
4482
4483	* UI/MainUI/SOGoUserHomePage.m (-usersSearchAction): only append
4484	the domain to the user's login if the new system defaults
4485	SOGoEnableDomainBasedUID is set to YES.
4486
44872011-07-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4488
4489	* OpenChange/MAPIStoreSOGo.m (sogo_backend_init): disable the use
4490	of the requests cache as objects are retained by the mapistore as
4491	needed.
4492
4493	* SoObjects/SOGo/SOGoCache.m (-disableRequestsCache): new method
4494	that adds the ability to not put requests object in the cache.
4495
4496	* OpenChange/MAPIStoreDraftsAttachment.m: removed useless class.
4497
4498	* OpenChange/MAPIStoreMessage.m (-createAttachment): moved method
4499	from MAPIStoreDraftsMessage
4500	(-childKeysMatchingQualifier:andSortOrderings:): same as above.
4501
4502	* OpenChange/*.m: make use of mapistore error code rather than
4503	MAPI ones.
4504
4505	* OpenChange/MAPIStoreMailMessage.m (-getPrHtml:inMemCtx:): fixed
4506	leak.
4507
4508	* OpenChange/MAPIStoreFolder.m (-createFolder:withRow:andFID:):
4509	fixed referencing of resulting folder.
4510	(+initialize): fixed initialization of MAPIStoreFAIMessageK.
4511	(-getTable:andRowCount:tableType:andHandleId:): properly return
4512	MAPISTORE_ERR_NOT_FOUND for tables that are not handled by the
4513	folder.
4514
45152011-07-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4516
4517	* OpenChange/MAPIStoreSOGo.m: finalized the new API.
4518
4519	* OpenChange/MAPIStoreTable.m: added memory debugging output.
4520
4521	* OpenChange/NSArray+MAPIStore.m (-asFoldersListInCtx:) removed
4522	useless method.
4523	(-asArrayOfUnicodeStringsInCtx:) properly connect the talloc
4524	hierarchy nodes.
4525
4526	* OpenChange/MAPIStoreSOGo.m: adapted to latest mapistore_backend
4527	nomenclature.
4528
45292011-07-14  Francis Lachapelle  <flachapelle@inverse.ca>
4530
4531	* UI/MailerUI/UIxMailListActions.m
4532	(-getUIDsInFolder:withHeaders:): don't add the quota if there's no
4533	quota for the mail account.
4534
4535	* UI/WebServerResources/UIxAttendeesEditor.js (onContactKeydown):
4536	fixed glitch when pressing the tab key from an empty input field.
4537	(onFreeBusyLoadHandler): removed redundant calls that were causing
4538	errors when retrieving the attendees freebusy information.
4539
4540	* UI/WebServerResources/SOGoTimePicker.js (onChange): specified
4541	the radix when calling parseInt since a string starting with 0
4542	would be parsed as an octal number.
4543
4544	* UI/WebServerResources/UIxAppointmentEditor.js (validateAptEditor): idem.
4545
45462011-07-14  Ludovic Marcotte <lmarcotte@inverse.ca>
4547
4548	* SoObjects/SOGo/SOGoGCSFolder.m (davCollectionTag)
4549	We now correctly cast the sync tag value.
4550
45512011-07-13  Francis Lachapelle  <flachapelle@inverse.ca>
4552
4553	* UI/WebServerResources/UIxAppointmentEditor.js (handleAllDay)
4554	(_setDate): fixed errors when event lasts all-day.
4555
4556	* SoObjects/Mailer/SOGoMailFolder.m
4557	(-deleteUIDs:useTrashFolder:inContext:): the withTrash argument is
4558	now a pointer since the method can modify it when the current
4559	folder is the trash folder.
4560
4561	* SoObjects/Contacts/SOGoContactSourceFolder.m
4562	(-_flattenedRecord:): added c_component key so the proper icon
4563	appears beside entries in the Web interface.
4564
4565	* UI/WebServerResources/generic.js (_showAlertDialog): added fade
4566	effect when showing or hiding a dialog box.
4567
45682011-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4569
4570	* OpenChange/MAPIStoreContext.m (-init): removed the messages
4571	cache dictionary, as its purpose has been superseeded by the
4572	features of the "POC api".
4573
4574	* OpenChange/MAPIStoreSOGo.m (sogo_op_openmessage)
4575	(sogo_op_createmessage): now return a "poc api"-compatible
4576	object.
4577	(sogo_op_savechangesmessage, sogo_op_submitmessage)
4578	(sogo_op_modifyrecipients): replaced methods with pocop
4579	implementations.
4580	(sogo_op_*attach*): methods to their final form'
4581	(sogo_op_get_fid_by_name): removed obsolete method.
4582	(sogo_op_release_record): removed obsolete method.
4583
4584	* OpenChange/NSObject+MAPIStore.m (MAPIStoreTallocWrapperDestroy):
4585	the object release now occurs within an NSAutoreleasePool.
4586
4587	* Tools/sogo-tool.m (main): instantiate SOGoSystemDefaults in
4588	order to properly inject the entries from SOGoDefaults.plist.
4589
45902011-07-12  Francis Lachapelle  <flachapelle@inverse.ca>
4591
4592	* UI/MailerUI/UIxMailFolderActions.m (-batchDeleteAction): we
4593	only return the quota when not using the trash folder.
4594
4595	* SoObjects/SOGo/SOGoFolder.m (-compare:): handle the case when
4596	the display name is not defined.
4597
4598	* UI/Scheduler/UIxCalListingActions.m
4599	(-_fetchFields:forComponentOfType:): test the calendar name and
4600	set it to an empty string if it's not defined.
4601
4602	* UI/Scheduler/UIxCalendarSelector.m (-calendars): idem.
4603
4604	* UI/WebServerResources/UIxCalendarProperties.js (onOKClick):
4605	refuses to save the properties if the calendar name is empty.
4606
4607	* UI/WebServerResources/SchedulerUI.js (updateCalendarProperties):
4608	Create a new text node in case the calendar has no name.
4609
46102011-07-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4611
4612	* OpenChange/MAPIStoreFSMessage.m
4613	(+getAvailableProperties:inMemCtx:): added memCtx parameter.
4614
4615	* OpenChange/MAPIStoreSOGo.m: (sogo_op_get_table_property)
4616	(sogo_op_get_available_table_properties)
4617	(sogo_op_set_restrictions,sogo_op_set_sort_order): removed
4618	obsolete methods.
4619
4620	* OpenChange/MAPIStoreCalendarMessageTable.m,
4621	OpenChange/MAPIStoreContactsMessageTable.m,
4622	OpenChange/MAPIStoreFAIMessageTable.m,
4623	OpenChange/MAPIStoreFSMessageTable.m,
4624	OpenChange/MAPIStoreMailMessageTable.m,
4625	OpenChange/MAPIStoreTasksMessageTable.m: overriden
4626	"+childObjectClass" to enable "getAvailableProperties:inMemCtx:"
4627	to work properly.
4628
4629	* OpenChange/MAPIStoreTable.m
4630	(-getRow:withRowID:andQueryType:inMemCtx:): slight change of
4631	prototype in order to leave the structure initialization to the
4632	backend.
4633
46342011-07-11  Francis Lachapelle  <flachapelle@inverse.ca>
4635
4636	* UI/Scheduler/UIxAppointmentEditor.m
4637	(-takeValuesFromRequest:inContext:): when switching from an
4638	all-day event to a non-all-day event, we must add the vTimeZone
4639	definition. The opposite is also fixed.
4640
4641	* SoObjects/Appointments/SOGoComponentOccurence.m
4642	(-prepareDelete): when deleting an occurrence of a floating
4643	all-day event, we must adjust the exception date to the user's timezone.
4644
4645	* SoObjects/Appointments/SOGoAppointmentFolder.m
4646	(-_flattenCycleRecord:forRange:intoArray:): when computing
4647	occurrences of a floating all-day event, we must also ajdust the
4648	exception dates to the user's timezone.
4649
46502011-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4651
4652	* OpenChange/*: made backend ops consistent with the talloc API,
4653	where resources are allocated in a tree of "talloc contexts".
4654
4655	* OpenChange/NSObject+MAPIStore.m (-tallocWrapper:): new method
4656	enabling the wrapping of obj-c objects into talloc structures, in
4657	order to ease memory management.
4658
46592011-07-08  Francis Lachapelle  <flachapelle@inverse.ca>
4660
4661	* UI/MailerUI/UIxMailListActions.m (-getUIDsAndHeadersInFolder)
4662	(-getSortedUIDsAction): both methods now return the inbox quota
4663	along with the other data.
4664
4665	* UI/MailerUI/UIxMailFolderActions.m (-batchDeleteAction): return
4666	the inbox quota when the messages were successfully deleted.
4667
4668	* SoObjects/Mailer/SOGoMailFolder.m
4669	(-deleteUIDs:useTrashFolder:inContext:): when not using the trash folder
4670	or when deleting a message within the trash folder, we now expunge the
4671	folder immediately.
4672
4673	* UI/WebServerResources/SOGoMailDataSource.js (init): quotas
4674	information can now be passed as argument. It will be passed back
4675	to the method "updateQuotas" from MailerUI.js.
4676
46772011-07-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4678
4679	* OpenChange/MAPIStoreContext.m (-openDir:): implemented.
4680	(-closeDir): added useful comments.
4681	(-_tableForFID:andTableType:, -openMessage:withMID:inFID:)
4682	(-createMessageWithMID:inFID:isAssociated:):
4683	(-getProperties:ofTableType:inRow:withMID:):
4684	(-setPropertiesWithFMID:ofTableType:inRow:):
4685	(-deleteMessageWithMID:inFID:withFlags:): make use of the new
4686	folder cache instead of using lookupFolderWithFID:, especially
4687	since the last ones now instantiates, caches and keep a usage
4688	count of the folders.
4689
4690	* OpenChange/MAPIStoreMailFolder.m (-lastMessageModificationTime):
4691	implemented method by making use of the new -[SOGoMailFolder
4692	mostRecentMessageDate] message, which is currently a more or less
4693	precise way to obtain the mailbox's last modification date.
4694	(-lastModificationTime): removed method.
4695
4696	* OpenChange/MAPIStoreObject.m (-setMAPIRetainCount:)
4697	(-mapiRetainCount:): moved methods from MAPIStoreMessage.
4698
4699	* OpenChange/MAPIStoreTable.m
4700	(-evaluateContentRestriction:intoQualifier:): temporarily
4701	commented out code initializing "operator" as this local var is
4702	never used.
4703
4704	* OpenChange/MAPIStoreFolder.m (-initWithSOstringByAddingPercentEscapesUsingEncodinGoObject:inContainer:):
4705	make use of -[NSString stringByAddingPercentEscapesUsingEncoding:]
4706	to properly escape folder names with non-ascii characters.
4707
4708	* OpenChange/MAPIStoreFSFolder.m (-createFolder:withFID:): same as
4709	above.
4710
4711	* OpenChange/MAPIStoreContext.m
4712	(+contextFromURI:withConnectionInfo:andFID:inMemCtx:): same as
4713	above.
4714
4715	* OpenChange/SOGoMAPIFSFolder.m (-initWithName:inContainer:):
4716	added method to properly initialize the "directory" ivar when
4717	initialized as a subfolder.
4718
4719	* OpenChange/MAPIStoreMailContext.m: MAPIStoreDeletedItemsContext
4720	is now temporarily a fs-based context.
4721
4722	* SoObjects/Mailer/SOGoMailFolder.m
4723	(_fetchMessageProperties:matchingQualifier:andSortOrderings::):
4724	properly implement this method, as properties should be an array
4725	instead of a dictionary.
4726	(-mostRecentMessageDate): new method that returns the date of the
4727	last available message.
4728
47292011-07-07  Francis Lachapelle  <flachapelle@inverse.ca>
4730
4731	* UI/WebServerResources/UIxListEditor.js (endEditable): when a
4732	string doesn't match an existing card, keep the entry but
4733	highlight it in red.
4734	(serializeReferences): when an entry is not associated to a card,
4735	extract the email and fullname from the string to create a new card.
4736
4737	* UI/Contacts/UIxListEditor.m (-setReferencesValue:): if a card
4738	reference doesn't match a known vCard UID, create a new vCard
4739	like Thunderbird does.
4740
4741	* UI/MainUI/SOGoUserHomePage.m (-_usersForResults:inDomain:):
4742	fixed bug when the domain was empty.
4743	(-usersSearchAction): idem.
4744
47452011-07-06  Ludovic Marcotte  <lmarcotte@inverse.ca>
4746
4747	* SoObjects/Mailer/NSData+Mail.m (bodyDataFromEncoding:)
4748	Consider "binary" just like 7 or 8bit.
4749
47502011-07-06  Francis Lachapelle  <flachapelle@inverse.ca>
4751
4752	* UI/WebServerResources/SchedulerUI.js (onShowCompletedTasks)
4753	(updateCalendarStatus): removed exception for Safari version prior
4754	to 3.
4755
47562011-07-05  Ludovic Marcotte  <lmarcotte@inverse.ca>
4757
4758	* UI/MailPartViewers/UIxMailPartICalActions.m
4759	(-_setupChosenEventAndEventObject:) we now correctly
4760	update the right event in the database in order to
4761	update major properties coming from external invitations
4762	during updates.
4763	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:)
4764	We check if uid is not nil prior comparing it to the
4765	owner. This fixes bug #1323
4766	* Added patches included in bug #1348 - which now allows
4767	group-based ACLs for IMAP.
4768	* SoObjects/SOGo/SOGoSieveManager.m: Added patch from
4769	bug #1344 - which fixes Sieve script generation errors
4770	for reject filters.
4771	* SOPE/GDLContentStore/GCSFolderManager.m (
4772	-_reallyCreateFolderWithName:andFolderType:...): Fix
4773	path handling for recent GNUstep base versions. This
4774	fixes bug #1327.
4775	* SoObjects/SOGo/LDAPSource.m (-checkLogin:password:...)
4776	We now make sure to use the original source's bindDN/password
4777	when looking up the user's DN for indirect binds. This should
4778	fix bug #1342.
4779
47802011-07-02  Ludovic Marcotte  <lmarcotte@inverse.ca>
4781
4782	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:)
4783	We now update the request's content in case we got participants
4784	with status change (for resources, for example)
4785
47862011-06-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4787
4788	* OpenChange/MAPIStoreSOGo.m (sogo_op_get_folders_list): method
4789	removed from struct mapistore_backend.
4790
4791	* OpenChange/MAPIStoreContext.m: the ldb connection handle to
4792	openchange.ldb is now passed via struct mapistore_connection_info.
4793
47942011-06-29  Ludovic Marcotte  <lmarcotte@inverse.ca>
4795
4796        * Added get/set/unset capabilities to sogo-tool to set
4797	user's defaults/settings. Refactored some code to be
4798	more cleanly structured.
4799
48002011-06-24  Francis Lachapelle  <flachapelle@inverse.ca>
4801
4802	* SoObjects/SOGo/SOGoSystemDefaults.m (-loginDomains): new method
4803	that returns the content of the defaults key SOGoLoginDomains, which
4804	is a list of domains that should be selectable from the Web login page.
4805	(-visibleDomainsForDomain:): new method that returns a list of
4806	domains visible from the specified domain and defined by the
4807	defaults key SOGoDomainsVisibility, which is a list of lists of domains.
4808
4809	* SoObjects/SOGo/SQLSource.m
4810	(-_lookupContactEntry:considerEmail:): when an IMAP login field is
4811	defined, only consider the value from the table if it's not null.
4812
4813	* SoObjects/SOGo/SOGoSession.m
4814	(+decodeValue:usingKey:login:domain:password:): now accepts the
4815	form login@domain. The domain must be part of the SOGoLoginDomains.
4816
4817	* SoObjects/SOGo/SOGoUserManager.m
4818	(-getImapLoginForUID:inDomain:): the method now accepts the
4819	user's domain.
4820	(_sourceCheckLogin:andPassword:domain:perr:expire:grace:): idem.
4821	(checkLogin:password:domain:perr:expire:grace:): idem.
4822	(_fillContactInfosForUser:withUIDorEmail:inDomain:): idem.
4823	(-contactInfosForUserWithUIDorEmail:inDomain:): idem.
4824	(-contactInfosForUserWithUIDorEmail:): now accepts the form login@domain.
4825
4826	* SoObjects/SOGo/SOGoWebAuthenticator.m (-checkCredentials:):
4827	perform the authentication in a domain when specified in the
4828	web session.
4829
4830	* SoObjects/Contacts/SOGoContactFolders.m (-appendSystemSources):
4831	when using domains, append addressbooks from visible domains.
4832
4833	* SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): now
4834	accepts the form login@domain.
4835	(-loginInDomain): new method. When bound to a domain, it returns
4836	the username part of the login.
4837
4838	* UI/MainUI/SOGoUserHomePage.m (-_usersForResults:inDomain:): was
4839	_usersResponseForResults:. Now returns only an array
4840	containing the matching users.
4841	(-usersSearchAction): added the results from the visible domains,
4842	if the defaults key SOGoDomainsVisibility is defined.
4843
4844	* UI/MainUI/SOGoRootPage.m (-connectAction): a domain from the
4845	defaults key SOGoLoginDomains can now be received.
4846
48472011-06-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4848
4849	* OpenChange/MAPIStoreTypes.h: removed PRIx64 definitions, that
4850	can be found in the libc inttypes.h.
4851
48522011-06-20  Francis Lachapelle  <flachapelle@inverse.ca>
4853
4854	* UI/WebServerResources/UIxAppointmentEditor.js (_getDate):
4855	retrieve the time using a regexp to insure a valid entry.
4856
4857	* UI/WebServerResources/MailerUI.js (onMenuEmptyTrashCallback):
4858	when emptying the trash folder, reset the unseen count and reset
4859	the reference to the last selected message.
4860
48612011-06-17  Francis Lachapelle  <flachapelle@inverse.ca>
4862
4863	* UI/WebServerResources/SOGoTimePicker.js (onChange): the
4864	semi-colon is no longer necessary. Also fixed the update the
4865	widget when manually entering a time.
4866
4867	* UI/WebServerResources/MailerUI.js (configureDraggables): added
4868	delay of 100ms before dragging starts.
4869
48702011-06-17  Ludovic Marcotte  <lmarcotte@inverse.ca>
4871
4872        * SOPE/NGCards/iCalEvent.m (setAllDayWithStartDate:duration:):
4873	We now correctly remove the duration value in case we're
4874	"converting" the event to an all-day one. This fixes
4875	bug #1312.
4876
48772011-06-16  Ludovic Marcotte  <lmarcotte@inverse.ca>
4878
4879	* UI/Contacts/UIxContactFolderActions.m (importLdifData:):
4880	Fixed folded lines import and base64 encoded values. Patch
4881	from bug #1251
4882
48832011-06-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4884
4885	* OpenChange/MAPIStoreSOGo.m (mapistore_init_backend): accept
4886	double registration seamlessly.
4887
4888	* SoObjects/Mailer/SOGoMailObject.m (-displayName): make use of
4889	the decoded subject.
4890
4891	* Tools/SOGoToolRenameUser.m: new sogo-tool module that updates
4892	the references after a change of user id for a specific user.
4893
4894	* SoObjects/SOGo/NSString+Utilities.m (-asSafeSQLString): new
4895	method that properly escape strings passed as values in SQL
4896	queries.
4897
48982011-06-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4899
4900	* OpenChange/MAPIStoreSpoolerContext.[hm]: new backend context.
4901
49022011-06-14  Francis Lachapelle  <flachapelle@inverse.ca>
4903
4904	* UI/WebServerResources/UIxAttendeesEditor.js: adjustments for the
4905	new SOGoTimePicker.
4906
49072011-06-13  Francis Lachapelle  <flachapelle@inverse.ca>
4908
4909	* UI/WebServerResources/SOGoTimePicker.js: new interface to add a
4910	time picker widget to an input field.
4911
4912	* UI/Scheduler/UIxTimeDateControl.m: replaced hours and minutes
4913	popup menu by one input field.
4914
4915	* UI/WebServerResources/UIxAppointmentEditor.js: idem.
4916
4917	* UI/WebServerResources/UIxTaskEditor.js: idem.
4918
4919	* UI/Scheduler/UIxAppointmentEditor.m (-newStartDate): round
4920	minutes to the nearest 15-minute.
4921
4922	* UI/Scheduler/UIxTaskEditor.m (-newStartDate): idem.
4923
49242011-06-08  Francis Lachapelle  <flachapelle@inverse.ca>
4925
4926	* UI/WebServerResources/MailerUI.js (initMailer): added the Thread
4927	column if missing from the columnsOrder user's defaults.
4928
49292011-06-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4930
4931	* OpenChange/*:
4932	- (context) cached last requested folder and table
4933	- (context) open folders are now cached in an nsdictionary
4934	- getPrLastModificationTime and getPrCreationTime are now
4935	centralized in MAPIStoreObject and rely on mandator lastModificationTime
4936	and creationTime methods on individual subclasses.
4937	- openMessage now takes a "struct mapistore_message **" argument.
4938	- MAPIStoreFSFolder can now create subfolders
4939	- converted MAPIStoreFolder to the new property API, by
4940	implementing one method per property.
4941
4942	* OpenChange/MAPIStoreMailMessage.m: (-getPrExpiryTime:) removed
4943	method as we don't want the message to appear as "expired".
4944	(-getPrOriginalSensitivity:): uppercased the "o" in "getPrOriginal..."
4945
4946	* OpenChange/MAPIStoreSOGo.m
4947	(sogo_pocop_get_available_table_properties): now takes a
4948	SPropTagArray ** argument.
4949	(sogo_pocop_get_available_properties): same as above.
4950	(sogo_op_get_available_table_properties): new, non-poc operation,
4951	to retrieve the list of available properties from a table.
4952
4953	* OpenChange/MAPIStoreTable.m (-notifyChangesForChild:): same as below.
4954
4955	* OpenChange/MAPIStoreContext.m
4956	(_saveOrSubmitChangesInMessageWithMID:andFlags:save:):
4957	mapistore_push_notification now takes a struct mapistore_context *
4958	as parameter.
4959	(-deleteMessageWithMID:inFID:withFlags:): same as above.
4960
49612011-06-06  Francis Lachapelle  <flachapelle@inverse.ca>
4962
4963	* UI/WebServerResources/MailerUI.js (configureLinksInMessage):
4964	when a link has the attribute moz-do-not-send set to true, remove
4965	it and force a new mailto href.
4966
49672011-06-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
4968
4969	* OpenChange/SOGoMAPIFSFolder.m (-creationTime)
4970	(-lastModificationTime): new self-explicit accessors.
4971	(-initWithURL:andTableType:): accept the "MAPISTORE_FOLDER_TABLE",
4972	for storing folder properties.
4973
4974	* OpenChange/SOGoMAPIFSMessage.m (-completeFilename): new method
4975	that returns the full filename for the property list file.
4976	(-appendProperties:) simplified method.
4977	(-save) removed obsolete hack.
4978	(-creationTime, -lastModificationTime): new self-explicit
4979	accessors.
4980
4981	* OpenChange/MAPIStoreSOGo.m (sogo_op_opendir): op_opendir no
4982	longer takes the parent fid as parameter.
4983
4984	* OpenChange/MAPIStoreCalendarMessageTable.m
4985	(-sortIdentifierForProperty:): c_isallday and c_creationdate as
4986	mappings for PidLidAppointmentSubType and PR_CREATION_TIME.
4987
4988	* OpenChange/MAPIStoreContext.m: MAPIStoreMapping instances are
4989	now per-user instances rather than class singletons.
4990
4991	* OpenChange/MAPIStoreMapping.m: now makes use of the records
4992	already present in indexing.tdb for building the initial mapping
4993	dictionary.
4994
4995	* OpenChange/MAPIStoreSpoolerContext.[hm]: new context module,
4996	which subclasses MAPIStoreSpoolerContext from
4997	MAPIStoreFSBaseContext rather than MAPIStoreOutboxContext.
4998
49992011-06-03  Francis Lachapelle  <flachapelle@inverse.ca>
5000
5001	* UI/WebServerResources/generic.js (initMenu): the wrong callbacks
5002	were associated to menu entries when the menu was splitted in
5003	multiple ULs.
5004	(popupSubmenu): fixed the position so it stays beside the menu
5005	entry when the main menu is splitted in multiple ULs. The submenu
5006	will no longer be displayed outside the window viewport.
5007
50082011-06-02  Francis Lachapelle  <flachapelle@inverse.ca>
5009
5010	* UI/WebServerResources/generic.js (hideMenu): now fires a custom
5011	event (contextmenu:hide) to properly define a callback function
5012	when a contextual menu is hidden.
5013
5014	* UI/WebServerResources/MailerUI.js (onFolderMenuClick):
5015	registered the function onFolderMenuHide on the new event
5016	"contextmenu:hide". This function was never called since it was
5017	relying on an event never triggered ("hideMenu").
5018
5019	* UI/WebServerResources/ContactsUI.js (onContactContextMenu): idem.
5020
5021	* UI/WebServerResources/UIxPreferences.js (_setupEvents): reload
5022	main page when enabling or disabling mail threads.
5023
50242011-06-01  Francis Lachapelle  <flachapelle@inverse.ca>
5025
5026	* SoObjects/SOGo/SOGoUserDefaults.m (-setMailSortByThreads)
5027	(-mailSortByThreads): new accessors for the "SOGoMailSortByThreads"
5028	user defaults.
5029
5030	* UI/PreferencesUI/UIxPreferences.m (-setSortByThreads)
5031	(sortByThreads): idem.
5032
5033	* SoObjects/Mailer/SOGoMailFolder.m
5034	(-fetchUIDsMatchingQualifier:sortOrdering:threaded:): new method
5035	to fetch a threaded-view of the folder.
5036
5037	* SoObjects/SOGo/NSArray+Utilities.m (-flattenedArray): added
5038	recurrence to flatten interleaved arrays.
5039
5040	* SoObjects/Mailer/SOGoMailAccount.m (-updateFilters): write
5041	multiple 'redirect' directives when forwarding to multiple email
5042	addresses.
5043
5044	* UI/MailerUI/UIxMailListActions.m (-threadedUIDs): new method
5045	that returns a flatten representation of messages threads.
5046
5047	* UI/MailerUI/UIxMailMainFrame.m (-columnsMetaData): added CSS
5048	classnames for the thread column.
5049	(-columnsDisplayOrder): add or remove the thread column depending
5050	on the user's defaults.
5051
5052	* UI/MailerUI/UIxMailListActions.m (-getUIDsAndHeadersInFolder)
5053	(-getSortedUIDsAction): added support for threads.
5054
5055	* UI/WebServerResources/ContactsUI.js (onContactContextMenu):
5056	select row at pointer position when not already selected.
5057
5058	* UI/WebServerResources/MailerUI.js: added support for the
5059	threaded view.
5060	(onMessageContextMenu): select row at pointer position when not
5061	already selected.
5062
5063	* UI/WebServerResources/SOGoMailDataSource.js: added support for
5064	the threaded view.
5065
50662011-05-31  Francis Lachapelle  <flachapelle@inverse.ca>
5067
5068	* UI/WebServerResources/SchedulerUI.js (initCalendarSelector): use
5069	events delegation in the calendars list.
5070
5071	* UI/WebServerResources/HTMLElement.js (selectElement): if element
5072	has no ID, keep track of it anyway. This fixes an issue when
5073	deleting attachments in the mail composition window.
5074
5075	* UI/WebServerResources/UIxMailEditor.js (initMailEditor): use
5076	events delegation in the attachments list.
5077
5078	* UI/Scheduler/NSArray+Scheduler.m (-compareTasksAscending): sort
5079	the tasks by their name if they are from the same calendar.
5080
50812011-05-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5082
5083	* OpenChange/MAPIStoreTypes.m (NSObjectFromMAPISPropValue)
5084	(NSObjectFromSPropValue): handle PT_I8 properties.
5085
5086	* OpenChange/NSObject+MAPIStore.m
5087	(-getMAPIValue:forTag:inMemCtx:): added case to handle PT_I8
5088	properties via the new method below.
5089
5090	* OpenChange/NSValue+MAPIStore.m (-asI8InMemCtx:): new method that
5091	extracts an uint64_t from an NSNumber.
5092
5093	* OpenChange/MAPIStoreFallbackContext.[hm]: new class module for
5094	the "fallback" context, used by the OpenChange core to create
5095	contexts that are not specifically handled.
5096
5097	* OpenChange/MAPIStoreSOGo.m (sogo_create_context): a new struct
5098	mapistore_connection_info * is now passed as parameter, which
5099	contains useful data about the current connection.
5100
5101	* OpenChange/MAPIStoreTable.m: (-deactivate): removed obsolete
5102	method, which was part of a hack anyway.
5103
5104	* OpenChange/MAPIStoreObject.m: (-addActiveTable:)
5105	(-removeActiveTable:) removed obsolete methods.
5106
5107	* OpenChange/MAPIStoreFolder.m: (-init) removed obsolete ivars
5108	"activeMessageTables", "activeFAIMessageTables" and "activeFolderTables".
5109	(-activeMessageTables, -activeFAIMessageTables)
5110	(-activeFolderTables, _cleanupTableCaches): make use of the new
5111	MAPIStoreActiveTables class.
5112
5113	* OpenChange/MAPIStoreActiveTables.[hm]: new class module that
5114	provides a facility for keeping track of all the instantiated
5115	tables.
5116
51172011-05-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5118
5119	* OpenChange/code-MAPIStorePropertySelectors.m
5120	(MAPIStorePropertyGettersForClass): insert the newly created table
5121	in the hash in order to avoid a leak... and to enable it to be
5122	found during the next search.
5123
5124	* SoObjects/SOGo/SOGoContentObject.m (-version, -createDate)
5125	(-lastModified): new accessors that return the value of the
5126	corresponding ivar.
5127
5128	* SoObjects/SOGo/SOGoGCSFolder.m (-davCollectionTag): base the
5129	return value on the new -[GCSFolder lastModificationDate] method.
5130	(_isValidSyncToken): same as above.
5131
5132	* OpenChange/NSDate+MAPIStore.[hm]: renamed from
5133	NSCalendarDate+MAPIStore.[hm]. Provides the same methods as
5134	before but on NSDate rather than NSCalendarDate.
5135
5136	* OpenChange/gen-property-selectors.py (ParseExchangeHDefinition):
5137	Fixed exclusion of records ending with "Error" and "Unicode".
5138	Also, we now exclude PidTag properties with a value > 0x80000000
5139	since they may overlap with named properties.
5140	(__main__): replace multi-string with multi-unicode identifiers
5141	too.
5142	(__main__): we output getter indexes as 16 bit hex values, for
5143	consistency.
5144
51452011-05-30  Francis Lachapelle  <flachapelle@inverse.ca>
5146
5147	* UI/WebServerResources/ContactsUI.js (contactsListCallback):
5148	restored activation of drag'n'drop.
5149	(configureAddressBooks, onFolderSelectionChange)
5150	(appendAddressBook): delegated rows events to the table.
5151	(setEventsOnAddressBook): this function removed following the new event
5152	delegation model.
5153
51542011-05-27  Francis Lachapelle  <flachapelle@inverse.ca>
5155
5156	* UI/PreferencesUI/UIxPreferences.m (-forwardAddress)
5157	(-setForwardAddress): allow to define multiple forwarding addresses.
5158
5159	* UI/WebServerResources/UIxPreferences.js (savePreferences): test
5160	each specified forwarding address.
5161
51622011-05-17  Ludovic Marcotte  <lmarcotte@inverse.ca>
5163
5164        * We now remove the /inverse.ca/20101018_1/ identifier
5165	from all NGCards' timezone files.
5166
51672011-05-16  Ludovic Marcotte  <lmarcotte@inverse.ca>
5168
5169	* UI/MailPartViewers/UIxMailPartHTMLViewer.m: Added a
5170	workaround for a libxml's issue where the charset
5171	specified in meta tags have precedence over the one
5172	we "force" when creating the parser. This "bug" has
5173	just been fixed in libxml but it'll take years before
5174	all distributions get that fix. For now, we strip
5175	that tag, unconditionnaly.
5176
51772011-05-10  Ludovic Marcotte  <lmarcotte@inverse.ca>
5178
5179	* NSDictionary+Utilities.m (userRecordAsLDIFEntry):
5180	Fix to avoid a crash when backing up resources' LDIF entries
5181
51822011-05-06  Francis Lachapelle  <flachapelle@inverse.ca>
5183
5184	* UI/WebServerResources/UIxPreferences.js
5185	(displayAccountSignature): fixed an issue with an HTML signature
5186	that start with a paragraph tag.
5187
51882011-05-05  Ludovic Marcotte  <lmarcotte@inverse.ca>
5189
5190	* UI/MailerUI/UIxMailAccountActions.m - fixed an issue
5191	with namespace handling in Dovecot. We do not try
5192	to swap the mailbox name, which can correspond to an
5193	username if we are dealing with the top-level mailbox.
5194
51952011-05-03  Francis Lachapelle  <flachapelle@inverse.ca>
5196
5197	* UI/WebServerResources/UIxMailEditor.js (createAttachment): show
5198	the attachment name as the list entry's title.
5199
5200	* UI/WebServerResources/generic.js (onRowClick): in some cases
5201	under ID,	the event is trigger on the dragging identifier
5202	and must be ignored.
5203
5204	* UI/WebServerResources/MailerUI.js (deleteSelectedMessages): we no
5205	longer wait for the callback before invalidating the caches.
5206	(mailListToggleMessagesRead): idem.
5207
52082011-04-28  Ludovic Marcotte  <lmarcotte@inverse.ca>
5209
5210	* SoObjects/SOGo/SQLSource.{h,m}: Added resources support,
5211	just like for LDAP-based sources.
5212	* SoObjects/SOGo/SOGoParentFolder.m (_createPersonalFolder):
5213	We now also autocreate database tables if the "user"
5214	is a resource.
5215
52162011-04-25  Francis Lachapelle  <flachapelle@inverse.ca>
5217
5218	* UI/WebServerResources/SchedulerUI.js (onFolderUnsubscribeCB):
5219	select the personal calendar to avoid trying creating an event or
5220	a task in the calendar to which the user has just unsubscribed.
5221
52222011-04-25  Ludovic Marcotte  <lmarcotte@inverse.ca>
5223
5224	* Added the concept of "resources" in SOGo in order
5225	to avoid double-bookings (if not more) and also, handle
5226	auto-accepts. This works for the web interface and
5227	over DAV - generating 403 errors in case of a conflict.
5228
52292011-04-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
5230
5231	* Added the possibility of translating IMAP namespaces
5232	and we now extract the full name the mailbox owner under
5233	the "Other Users" namespace.
5234
52352011-04-21  Francis Lachapelle  <flachapelle@inverse.ca>
5236
5237	* UI/WebServerResources/SchedulerUI.js (deleteEvent): we now show
5238	in the confirmation dialog box which events will be deleted.
5239
5240	* UI/WebServerResources/generic.js (createDialog): the legend
5241	argument can now be a string or an element.
5242	(isWebKit): was isSafari; now consider all WebKit-based browsers together.
5243
5244	* UI/WebServerResources/UIxMailToSelection.js: various
5245	improvements to behave like in Thunderbird.
5246
5247	* UI/WebServerResources/SOGoAutoCompletion.js: idem.
5248
5249	* UI/WebServerResources/UIxMailEditor.js (initAddresses): was
5250	initTabIndex. We were not handling the tab indexes properly which
5251	was causing incorrect behavior in IE.
5252
52532011-04-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5254
5255	* OpenChange/MAPIStoreMailAttachment.m (-): binary properties are
5256	represented by a struct Binary_r.
5257
5258	* OpenChange/NSObject+MAPIStore.m
5259	(-getMAPIValue:forTag:inMemCtx:): binary properties are
5260	represented by a struct Binary_r.
5261
5262	* OpenChange/MAPIStoreTypes.m (NSObjectFromMAPISPropValue)
5263	(NSObjectFromSPropValue): we now support PT_SVREID and handle it
5264	exactly as PT_BINARY.
5265
5266	* OpenChange/MAPIStoreMessage.m (-attachmentTable): as all the
5267	subclasses were using the same MAPIStoreAttachmentTable
5268	implementation, this method now performs the same operation and
5269	thereby no longer requires subclasssing.
5270
5271	* OpenChange/MAPIStoreObject.m (-getProperty:withTag:): compute
5272	the method selector and pass it as argument to the IMP of the
5273	property getter, as would be with any regular method invocation.
5274
5275	* OpenChange/MAPIStoreMailMessage.m (-getPrBody:): no longer check
5276	the size of the returned content, as streams are now handled
5277	internally by OpenChange.
5278	(-getPrHtml): same as above.
5279
5280	* OpenChange/MAPIStoreTypes.m (NSObjectFromStreamData): removed
5281	helper function as it's no longer used.
5282
5283	* OpenChange/MAPIStoreSOGo.m (sogo_op_set_property_from_fd)
5284	(sogo_op_get_property_into_fd): those backend methods are no
5285	longer used, as OpenChange handles the property streams internally
5286	now.
5287
5288	* OpenChange/gen-property-selectors.py: added code to generate
5289	MAPIStoreSupportedProperties as the array of properties that are
5290	handled by OpenChange and MAPIStoreSupportedPropertiesCount as the
5291	count of those properties.
5292
5293	* OpenChange/MAPIStoreObject.m (+getAvailableProperties): ObjC
5294	corollary of the "sogo_pocop_get_available_properties" backend
5295	method.
5296	(-getAvailableProperties): proxy to the class method of the same
5297	name.
5298
5299	* OpenChange/MAPIStoreTable.m (+childObjectClass): new mandatory
5300	method that returns the Class of the objects represented in the
5301	rows of the table.
5302	(-getAvailableProperties:): ObjC corollary of the
5303	"sogo_pocop_get_available_table_properties" backend method.
5304
5305	* OpenChange/MAPIStoreSOGo.m
5306	(sogo_pocop_get_available_table_properties): new backend getter
5307	that returns the list of properties that can be queried on the
5308	table rows.
5309	(sogo_pocop_get_available_properties): new backend getter
5310	that returns the list of properties that can be queried on the
5311	discrete object passed as parameter.
5312
5313	* OpenChange/code-MAPIStorePropertySelectors.m
5314	(MAPIStorePropertyGettersForClass): use the
5315	"MAPIStoreProeprtyGetter" type rather than IMP as result type.
5316
5317	* OpenChange/MAPIStoreFolderTable.m (-restrictedChildKeys): no
5318	longer a mandatory method, returns [self childKeys] when not
5319	overriden and issue an error message.
5320
5321	* OpenChange/MAPIStoreFolder.m (-createMessage): no longer a
5322	mandatory method. Returns nil when not overriden.
5323
53242011-04-19  Francis Lachapelle  <flachapelle@inverse.ca>
5325
5326	* SoObjects/Appointments/SOGoAppointmentFolder.m
5327	(-_flattenCycleRecord:forRange:intoArray:): fixed the
5328	verification of the event's timezone.
5329
53302011-04-15  Francis Lachapelle  <flachapelle@inverse.ca>
5331
5332	* SoObjects/Appointments/iCalEvent+SOGo.m (-firstOccurenceRange):
5333	we now compute the end date by looking at the occurrence
5334	interval. This way, we support events with an end date or a duration.
5335
5336	* SoObjects/Appointments/SOGoAppointmentFolder.m
5337	(-_flattenCycleRecord:forRange:intoArray:): also compute the end
5338	date by looking at the occurrence interval.
5339	(-importCalendar:): added a duration to events with no end date nor duration.
5340
5341	* SoObjects/Appointments/SOGoAppointmentObject.m
5342	(-_adjustEventsInRequest:): new method to verify the vCalendar for
5343	any inconsistency or missing attributes. Currently, it only adds a
5344	duration if no end date nor duration is found.
5345
5346	* UI/WebServerResources/ckeditor/config.js: Changed the default
5347	enter mode to use BR instead of P. This matches the behavior of Thunderbird.
5348
53492011-04-14  Francis Lachapelle  <flachapelle@inverse.ca>
5350
5351	* UI/WebServerResources/UIxContactEditor.js
5352	(validateContactEditor): now uses the regexp defined in generic.js
5353	 (emailRE) to validate the email addresses. This fixes an issue
5354	with valid addresses starting with an underscore (bug #1246).
5355
5356	* UI/MailerUI/UIxMailAccountActions.m (-composeAction): properly decode
5357	submitted recipients and subjects (URL-encoded).
5358
5359	* SoObjects/SOGo/SOGoUserManager.m (-getImapLoginForUID:): we now
5360	consider the source parameter IMAPLoginFieldName. We continue to support
5361	SOGoForceIMAPLoginWithEmail at the domain/system level.
5362
5363	* SoObjects/SOGo/LDAPSource.m: we can now define a new parameter
5364	named IMAPLoginFieldName to specify which field to use for IMAP
5365	authentication. By default, we use the value of the UIDFieldName.
5366
5367	* SoObjects/SOGo/SQLSource.m
5368	(-checkLogin:password:perr:expire:grace:): if the defaults parameter
5369	authenticationFilter is defined, we add it to the SQL where clause.
5370	(_lookupContactEntry:considerEmail:): we add a new key
5371	 (canAuthenticate) to the returned dictionary that specifies if the
5372	user can authenticate or not. We also add c_imaplogin when the
5373	user must authenticate with a different username to the IMAP server.
5374
5375	* SoObjects/SOGo/SOGoUser.m (-canAuthenticate): new method that
5376	returns true if the user can authenticate, based on the
5377	authentication filter associated to the source.
5378
5379	* SoObjects/SOGo/SOGoGCSFolder.m (-ocsFolder): don't automatically
5380	create the folder if the user can't authenticate.
5381
5382	* UI/Contacts/UIxContactsListActions.m: was
5383	UIxContactsListView.m. The new method contactsListAction now
5384	returns a JSON representation of the addressbook.
5385
5386	* UI/Contacts/UIxContactFoldersView.m (-personalContactInfos): new
5387	method used to populate the wox template with the personal
5388	addressbook. The addressbook module is now pre-loaded with it,
5389	eliminating an Ajax query.
5390
5391	* UI/WebServerResources/ContactsUI.js (initContacts): delegate
5392	all events to the table instead of each row.
5393	(contactsListCallback): we now receive a JSON representation of
5394	the contacts and reuse the existing table rows instead of
5395	overwriting the table.
5396
53972011-04-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5398
5399	* OpenChange/MAPIStoreObject.m: make use of the IMP cache methods
5400	available in MAPIStorePropertySelectors to query object
5401	properties.
5402	* OpenChange/*{Message,Folder}.m: replaced the implementations of
5403	-getProperty:withTag: with equivalent property getter methods.
5404
5405	* OpenChange/MAPIStoreContext.m (-url): new method that returns
5406	the context url.
5407
5408	* OpenChange/gen-property-selectors.py: new generator script that
5409	outputs MAPIStorePropertySelectors.[hm], which is a helper
5410	module that provides methods for handling of cached
5411	property method IMPs.
5412
54132011-04-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5414
5415	* SoObjects/Mailer/SOGoDraftObject.m
5416	(-bodyPartForAttachmentWithName:): don't choose "quoted-printable"
5417	if the mimetype is anything else than "text/plain" or "text/html",
5418	to avoid issues with filenames attached with a wrong mime type.
5419
54202011-04-12  Francis Lachapelle  <flachapelle@inverse.ca>
5421
5422	* SoObjects/Appointments/SOGoAppointmentFolder.m
5423	(-importCalendar:): we now associate the proper vtimezone to each
5424	event found in the calendar.
5425
54262011-04-11  Francis Lachapelle  <flachapelle@inverse.ca>
5427
5428	* UI/WebServerResources/UIxMailToSelection.js
5429	(addressFieldLostFocus): split content separated by commas
5430	or semi-colons.
5431
54322011-04-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5433
5434	* Tests/Unit/TestNSString+URLEscaping.m: new test module.
5435	(-test_stringByEscapingURL): new test method for -[NSString
5436	stringByEscapingURL].
5437
5438	* Tests/Unit/sogo-tests.m (main): added volatile user defaults for
5439	utf8 url encoding.
5440
54412011-04-07  Francis Lachapelle  <flachapelle@inverse.ca>
5442
5443	* UI/WebServerResources/MailerUI.js (onMenuRenameFolderConfirm):
5444	encode the folder name in the URL.
5445
54462011-04-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5447
5448	* OpenChange/MAPIStoreMailMessageTable.m
5449	(-evaluateExistRestriction:intoQualifier:): declare that
5450	PR_CLIENT_SUBMIT_TIME always exists on messages, which prevents
5451	Outlook from looping on a search request that always returns the
5452	same unexpected result...
5453
54542011-04-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5455
5456	* OpenChange/MAPIStoreCalendarMessage.m (-getProperty:withTag):
5457	restored/implemented PR_START_DATE, PidLidAppointmentStartWhole,
5458	PidLidCommonStart and their "end" equivalent.
5459
5460	* OpenChange/MAPIStoreMailFolder.m (-createFolder:): implemented
5461	method by adapting old code that was still commented out.
5462	(-folderKeys): implemented method.
5463	(-lookupChild:): overriden method to return a folder object when
5464	the child key is contained in the folder keys.
5465
5466	* OpenChange/MAPIStoreContext.m (_tableForFID:andTableType:): make
5467	use of lookupFolder: to retrieve the right folder based on the FID.
5468	(-setPropertiesWithFMID:ofTableType:inRow:): silently discard by
5469	log the settings of properties on folders.
5470
54712011-04-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5472
5473	* UI/Scheduler/UIxCalListingActions.m
5474	(-_fillBlocks:withEvent:withNumber:): fixed type confusion between
5475	char * and NSString * that could cause a crash under certain
5476	circumstances.
5477
54782011-04-01  Francis Lachapelle  <flachapelle@inverse.ca>
5479
5480	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:):
5481	when adding a new occurrence, instantiate an occurrence from the
5482	previous calendar in order to perform a proper changes comparison.
5483
54842011-04-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5485
5486	* Tests/Unit/TestSBJsonParser.m (-test_parseJSONString): input and
5487	expected result are embedded in an array since SBJsonParser needs
5488	a "container" class.
5489	(-test_parseJSONNumber): same as above.
5490
5491	* Tests/Integration/all.py: (from Jean Raby) make use of the
5492	"SOGoLanguage" defaults key rather than the old "Language" one.
5493
5494	* Tests/Integration/sogoLogin.py: (from Jean Raby) new
5495	authentication module, required by the new session-based code.
5496
5497	* Tests/Integration/preferences.py: (from Jean Raby) derive
5498	authentication cookie from the new sogoLogin module.
5499
5500	* UI/WebServerResources/SchedulerUI.js (initCalendars): initialize
5501	"showCompletedTaskls" to 0 when the ShowCompletedTasks settings
5502	variable is not available.
5503
5504	* SoObjects/Appointments/SOGoCalendarComponent.m
5505	(-contentAsString): strip alarms from component if the alarms are
5506	disabled on the containing calendar.
5507
5508	* SoObjects/SOGo/SOGoObject.m (-davComplianceClassesInContext:):
5509	added "calendar-auto-schedule", "calendar-proxy" and "calenderserver-principal-property
5510
5511	* Main/SOGo+DAV.m (-davComplianceClassesInContext:): overwritten
5512	with same code as in SOGoObject.
5513	(-davPrincipalCollectionSet): added dav property.
5514
55152011-03-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5516
5517	* OpenChange/MAPIStoreCalendarMessage.m
5518	(_setupRecurrenceInCalendar:withMasterEvent:fromData:): moved the
5519	code pertaining to the handling of struct RecurrencePattern into
5520	the new module below, in the -[iCalCalendar setupRecurrenceWithMasterEntity:
5521        fromRecurrencePattern:) category method.
5522	(_fillAppointmentRecurrencePattern): moved the
5523	code pertaining to the handling of struct RecurrencePattern into
5524	the new module below, in the -[iCalRecurrenceRule
5525	fillRecurrencePattern:withStartDate:andEndDate:] category method.
5526	(-createAttachment): instantiate a MAPIStoreCalendarAttachment
5527	object.
5528
5529	* OpenChange/MAPIStoreSOGo.m: added new
5530	"sogo_pocop_open_embedded_message" backend method.
5531
5532	* OpenChange/MAPIStoreCalendarAttachment.[hm]: new class module
5533	for handling event attachments or "exceptions".
5534
5535	* OpenChange/MAPIStoreMessage.m (-getProperty:withTag:):
5536	handles PR_HASATTACH, previously found in MAPIStoreMailMessage.
5537
5538	* OpenChange/MAPIStoreAttachment.m (-nameInContainer): overriden
5539	method to return "aid" in the form of a NSString.
5540	(-mimeAttachTag): new helper method derived from old code in
5541	getProperty:withTag: for subclasses.
5542	(-getProperty:withTag:): handles PR_MID, PR_ATTACH_NUM and
5543	PR_RENDERING_POSITION, previously found in
5544	MAPIStoreMailAttachment.
5545	(-openEmbeddedMessage:withMID:withMAPIStoreMsg:andFlags:): new
5546	backend method.
5547	(-openEmbeddedMessage, -createEmbeddedMessage): new overridable
5548	methods.
5549
5550	* OpenChange/MAPIStoreEmbeddedMessage.[hm]: new class module for
5551	attachment embedded messages.
5552
5553	* OpenChange/MAPIStoreObject.m (-url): make use of
5554	-[MAPIStoreObject nameInContainer] rather than the equivalent on
5555	SOGoObject to make that code reusable for objects that are not
5556	based on SOGoObject instances.
5557
5558	* OpenChange/MAPIStoreRecurrenceUtils.m: new module implementing
5559	methods useful for handling recurrences in events and tasks.
5560
55612011-03-31  Francis Lachapelle  <flachapelle@inverse.ca>
5562
5563	* UI/WebServerResources/MailerUI.js (messageListCallback): put an
5564	non-breaking space in empty cells, not only for IE.
5565
5566	* UI/Contacts/UIxContactView.m (_cardStringWithLabel:value:):
5567	remove useless carriage returns to avoid JavaScript errors in IE7.
5568
55692011-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5570
5571	* UI/MailerUI/UIxMailFolderActions.m (-copyMessagesAction)
5572	(-expungeAction, -emptyTrashAction): use "-mailAccountFolder" in
5573	order to retrieve the account folder as the clientObject may
5574	actually be a nested folder...
5575
5576	* UI/WebServerResources/UIxTaskEditor.js (initializeStatusLine):
5577	bind onStatusListChange as callback to "change" rather than
5578	"mouseup" as it otherwise fails to be invoked on Chrome.
5579
5580	* SoObjects/SOGo/SOGoBuild.m: export new SOGoVersion NSString.
5581
5582	* Main/SOGo.m (+initialize): moved most initialization code from
5583	-init and -run here since this method is invoked before forking
5584	and data memory is in "copy-on-write" mode, slightly reducing
5585	memory usage of combined SOGo processes.
5586	(+applicationWillStart): new method replacing +initialize.
5587
55882011-03-30  Francis Lachapelle  <flachapelle@inverse.ca>
5589
5590	* SoObjects/Appointments/SOGoAppointmentFolder.m
5591	(-fetchFreeBusyInfosFrom:to:): we must fetch the c_content in
5592	order to flatten cyclic events.
5593
5594	* SoObjects/SOGo/SOGoSystemDefaults.m (-pageTitle): new method to
5595	retrieve the Web page title from the new system defaults "SOGoPageTitle".
5596
5597	* UI/Common/UIxPageFrame.m (-title): consider the new system
5598	default attribute "SOGoPageTitle".
5599
56002011-03-29  Francis Lachapelle  <flachapelle@inverse.ca>
5601
5602	* SoObjects/Appointments/iCalEvent+SOGo.m
5603	(-updateRecurrenceRulesUntilDate:): shifts the "until dates" of
5604	the recurrence rules of the event with respect to the previous end
5605	date of the event.
5606
5607	* SoObjects/Appointments/SOGoCalendarComponent.m
5608	(-updateComponent: ): splitted method "saveComponent:" to avoid
5609	saving the component multiple times during the same session.
5610
5611	* SoObjects/Appointments/SOGoAppointmentObject.m (-saveComponent):
5612	make use of the new "updateComponent" method mentioned above.
5613
5614	* SoObjects/Appointments/SOGoAppointmentFolder.m
5615	(-_flattenCycleRecord:forRange:intoArray:): when the event has a
5616	timezone, the "until dates" of recurrence rules must be adjusted.
5617
5618	* UI/Scheduler/UIxAppointmentActions.m (-adjustAction): when
5619	modifying an event, also modify the "until dates" of recurrence rules.
5620
5621	* UI/Scheduler/UIxAppointmentEditor.m (-_adjustRecurrentRules):
5622	the "until date" of finite recurrence rules must be based on the
5623	event end date, not the start date.
5624
56252011-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5626
5627	* Tools/SOGoToolRemoveDoubles.m
5628	(-detectDoublesFromRecords:withQuickField:): added a quick field
5629	parameter to enable the use of other fields than just c_mail.
5630
56312011-03-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5632
5633	* UI/Contacts/UIxContactsListView.m (-currentContactClasses): new
5634	method that returns the classes associated to the current contact.
5635	For now, only the c_component.
5636
56372011-03-24  Francis Lachapelle  <flachapelle@inverse.ca>
5638
5639	* UI/MailerUI/UIxMailListActions.m (-imap4SortOrdering): verify
5640	that the sort is defined when rollbacking to the user's settings.
5641
5642	* SoObjects/SOGo/SQLSource.m (_encryptPassword:): new method to
5643	encrypt a user's password according to the configured algorithm.
5644	(-changePasswordForLogin:oldPassword:newPassword:perr:):
5645	now implemented (thanks to Martin Rabl).
5646
56472011-03-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
5648
5649	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction:):
5650	Fix for bug #1092. We were incorrectly looking up
5651	the organizer of an exception to a recurrence and
5652	we were also incorrectly always updating the master
5653	event with the part-state.
5654
56552011-03-23  Francis Lachapelle  <flachapelle@inverse.ca>
5656
5657	* UI/PreferencesUI/UIxPreferences.m (-timeZonesList): we make use
5658	of the new method [iCalTimeZone knownTimeZoneNames] instead of
5659	[NSTimeZone knownTimeZoneNames] to avoid listing tons of useless timezones.
5660
5661	* UI/PreferencesUI/UIxPreferences.m (-userTimeZone): since we now
5662	offer a limited number of timezones, the user timezone could be
5663	unrecognized. In this case, try to find a timezone with the same
5664	GMT offset.
5665
56662011-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5667
5668	* OpenChange/MAPIStoreCalendarMessage.m (-init): new method to
5669	initialize the attachment ivars.
5670	(-ownerTimeZone): new method with common code.
5671	(-getProperty:withTag): (PR_ICON_INDEX) return a more precise icon depending on
5672	the recurring nature of the event as well on its number of
5673	attendees. (PidLidAppointmentStartWhole,
5674	PidLidAppointmentEndWhole) removed properties. (PidLidRecurring,
5675	PidLidIsRecurring), returns YES when recurring.
5676	(PidLidAppointmentRecur) property handles property, by using
5677	-_computeAppointmentRecur and other submethods.
5678
5679	* OpenChange/NSCalendarDate+MAPIStore.m (-asMinutesSince1601):
5680	corollary to +dateFromMinutesSince1601.
5681
56822011-03-21  Francis Lachapelle  <flachapelle@inverse.ca>
5683
5684	* Tools/SOGoToolBackup.m (-fetchUserIDs:): when choosing to backup
5685	all users, fetch the users list from the folder info table instead
5686	of the configured sources. This fixes an issue when trying to
5687	retrieve the users from LDAP sources that limit the number
5688	of results.
5689
5690	* SoObjects/SOGo/LDAPSource.m (:_qualifierForFilter): avoid
5691	duplicated filters on the CN attribute.
5692
5693	* UI/WebServerResources/UIxPreferences.js
5694	(displayAccountSignature): strips the tags and unescape the HTML
5695	to improve readability.
5696
5697	* UI/WebServerResources/MailerUI.js (updateWindowTitle): new
5698	function used to update the window title with respect to the
5699	currently selected mailbox.
5700
5701	* UI/WebServerResources/MailerUI.js (openMailbox): exchanged sort
5702	arrows to match Thunderbird's GUI.
5703
5704	* UI/MailerUI/UIxMailListActions.m (-imap4SortOrdering): when the
5705	sort is not specified in the request, retrieve the user's previous sort.
5706
57072011-03-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5708
5709	* OpenChange/MAPIStoreCalendarMessage.m
5710	(-_setupRecurrenceInCalendar:withMasterEvent:fromData:): new
5711	method for setting recurrence info from "PidLidAppointmentRecur"
5712	(no exdate, exrule or modified occurrence for now).
5713
5714	* OpenChange/NSCalendarDate+MAPIStore.m
5715	(+dateFromMinutesSince1601): new constructor, helpful for MAPI
5716	recurrence structures.
5717
5718	* OpenChange/MAPIStoreCalendarMessageTable.m,
5719	OpenChange/MAPIStoreTasksMessageTable.m,
5720	OpenChange/MAPIStoreContactsMessageTable.m,
5721	OpenChange/MAPIStoreMailMessageTable.m,
5722	OpenChange/MAPIStoreTasksMessage.m, OpenChange/MAPIStoreMessage.m,
5723	OpenChange/MAPIStoreMailMessage.m,
5724	OpenChange/MAPIStoreContactsMessage.m: cast property tags to
5725	uint32_t in switch statements to avoid fatal warnings about
5726	uncovered cases.
5727
5728	* UI/Scheduler/UIxComponentEditor.m
5729	(-takeValuesFromRequest:inContext:): added some sanity checks to
5730	avoid crashes when alarm data is not properly entered.
5731
57322011-03-18  Francis Lachapelle  <flachapelle@inverse.ca>
5733
5734	* UI/WebServerResources/SchedulerUI.js (initCalendars): we must
5735	set "showCompletedTasks" earlier in order to properly fetch the
5736	tasks upon the first refresh.
5737
5738	* UI/Scheduler/UIxAppointmentEditor.m
5739	(-takeValuesFromRequest:inContext:): we no longer associate a
5740	vTimeZone to start/end dates of an all-day vEvent.
5741
5742	* UI/Scheduler/UIxCalListingActions.m
5743	(-_fetchFields:forComponentOfType:): we don't add components
5744	outside the covered period. This could happen with all-day events,
5745	since their dates are always GMT.
5746
5747	* SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord): an all-day
5748	event usually doesn't have a timezone. However, if it does, we must
5749	convert its dates to GMT. All-day events are "floating", in the
5750	sense that they are timezone-independant.
5751
57522011-03-17  Francis Lachapelle  <flachapelle@inverse.ca>
5753
5754	* UI/MailerUI/UIxMailAccountActions.m (-listMailboxesAction):
5755	moved code that fetches the inbox quota to [SOGoMailAccount getInboxQuota].
5756
5757	* SoObjects/Mailer/SOGoMailAccount.m (-getInboxQuota): new method
5758	created partially from the method [UIxMailAccountActions listMailboxesAction].
5759
5760	* UI/MailerUI/UIxMailFolderActions.m (-deleteAction)
5761	(-copyMessagesAction, -expungeAction, -emptyTrashAction): we now
5762	return a JSON representation of the inbox quota when these actions
5763	succeeds.
5764	(-quotasAction): removed this method which was no longer used.
5765
5766	* UI/WebServerResources/MailerUI.js (updateQuotas): new function
5767	extracted from updateMailboxTreeInPage. It is called when a folder
5768	operation returns the inbox quota.
5769
57702011-03-15  Francis Lachapelle  <flachapelle@inverse.ca>
5771
5772	* UI/MailerUI/UIxMailListActions.m (-getMailAction): removed this
5773	method that is no longer used since live-loading.
5774	(-getSortedUIDsAction): restored the call to
5775	expungeLastMarkedFolder so that the last visited folder is
5776	expunged when switching folder.
5777
57782011-03-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5779
5780	* SoObjects/Contacts/SOGoContactFolders.m
5781	(-setDavContactsCategories:): we need to handle the case where the
5782	"category" element has more than one subnode, in particular when
5783	xml entities are used.
5784
57852011-03-11  Francis Lachapelle  <flachapelle@inverse.ca>
5786
5787	* UI/WebServerResources/HTMLElement.js (onContextMenu): hide the
5788	menu on a mousedown, not a click. This fixes a problem on Webkit browsers.
5789
5790	* UI/WebServerResources/generic.js: cleanup some event observers
5791	related to contextual menus.
5792
5793	* UI/WebServerResources/UIxMailEditor.js (initMailEditor): added
5794	the SpellChecker button in the HTML editor toolbar, and disabled
5795	the "check while typing" option (scayt).
5796
5797	* UI/WebServerResources/ContactsUI.js (initContacts): don't define
5798	the categories contextual menu if the contacts list doesn't
5799	exist. This fixes a problem when adding categories to a contact
5800	using IE7.
5801
58022011-03-10  Francis Lachapelle  <flachapelle@inverse.ca>
5803
5804	* SoObjects/Appointments/SOGoAppointmentFolder.m (-fixupRecord):
5805	the time of all-day events must be adjusted for the user's timezone.
5806
5807	* UI/WebServerResources/UIxContactEditor.js (initEditorForm):
5808	the input category field doesn't appear if the card is
5809	read-only. Adjusted the code accordingly.
5810
5811	* UI/WebServerResources/ContactsUI.js
5812	(onCategoriesMenuItemCallback): new callback that refreshes the
5813	displayed card when a category is added or removed.
5814
58152011-03-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5816
5817	* UI/WebServerResources/ContactsUI.js (onCategoriesMenuItemClick):
5818	makes use of "encodeURIComponent" rather than "escape" to encode
5819	URL parameters, because for some reason the former takes the
5820	encoding into account and not the latter.
5821
58222011-03-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5823
5824	* OpenChange/MAPIStoreCalendarMessage.m (-save): accept entries
5825	with an "x500dn" record since they are now properly converted.
5826
5827	* OpenChange/MAPIStoreContext.m (_convertRecipientFromRow:):
5828	properly find out the coordinates of internal users.
5829
58302011-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5831
5832	* OpenChange/MAPIStoreFSFolder.m (-createMessage): fixed typo that
5833	was making contents messages saved in the FAI folder.
5834
5835	* OpenChange/MAPIStoreContext.m (_prepareContextClass): now takes
5836	the context fid as argument.
5837
5838	* OpenChange/MAPIStore*Context.m (+registerFixedMappings): removed
5839	method, made obsolete by the fact that we now receive the context
5840	fid during initialization.
5841
5842	* OpenChange/MAPIStoreFAIMessageTable.[hm]: restored class module
5843	in order to reenable proper class testing during notifications.
5844
5845	* OpenChange/MAPIStoreTypes.h (MAPIPropertyKey): we now make use
5846	of the full property tag again since the modified properties need
5847	to be reported during notifications.
5848
5849	* OpenChange/MAPIStoreSOGo.m (sogo_pocop_open_table)
5850	(sogo_pocop_set_table_restrictions)
5851	(sogo_pocop_set_table_sort_order): new poc methods.
5852	(sogo_pocop_release): invoke -deactivate on the released object if
5853	it responds to it.
5854
5855	* OpenChange/MAPIStoreContext.m (-setRestrictions:withFID:andTableType:getTableStatus:):
5856	(-setSortOrder:withFID:andTableType:getTableStatus:):
5857	(-getTableProperty:withTag:atPosition:withTableType:andQueryType:inFID:):
5858	adversise methods as obsolete in the log for debugging purposes.
5859	(_saveOrSubmitChangesInMessageWithMID:andFlags:save:): added code
5860	to push the relevant folder, message and table notifications.
5861	(-deleteMessageWithMID:inFID:withFlags:): same as above.
5862	(-getTable:andRowCount:withFID:tableType:andHandleId:): new pocop
5863	helper method to instantiate tables.
5864
5865	* OpenChange/MAPIStoreTable.m (-notifyChangesForChild:): new
5866	method that pushes an appropriate table notification with regards
5867	to the child passed as parameters.
5868	(-deactivate): new helper method that enables the table to
5869	unregister itself from its container prior to be released.
5870	(-setHandleId): new helper accessor enabling reporting the table
5871	handle during notifications.
5872
5873	* OpenChange/MAPIStoreObject.m (-addActiveTable:)
5874	(-removeActiveTable:): new methods to add or remove tables from
5875	the active table arrays, used later for notifications.
5876	(-resetNewProperties): new method to empty the "newProperties"
5877	dictionary once a "save changes" or a "submit" happened.
5878
5879	* OpenChange/MAPIStore*Folder.m (-messageTable, -messageFAITable,
5880	-folderTable)
5881	* OpenChange/MAPIStore*Message.m (-attachmentTable): no longer
5882	cache the resulting table.
5883
5884	* SoObjects/SOGo/SOGoCache.m
5885	(-unregisterObjectWithName:inContainer:): same as below.
5886
5887	* SoObjects/SOGo/SOGoGCSFolder.m (-removeChildRecordWithName:):
5888	new method to ensure a child records is removed from the cache
5889	when modified or deleted.
5890
58912011-03-04  Ludovic Marcotte  <lmarcotte@inverse.ca>
5892
5893	* SoObjects/Appointments/SOGoAppointmentFolder.h/m:
5894	-importCalendar: we now also import the timezone definition
5895	when present
5896	* SoObjects/SOGo/SQLSource.m
5897	We now consider the domain belonging to the SQLSource instance
5898
58992011-02-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5900
5901	* OpenChange/MAPIStoreMailContext.[hm]: renamed from
5902	MAPIStoreMailBaseContext and merged in all subclass modules due to
5903	their small size.
5904
59052011-02-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
5906
5907	* OpenChange/MAPIStoreTypes.m (NSObjectFromStreamData): convert
5908	read PT_UNICODE stream data as UTF-16.
5909
5910	* OpenChange/MAPIStoreContext.m
5911	(-setProperty:withFMID:ofTableType:fromFile:): considering the
5912	cached message as a MAPIStoreMessage instance instead of NSDictionary.
5913
5914	* OpenChange/MAPIStoreMailMessage.m
5915	(_fetchAttachmentPartsInBodyInfo:withPrefix:): detect attachment
5916	parts based on the existence of the "filename" info parameter.
5917
5918	* OpenChange/MAPIStoreTable.m: refactored class to be used as an
5919	accessor on MAPIStoreFolder or other MAPIStoreObject derivatives
5920	based on a defined set of methods. Now strictly handle the sorting
5921	and filtering of folder entries, the getting of properties having
5922	been moved to the MAPIStoreMessage classes.
5923
5924	* OpenChange/SOGoMAPIFSMessage.m (-appendProperties:): new name
5925	for "setMAPIProperties:"
5926	(-save): new name for "MAPISave", since those were methods
5927	ususally found in the obsolete category modules.
5928
5929	* OpenChange/MAPIStoreSOGo.m:
5930	(sogo_pocop_get_attachment_table, sogo_pocop_get_attachment)
5931	(sogo_pocop_create_attachment, sogo_pocop_set_table_columns)
5932	(sogo_pocop_get_table_row, sogo_pocop_get_properties)
5933	(sogo_pocop_set_properties, sogo_pocop_release): new backend
5934	methods (with counterparts in SOGoContext) that are used as part
5935	of the new proof-of-concept API, where objects are accessed
5936	directly from memory instead of needed to be resolved via their
5937	fid, mid or aid identifiers.
5938
5939	* OpenChange/MAPIStoreAttachment.m: new super class, derived from
5940	MAPIStoreObject and used for MAPI attachment objects.
5941
5942	* OpenChange/MAPIStoreFolder.m: new super class used as wrapper
5943	around SOGoFolder objects, by decoupling the code previously found
5944	in the SOGo*Context classes and which implement basic and uniform
5945	content key facilities.
5946
5947	* OpenChange/MAPIStoreMessage.m: new super class used for
5948	wrapper objects replacing the category modules on the SOGoObject.
5949
5950	* OpenChange/MAPIStoreObject.m: new super class used as base the
5951	MAPI objects counterparts (MAPIStoreMessage, MAPIStoreFolder and
5952	MAPIStoreAttachment).
5953
5954	* SoObjects/Contacts/SOGoContactGCSEntry.m
5955	(-saveContentString:baseVersion:): release the "card" ivar to
5956	avoid caching issues.
5957
5958	* SoObjects/Appointments/SOGoTaskObject.m
5959	(-saveContentString:baseVersion:): same as below.
5960
5961	* SoObjects/Appointments/SOGoAppointmentObject.m
5962	(-saveComponent:): release fullCalendar, safeCalendar and
5963	originalCalendar after modification to avoid caching issues.
5964
5965	* SoObjects/SOGo/SOGoContentObject.m (-davContentLength): return 0
5966	when "content" is nil to avoid a value of "(nil)".
5967	(-setMAPIContent:, -MAPIContent): removed obsolete methods (fixed
5968	hack).
5969
5970	* SoObjects/Mailer/SOGoMailObject.m (_hasFlag:): put the flags in
5971	a cache to avoid multiple queries.
5972
59732011-02-24  Francis Lachapelle  <flachapelle@inverse.ca>
5974
5975	* SoObjects/Appointments/SOGoAppointmentFolder.m
5976	(-_flattenCycleRecord:forRange:intoArray:): fixed the condition
5977	that checks if the event lasts all-day.
5978
59792011-02-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
5980
5981        * We now strip the bcc header in SOGoDraftObject instead
5982	of doing it in SOPE. Prior to stripping the bcc header,
5983	we keep a copy of the message for proper saving in the
5984	Sent IMAP folder.
5985
5986	* Improved the Installation and Configuration Guide regarding
5987	the SQL-based authentication sources (required database columns)
5988	and also the "id" uniqueness of authentication sources in general
5989
5990	* UI/WebServerResources/UIxPreferences.js:
5991	Added many checks in case the Mail module is disabled for
5992	proper behavior of the Preferences panel.
5993
59942011-02-23  Francis Lachapelle  <flachapelle@inverse.ca>
5995
5996	* SoObjects/Mailer/SOGoMailObject.m (-lookupInfoForBodyPart:): we
5997	now compare the path with a string only if it is a string (and not
5998	an array).
5999
6000	* SoObjects/Appointments/SOGoAppointmentFolder.m
6001	(-fixupCycleRecord:cycleRange:firstInstanceCalendarDateRange:withEventTimeZone:):
6002	avoid fixing the timezone if no event timezone is defined.
6003
6004	* SoObjects/Appointments/SOGoCalendarComponent.m
6005	(-newOccurenceWithID): set the occurrence timezone to the user's
6006	timezone. This fixes an issue when accessing occurrences of a
6007	recurrent event.
6008
60092011-02-22  Francis Lachapelle  <flachapelle@inverse.ca>
6010
6011	* UI/Scheduler/UIxCalListingActions.m (
6012	-_fillBlocks:withEvent:withNumber:): don't compute the block if
6013	the end date is before the start date. This fixes a rare segfault that
6014	occurs with recurrent event with multiple exceptions.
6015
60162011-02-17  Francis Lachapelle  <flachapelle@inverse.ca>
6017
6018	* SoObjects/Contacts/SOGoFolder+CardDAV.m (-parseContactFilter:):
6019	we now consider all DOM elements from the text-match element. This
6020	fixes problems when the query contains one or more HTML entities.
6021
60222011-02-17  Ludovic Marcotte  <lmarcotte@inverse.ca>
6023
6024        * Modified all tools to NOT check for SOGoUserSources
6025	as it'll break if we are in multi-domain with no
6026	master sources defined.
6027	* Modified SOGoAuthenticator: -imapPasswordInContext: ...
6028	to pass the server URL and not the host particle in order
6029	to determine if we are using SSL or not.
6030
60312011-02-16  Francis Lachapelle  <flachapelle@inverse.ca>
6032
6033	* UI/WebServerResources/UIxPreferences.js (-appendSieveFilterRow):
6034	fixed a bug with IE8 that would not set the "checked" attribute
6035	properly on a checkbox.
6036
60372011-02-15  Ludovic Marcotte  <lmarcotte@inverse.ca>
6038
6039	* SoObjects/Appointments/SOGoCalendarComponent.m
6040	We add extra verifications before trying to instantiate
6041	SOGoEMailAlarmsManager in order to make sure
6042	SOGoEnableEMailAlarms was set to YES prior doing this.
6043	This fixes bug #1079.
6044
60452011-02-14  Francis Lachapelle  <flachapelle@inverse.ca>
6046
6047	* UI/Scheduler/UIxDatePicker.m
6048	(-takeValuesFromRequest:inContext:): we now consider the timezone
6049	offset with respect to the current date, ie we properly consider daylight
6050	saving time offset.
6051
60522011-02-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6053
6054	* OpenChange/MAPIStoreFSMessageTable.m
6055	(-getChildProperty:forKey:withTag:): move type conversion code
6056	into NSObject+MAPIStore.
6057
6058	* OpenChange/NSObject+MAPIStore.[hm]: new category module that
6059	provides type methods common to all NSObject descendants.
6060
6061	* OpenChange/MAPIStoreContext.m
6062	(-createMessagePropertiesWithMID:inFID:isAssociated:): create a
6063	fake PR_SEARCH_KEY on new message to make Outlook happy when
6064	composing invitations.
6065	(-getProperties:ofTableType:inRow:withMID:): perform property
6066	searches on "live messages" (unsaved ones) as well.
6067
6068	* OpenChange/MAPIStoreMailMessageTable.m (-restrictedChildKeys):
6069	no longer excluded messages marked with "\Deleted".
6070	(-getChildProperty:forKey:withTag:): display the right icon for
6071	replied, forwarded, read/unread and deleted messages.
6072
6073	* OpenChange/MAPIStoreMailFolderTable.m
6074	(-getChildProperty:forKey:withTag:): compute propre response for
6075	PR_CONTENT_UNREAD, even though this will work only for subfolders
6076	and mapistore v2, neither of which is supported right now...
6077
6078	* SoObjects/Mailer/SOGoMailObject.m (-isNewMail, -replied)
6079	(-forwarded, -deleted): new accessors for the \Recent, \Answered,
6080	$Forwarded and \Deleted IMAP flags.
6081
60822011-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6083
6084	* UI/MailPartViewers/UIxMailPartViewer.m (-decodedFlatContent):
6085	finally make use of the -bodyDataFromEncoding: category method
6086	from NSData+Mail (Mailer module).
6087	(-flatContentAsString): moved charset-decoding code into a new
6088	category method named "-bodyStringFromCharset:" in NSData+Mail
6089	(Mailer module).
6090
6091	* SoObjects/Mailer/SOGoMailObject.m (-lookupInfoForBodyPart:):
6092	accept "text" as path parameter and return the main bodyStructure
6093	in that case.
6094
6095	* OpenChange/MAPIStoreMailMessageTable.m
6096	(-getChildProperty:forKey:withTag:): enhanced treatment of
6097	PR_BODY_UNICODE to accept text/plain parts when more than one is
6098	available, by selecting the first one only. This requires the
6099	prior detection of text/html parts in order to exclude the
6100	property or not.
6101	Make use of the category methods offered in NSData+Mail to
6102	properly decode the body data for PR_BODY_UNICODE and PR_HTML.
6103
61042011-02-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6105
6106	* OpenChange/MAPIStoreContext.m
6107	(-getProperties:ofTableType:inRow:withMID:): small code size
6108	optimization.
6109	(-getProperty:withFMID:ofTableType:intoFile:): added support for
6110	NSString values.
6111
6112	* OpenChange/MAPIStoreMailMessageTable.m
6113	(-getChildProperty:forKey:withTag:): return
6114	MAPI_E_NOT_ENOUGH_MEMORY for values of PR_HTML or PR_BODY_UNICODE
6115	that are larged than 16Kib (arbitrary limit).
6116
6117	* OpenChange/MAPIStoreCalendarMessageTable.m
6118	(-sortIdentifierForProperty): added support for
6119	PidLidAppointmentEndWhole and PidLidRecurring.
6120
6121	* OpenChange/MAPIStoreTable.m
6122	(-warnUnhandledProperty:inFunction:): renamed and made method public.
6123
6124	* OpenChange/MAPIStoreGCSMessageTable.m
6125	(-evaluatePropertyRestriction:intoQualifier:)
6126	took version of method from MAPIStoreTable and modified it to
6127	handle all string comparisons with the "UPPER" operator.
6128	(-_fixedDatePropertyRestriction:): renamed version of
6129	evaluateDatePropertyRestriction:intoQualifier: which now returns a
6130	new restriction instead of repassing it to evaluatePropert...
6131
6132	* OpenChange/NSAutoreleasePool+MAPIStore.m: new utility module
6133	that enables the reparenting of a talloc pointer to the current
6134	NSAutoreleasePool.
6135
6136	* OpenChange/MAPIStoreContactsMessageTable.m
6137	(-sortIdentifierForProperty:): implemented basic table for
6138	supporting the sorting implied by the use of the addressbook label
6139	buttons.
6140
6141	* OpenChange/MAPIStoreTasksMessageTable.m
6142	(-sortIdentifierForProperty:): implemented basic table for
6143	supporting common header sorts from the OL interface.
6144
6145	* OpenChange/MAPIStoreCalendarMessageTable.m
6146	(-sortIdentifierForProperty:): implemented basic table.
6147
6148	* OpenChange/MAPIStoreGCSMessageTable.m (-setSordOrder:):
6149	implemented overriden method, making use of the new
6150	"sortIdentifierForProperty:" subclass method for the mapping of
6151	sort fields and SQL fields.
6152
61532011-02-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6154
6155	* OpenChange/MAPIStoreContactsMessageTable.m
6156	(-getChildProperty:forKey:withTag:): added support for the
6157	following props: PR_SEND_INTERNET_ENCODING, PidLidFileUnderId,
6158	PidLidEmail1DisplayName, PidLidEmail1EmailAddress,
6159	PidLidEmail2EmailAddress, PR_ACCOUNT_UNICODE,
6160	PR_CONTACT_EMAIL_ADDRESSES_UNICODE,
6161	PR_EMS_AB_TARGET_ADDRESS_UNICODE, PR_SEARCH_KEY,
6162	PR_MAIL_PERMISSION
6163
6164	* OpenChange/MAPIStoreMessageTable.m
6165	(-getChildProperty:forKey:withTag:): returns a default value for
6166	PR_ORIG_MESSAGE_CLASS_UNICODE based of PR_MESSAGE_CLASS_UNICODE.
6167
6168	* OpenChange/NSArray+MAPIStore.m (-asArrayOfUnicodeStringsInCtx:):
6169	new method for returning array of "PT_UNICODE" values.
6170
61712011-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6172
6173	* OpenChange/MAPIStoreMessageTable.m
6174	(-getChildProperty:forKey:withTag:): removed PR_MESSAGE_CODEPAGE
6175	and PR_INTERNET_CPID.
6176
6177	* OpenChange/MAPIStoreMailMessageTable.m
6178	(-getChildProperty:forKey:withTag:): removed non-unicode string
6179	proptags. Added support for case
6180	PR_RCVD_REPRESENTING_ADDRTYPE_UNICODE,
6181	PR_RECEIVED_BY_ADDRTYPE_UNICODE, PR_SENDER_ADDRTYPE_UNICODE,
6182	PR_ORIGINAL_AUTHOR_NAME_UNICODE, PR_SENDER_NAME_UNICODE,
6183	PR_SENDER_EMAIL_ADDRESS_UNICODE,
6184	PR_RECEIVED_BY_EMAIL_ADDRESS_UNICODE and
6185	PR_RCVD_REPRESENTING_EMAIL_ADDRESS_UNICODE.
6186	Removed code returning MAPI_E_NOT_ENOUGH_MEMORY when content
6187	values where larger than 3999 bytes.
6188	(_sortIdentifierForProperty:): enabled sorting on
6189	PR_CLIENT_SUBMIT_TIME.
6190	Added support for PR_INTERNET_CPID, currently returning "utf-8"
6191	only (65001).
6192
61932011-02-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6194
6195	* OpenChange/MAPIStoreNotesMessageTable.m
6196	(-getChildProperty:forKey:withTag:): make PR_SUBJECT_UNICODE an
6197	alias to PR_NORMALIZED_SUBJECT_UNICODE.
6198
6199	* OpenChange/MAPIStoreMailMessageTable.m
6200	(-getChildProperty:forKey:withTag:): return a proper value for
6201	PR_SUBJECT_PREFIX_UNICODE and PR_NORMALIZED_SUBJECT_UNICODE.
6202
6203	* OpenChange/MAPIStoreMessageTable.m
6204	(-getChildProperty:forKey:withTag:): now return standard values
6205	(checked against doc) for PR_ORIGINAL_SUBJECT_UNICODE,
6206	PR_CONVERSATION_TOPIC_UNICODE, PR_SUBJECT_PREFIX_UNICODE and
6207	PR_NORMALIZED_SUBJECT_UNICODE, the two latter being common to all
6208	modules except MAPIStoreMailMessageTable.
6209
6210	* OpenChange/MAPIStoreContext.m (-openMessage:forKey:inTable:):
6211	only return PR_SUBJECT_PREFIX_UNICODE,
6212	PR_NORMALIZED_SUBJECT_UNICODE as those are the only fields
6213	required by the doc.
6214
6215	* OpenChange/MAPIStoreMailMessageTable.m
6216	(-getChildProperty:forKey:withTag:): handle PR_FLAG_STATUS and
6217	PR_FOLLOWUP_ICON based on the "Flagged" message flag.
6218
6219	* OpenChange/SOGoMailObject+MAPIStore.m: new category module for
6220	handling IMAP metadata on messages.
6221
6222	* OpenChange/MAPIStoreDraftsContext.m
6223	(-createMessageOfClass:inFolderAtURL:): implemented method to
6224	avoid a crash when "saving" drafts messages in Outlook.
6225
62262011-02-07  Ludovic Marcotte  <lmarcotte@inverse.ca>
6227
6228	* OpenChange/MAPIStoreDeletedItemsContext.m: now a subclass of
6229	MAPIStoreMailContext and make use of the trash folder as module
6230	folder.
6231
6232	* OpenChange/MAPIStoreDraftsContext.m: now a subclass of
6233	MAPIStoreMailContext and make use of the drafts folder as module
6234	folder.
6235
62362011-02-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6237
6238	* OpenChange/MAPIStoreMailMessageTable.m (-setSordOrder):
6239	overriden method with proper mapping of IMAP sort fields, still
6240	lack handling of categories.
6241
6242	* OpenChange/MAPIStoreMessageTable.m (-setSortOrder:): implemented
6243	stub method.
6244
6245	* OpenChange/MAPIStoreContext.m
6246	(-setSortOrder:withFID:andTableType:getTableStatus:): implemented
6247	backend method for sorting messages.
6248
6249	* OpenChange/SOGoMAPIFSMessage.m (-MAPISave): restored old way of
6250	decoding the property dictionary from the property list as the
6251	"new method" was working around that was solved elsewhere and was
6252	causing trouble with value typing.
6253
62542011-02-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6255
6256	* OpenChange/SOGoMAPIFSMessage.m (-properties): initialize
6257	properties to an empty dictionary if the initialization from file
6258	failed.
6259
6260	* OpenChange/MAPIStoreMailMessageTable.m (-childKeys)
6261	(-restrictedChildKeys): now only return non-deleted elements.
6262
6263	* OpenChange/SOGoMAPIFSMessage.m (-MAPISave): use an alternative
6264	way of producing the property list file as, for some reason,
6265	invoking -writeToFile:atomically: can fail on NSDictionary.
6266
6267	* OpenChange/MAPIStoreContext.m
6268	(-deleteMessageWithMID:inFID:withFlags:): we need to invoke
6269	-cleanupCaches on the related table to avoid listing deleted
6270	elements after this operation.
6271
62722011-02-03  Ludovic Marcotte  <lmarcotte@inverse.ca>
6273
6274	* OpenChange/SOGoAppointmentObject+MAPIStore.m
6275	(-setMAPIProperties:): added code to handle attendees. Make use of
6276	the new MAPIContent ivar (temp hack).
6277
6278	* SoObjects/SOGo/SOGoContentObject.m (-MAPIContent)
6279	(-setMAPIContent:): new accessors for querying/modifying the new
6280	"MAPIContent" ivar, as part of a hack to enable events to be
6281	modified multiple times as one.
6282
6283	* OpenChange/MAPIStoreCalendarContext.m
6284	(-openMessage:forKey:inTable:): overriden method to return
6285	attendees as recipients.
6286
6287	* OpenChange/SOGoMAPIFSMessage.m (-delete): implemented method.
6288	(-setMAPIProperties:): append the new properties to the existing
6289	ones instead of replacing them.
6290
6291	* OpenChange/MAPIStoreTable.m (-setRestrictions:): log the old
6292	restriction when unset.
6293
6294	* OpenChange/MAPIStoreMapping.m (-unregisterURLWithID:): new
6295	method for removing entries from the mapping dictionaries.
6296
6297	* OpenChange/MAPIStoreContext.m
6298	(-deleteMessageWithMID:inFID:withFlags:): implemented backend method.
6299
63002011-02-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6301
6302	* OpenChange/MAPIStoreContext.m
6303	(_saveOrSubmitChangesInMessageWithMID:andFlags:save:): silently
6304	ignore "IPM.Schedule.Meeting.Request" messages from Outlook
6305	and return a success code.
6306
6307	* SoObjects/SOGo/WOResourceManager+SOGo.m: new category module
6308	defining methods useful to the vanilla and OpenChange frontends.
6309	(-localeForLanguageNamed:): method moved from SOGo.m.
6310
63112011-02-01  Ludovic Marcotte  <lmarcotte@inverse.ca>
6312
6313	* SoObjects/SOGo/NSString+Utilities.h,m: Fixed
6314	the salt for crypt-based encoding
6315
63162011-02-01  Francis Lachapelle  <flachapelle@inverse.ca>
6317
6318	* UI/WebServerResources/scriptaculous/dragdrop.js (-updateDrag:):
6319	fixed JavaScript error with Offset object. This object is now
6320	casted as an array.
6321
6322	* UI/WebServerResources/MailerUI.js (-startDragging): improved
6323	behavior of drag and drop.
6324
63252011-01-28  Francis Lachapelle  <flachapelle@inverse.ca>
6326
6327	* UI/WebServerResources/MailerUI.js (-onDocumentKeydown): set
6328	the global variables lastClickedRow and lastClickedRowId to fix
6329	the behavior of subsequent selections of multiple messages.
6330	(-configureMessageListEvents): set the table listener on mouseup
6331	instead of mousedown to improve the drag'n'drop experience.
6332
63332011-01-27  Francis Lachapelle  <flachapelle@inverse.ca>
6334
6335	* SoObjects/SOGo/LDAPSource.m
6336	(-checkLogin:password:perr:expire:grace:): the caching of the DN
6337	is now performed only if the DN was found.
6338
6339	* SoObjects/Mailer/SOGoDraftObject.m (-save): we no longer use the
6340	relative URL of the draft folder when it must be created. This
6341	fixes an issue when using a subfolder as the drafts folder.
6342
63432011-01-26  Francis Lachapelle  <flachapelle@inverse.ca>
6344
6345	* UI/Scheduler/UIxComponentEditor.m (-setComponent:): retrieve the
6346	organizer from the master component when not present in the
6347	current component.
6348
63492011-01-24  Francis Lachapelle  <flachapelle@inverse.ca>
6350
6351	* SoObjects/SOGo/LDAPSource.m (_qualifierForFilter:): added
6352	support for the parameter "SearchFieldNames" that can be added to
6353	the source defaults to specify which LDAP attributes to use when
6354	filtering contacts. It defaults to the previous values, ie sn,
6355	displayname, and telephonenumber.
6356
63572011-01-21  Francis Lachapelle  <flachapelle@inverse.ca>
6358
6359	* SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m
6360	(-doesOccurOnDate:): we set the timezone of floating all-day
6361	events to the one of the date passed as argument.
6362
6363	* UI/Scheduler/UIxAppointmentEditor.m (-defaultAction): when
6364	dealing with "floating" start dates (no timezone), we convert it to
6365	the user's timezone.
6366
6367	* SoObjects/Appointments/SOGoAppointmentFolder.m
6368	(:_flattenCycleRecord:forRange:intoArray:): we must set the
6369	timezone of floating all-day events to the user's timezone.
6370	(_flattenCycleRecords:fetchRange:): Adjust the range so it ends at
6371	midnight. This is necessary when calculating recurrences of all-day events.
6372
63732011-01-17  Francis Lachapelle  <flachapelle@inverse.ca>
6374
6375	* SoObjects/Appointments/SOGoEMailAlarmsManager.m
6376	(-_lookupEntityMatchingRecord:inCalendar:): We check if
6377	recurrenceId is nil prior calling -timeIntervalSince1970.
6378
63792011-01-14  Francis Lachapelle  <flachapelle@inverse.ca>
6380
6381	* SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m
6382	(-doesOccurOnDate:): exception rules be adjusted to the event's
6383	timezone since the recurrence calculation is also based on the
6384	event's timezone.
6385
6386	* SoObjects/Appointments/SOGoAppointmentFolder.m
6387	(-_flattenCycleRecord:forRange:intoArray:): idem.
6388
63892011-01-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
6390
6391        * Work on the OpenChange backend: added more property
6392	support such as priority for tasks, events and mails,
6393	secondary email address support for contacts, nickname
6394	and birthday support for contacts and a few more or
6395	some fixes there and there.
6396	* OpenChange/SOGoMAPIFSMessage.m: -MAPISave added a hack
6397	to AVOID saving informations on the fs when dealing
6398	with the "inbox" folder - as it'll crash Outlook upon
6399	next restarts
6400	* Added OpenChange/MAPIStoreNotesMessageTable.{h,m} to
6401	later extend and improve Notes support.
6402
64032011-01-13  Francis Lachapelle  <flachapelle@inverse.ca>
6404
6405	* SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m
6406	(-doesOccurOnDate:): the date to verify must be adjusted to the
6407	event's timezone before performing the calculation of the
6408	recurrence rule.
6409
6410	* SoObjects/Appointments/iCalEvent+SOGo.m (-firstOccurenceRange):
6411	extract the original start and end dates from the event, based on
6412	the event's timezone.
6413
6414	* SoObjects/Appointments/SOGoAppointmentFolder.m
6415	(-fixupCycleRecord:cycleRange:firstInstanceCalendarDateRange:withEventTimeZone:):
6416	the event dates must be first be adjusted to the event's timezone
6417	before being adjusted to the user's timezone.
6418	(-_flattenCycleRecord:forRange:intoArray:): the calculation of the
6419	occurrences must be performed with respect to the event's
6420	timezone, not the user's timezone.
6421
6422	* SoObjects/Appointments/SOGoAppointmentObject.m
6423	(-newOccurenceWithID:): new occurrences are now independant of the
6424	user's timezone.
6425
64262011-01-11  Ludovic Marcotte  <lmarcotte@inverse.ca>
6427
6428	* OpenChange/MAPIStoreContactsMessageTable.m
6429	Added more properties: home/work URL, nickname
6430	and department.
6431
64322011-01-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6433
6434	* OpenChange/SOGoTaskObject+MAPIStore.m (-setMAPIProperties):
6435	release fullCalendar and safeCalendar to force a rebuild of
6436	the root object when next requested.
6437
6438	* OpenChange/SOGoAppointmentObject+MAPIStore.m (-setMAPIProperties):
6439	idem.
6440
6441	* OpenChange/MAPIStoreContext.m
6442	(-createMessagePropertiesWithMID:inFID:isAssociated:): added a
6443	retain count handling.
6444	(-releaseRecordWithFMID:ofTableType:): same as above.
6445	(-_saveOrSubmitChangesInMessageWithMID:andFlags:save:): cleanup
6446	table caches even for modifications.
6447
6448	* OpenChange/MAPIStoreMessageTable.m
6449	(-getChildProperty:forKey:withTag:): fixed PR_ACCESS and
6450	PR_ACCESS_LEVEL to avoid displaying the "read-only" status.
6451
6452	* OpenChange/MAPIStoreTable.m (-cleanupCaches): remove lastChild
6453	from cache too.
6454
6455	* OpenChange/MAPIStoreTasksMessageTable.m
6456	(-getChildProperty:forKey:withTag:): fixed typo affecting
6457	PidLidTaskStatus.
6458
6459	* OpenChange/MAPIStoreContext.m (-openMessage:withMID:inFID:):
6460	create a message dictionary in the message cache in order to
6461	enable modifications.
6462
6463	* OpenChange/MAPIStoreContactsMessageTable.m
6464	(-_element:ofType:excluding:inCard:): new version of the previous
6465	-_phoneOfType:excluding:inCard: method, which now returns the
6466	requested element rather than it's first value and which enables
6467	the specification of the tag.
6468	(-getChildProperty:forKey:withTag:): added support for
6469	PidLidPostalAddressId, PR_POSTAL_ADDRESS_UNICODE,
6470	PR_POST_OFFICE_BOX_UNICODE, PR_STREET_ADDRESS_UNICODE,
6471	PR_LOCALITY_UNICODE, PR_STATE_OR_PROVINCE_UNICODE,
6472	PR_POSTAL_CODE_UNICODE, PR_COUNTRY_UNICODE, PidLidWorkAddress,
6473	PidLidWorkAddressPostOfficeBox, PidLidWorkAddressStreet,
6474	PidLidWorkAddressCity, PidLidWorkAddressState,
6475	PidLidWorkAddressPostalCode and PidLidWorkAddressCountry.
6476
6477	* OpenChange/MAPIStoreContext.m (-openMessage:forKey:inTable:):
6478	avoid taking NULL values into account when returning the basic
6479	properties.
6480
6481	* OpenChange/SOGoContactGCSEntry+MAPIStore.m
6482	(-setMAPIProperties:): added support for work address and its
6483	corresponding addresse label. Preliminary support for
6484	"PidLidPostalAddressId" which enables us to set a certain address
6485	as preferred.
6486	Carefully replace existing handled fields to avoid removing them
6487	during modification.
6488
64892011-01-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6490
6491	* OpenChange/MAPIStoreContext.m (-typeLessTag:): removed method as
6492	types are now determined from openchange core.
6493
64942011-01-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6495
6496	* OpenChange/MAPIStoreContext.m (_typeLessTag:): new method
6497	designed to return a known value type for typeless tags that were
6498	requested via getprops. This abstract the missing type from the
6499	call to getChildProperty:...
6500
6501	* OpenChange/MAPIStoreMessageTable.m
6502	(-getChildProperty:forKey:withTag:): added generic values for some
6503	standard props.
6504
6505	* OpenChange/SOGoAppointmentObject+MAPIStore.m: same as below.
6506
6507	* OpenChange/SOGoTaskObject+MAPIStore.m (-setMAPIProperties:): set
6508	a value for CREATED and DTSTAMP
6509
65102011-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6511
6512	* OpenChange/MAPIStoreTasksMessageTable.m
6513	(-getChildProperty:forKey:withTag:): silently returns
6514	MAPI_E_NOT_FOUND when the completion date is not available. Added
6515	stubs for PidLidTaskMode, PidLidTaskFRecurring,
6516	PidLidTaskActualEffort and PidLidTaskEstimatedEffort.
6517
6518	* OpenChange/MAPIStoreFolderTable.m
6519	(-backendIdentifierForProperty:): new overriden method to avoid an
6520	exception under certain circumstances.
6521
6522	* OpenChange/SOGoMAPIFSMessage.m (-MAPISave): make use of
6523	"ensureDirectory" on the container folder to avoid errors with
6524	NSDictionary failing to save itself to the filesystem.
6525
6526	* OpenChange/SOGoMAPIFSFolder.m (-ensureDirectory): method made
6527	public and which ensures that the directory pointed to by the
6528	instances of this class does exist.
6529
6530	* OpenChange/SOGoContactGCSEntry+MAPIStore.m (-setMAPIProperties):
6531	take  "PidLidEmail1EmailAddress" id as key for the contact email
6532	address.
6533
65342011-01-05  Ludovic Marcotte  <lmarcotte@inverse.ca>
6535
6536        * SoObjects/SOGo/SQLSource.m - we now honor the "mail" column
6537	and we also support "MailFieldNames" in the SQL source - which
6538	is essentially and array of column names holding additonnal email
6539	addresses of users (beside the "mail" column). Also updated
6540	the documentation to reflect this change.
6541
65422011-01-05  Francis Lachapelle  <flachapelle@inverse.ca>
6543
6544	* UI/WebServerResources/SOGoAutoCompletion.js (onKeydown): added
6545	support for the delete key (confirmed value was not reset and
6546	therefore used as the field value when loosing focus).
6547
6548	* UI/WebServerResources/generic.js (showConfirmDialog): buttons
6549	callbacks must be updated when retrieving dialog box from cache.
6550
65512011-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6552
6553	* OpenChange/MAPIStoreContactsMessageTable.m
6554	(-getChildProperty:forKey:withTag:): result the same value for
6555	"PR_SUBJECT" as for "PR_DISPLAY_NAME_UNICODE" instead of a stub
6556	string.
6557
65582010-12-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6559
6560	* OpenChange/MAPIStoreMailMessageTable.m
6561	(-getChildProperty:forKey:withTag:): return "NO" for
6562	PR_REPLY_REQUESTED and PR_RESPONSE_REQUESTED. Commented out
6563	responses for "PidLidHeaderItem" and "PidLidRemoteTransferSize".
6564	Return "PR_ORIGINAL_DISPLAY_TO/CC/BCC_UNICODE" based on their
6565	non-"ORIGINAL" counterpart and return an empty string when
6566	missing.
6567	Modified the return code of "PR_RTF_COMPRESSED" to
6568	"MAPI_E_NOT_FOUND".
6569
6570	* OpenChange/MAPIStoreTypes.m (NSObjectFromSPropValue)
6571	(NSObjectFromMAPISPropValue): force booleans to be int to avoid
6572	creating EOQualifier values where the strings "YES" or "NO" appear
6573	as a result to "stringValue".
6574
6575	* OpenChange/SOGoTaskObject+MAPIStore.m
6576	(-setMAPIProperties:): same as below.
6577
6578	* OpenChange/SOGoAppointmentObject+MAPIStore.m
6579	(-setMAPIProperties:): make use of proper named properties macro
6580	symbols rather than their values, now that they are handled better
6581	in the openchange core.
6582
6583	* OpenChange/SOGoMAPIFSFolder.m (-initWithURL:andTableType:):
6584	accepts a new "tableType" parameter to store messages in a
6585	different place of the fs folder hierarchy.
6586
6587	* OpenChange/NSValue+MAPIStore.m (-asDoubleInMemCtx): really
6588	returns a double rather than an uint64_t.
6589
6590	* OpenChange/MAPIStoreTypes.m (MAPIDoubleValue): new wrapper
6591	methods for generating data of "double" type.
6592	(NSObjectFromMAPISPropValue, NSObjectFromSPropValue): now handle
6593	the PT_CLSID mapi type.
6594	(
6595	(MAPIStoreDumpMessageProperties): enhanced logging of property
6596	keys.
6597
6598	* OpenChange/NSData+MAPIStore.m (+dataWithFlatUID)
6599	(-asFlatUIDInMemCtx:, +dataWithGUID:, asGUIDInMemCtx:): new
6600	methods for handling the two GUID mapistore types.
6601
6602	* OpenChange/MAPIStoreContext.m
6603	(-createMessageOfClass:inFolderAtURL:): renamed from
6604	"-createMessageInFolder:", taking an additional message class
6605	parameter that enables the subclasses to accept or deny a message
6606	creation.
6607
6608	* OpenChange/EOQualifier+MAPIFS.m (-evaluateMAPIFSMessage:): added
6609	logging for easier debugging.
6610
6611	* OpenChange/MAPIStoreSentItemsContext.[hm]: class is now derived
6612	from MAPIStoreMailContext and set up its module folder to the
6613	user-configured sentFolder of his/her default account.
6614
6615	* OpenChange/MAPIStoreMailFolderTable.[hm]: new class module
6616	subclassed from MAPIStoreFolderTable, that provides the interface
6617	for folders in MAPIStoreMailContext.
6618
6619	* OpenChange/MAPIStoreMailContext.m: Old table methods (see
6620	below) split into the new "MAPIStoreMailMessageTable" class.
6621	(+registerFixedMappings:): changed handled uri to
6622	@"sogo://openchange:openchange@inbox/".
6623
6624	* OpenChange/MAPIStoreGCSBaseContext.m: Old table methods (see
6625	below) split into the new "MAPIStoreGCSMessageTable" class.
6626
6627	* OpenChange/MAPIStoreContactsContext.m: Old table methods (see
6628	below) split into the new "MAPIStoreContactsMessageTable" class.
6629	(+registerFixedMappings:): changed handled uri to
6630	@"sogo://openchange:openchange@contacts/".
6631
6632	* OpenChange/MAPIStoreTasksContext.m: Old table methods (see
6633	below) split into the new "MAPIStoreTasksMessageTable" class.
6634	(+registerFixedMappings:): changed handled uri to
6635	@"sogo://openchange:openchange@tasks/".
6636
6637	* OpenChange/MAPIStoreCalendarContext.m: Old table methods (see
6638	below) split into the new "MAPIStoreCalendarMessageTable" class.
6639	(+registerFixedMappings:): changed handled uri to
6640	@"sogo://openchange:openchange@calendar/" as we now consider that
6641	the "host" part of the uri names the context that handles it.
6642
6643	* OpenChange/MAPIStoreFAIMessageTable.[hm]: new class module,
6644	subclassed from MAPIStoreFSMessageTable, that provides the
6645	interface for FAI messages in MAPIStoreContext.
6646
6647	* OpenChange/MAPIStoreFSBaseContext.[hm]: renamed from
6648	MAPIStoreFileSystemBaseContext. Old table methods (see below)
6649	split into the new "MAPIStoreFSMessageTable" class.
6650
6651	* OpenChange/MAPIStoreSOGo.m (sogo_op_openmessage): added some
6652	debugging.
6653	(sogo_op_createmessage): takes a new "associated" flag parameter.
6654
6655	* OpenChange/MAPIStoreContext.m: refactored to extract the table
6656	handling code into a separate class. This enables the introduction
6657	of real classes for contents tables, folder tables and FAI tables,
6658	as well as any other type that could be handled later. Changes:
6659	- new messageTableClass and folderTableClass methods for
6660	determining the class that is appropriate to the current datatype.
6661	- new messageTable, folderTable ivars.
6662	- new faiTable ivar, always an instance of
6663	MAPIStoreFAIMessageTable.
6664	- created MAPIStoreTable, subclassed into MAPIStoreMessageTable
6665	and MAPIStoreFolderTable from which appropriate subclasses are
6666	derived for handling mails, tasks or calendar items.
6667	- renamed
6668	"getMessageTableChildproperty:atURL:withTag:inFolder:withFID:" and
6669	"getFolderTableChildproperty:atURL:withTag:inFolder:withFID:" to
6670	the simpler "getChildProperty:forKey:withTag:" form and moved them
6671	to the MAPIStoreTable class.
6672	- moved "-setRestrictions:" to MAPIStoreTable.
6673	- renamed "getFolderMessageKeys:matchingQualifier:" to
6674	"cachedChildKeys" and "cachedRestrictedChildKeys" and moved them
6675	to MAPIStoreTable.
6676	- moved all the "evaluateRestriction:intoQualifier:" methods to
6677	MAPIStoreTable.
6678	(-createMessagePropertiesWithMID:inFID:isAssociated:): now takes a
6679	"isAssociated" parameter to determine whether the message is part
6680	of the contents table or the fai table.
6681
6682	* OpenChange/EOBitmaskQualifier.m (-description): new method.
6683
66842010-12-29  Ludovic Marcotte  <lmarcotte@inverse.ca>
6685
6686	* Moved the string encryption code from SoObjects/SOGo/SQLSource.m
6687	to SoObjects/SOGo/NSString+Utilites.m
6688	* SoObjects/SOGo/SOGoUserManager.m: We now store the passwords
6689	in memcached as a SHA1 encrypted string.
6690
66912010-12-28  Ludovic Marcotte  <lmarcotte@inverse.ca>
6692
6693        * Implemented secured sessions. We no longer store in the
6694	browser's cookie the base64 encoded version of username:password
6695	You MUST now set OCSSessionsFolderURL to a value like:
6696	postgresql://sogo:sogo@127.0.0.1:5432/sogo/sogo_sessions_folder
6697	and the database table will be created automatically upon
6698	next SOGo's startup.
6699
67002010-12-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
6701
6702        * Added the /SOGo/so/<user>/Calendar/reloadWebCalendarsAndRedirect
6703	action which is particularly useful for WebAuth users
6704
67052010-12-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6706
6707	* OpenChange/MAPIStore*Context.m: added handling of a few more
6708	filters and a few more properties, in particular "named
6709	properties".
6710
67112010-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6712
6713	* OpenChange/MAPIStoreContext.m
6714	(-evaluateBitmaskRestriction:intoQualifier:): implemented method.
6715	(-releaseRecordWithFMID:ofTableType:): return MAPI_E_SUCCESS even
6716	when the message passed as parameter was not found.
6717
6718	* OpenChange/MAPIStoreMailContext.m
6719	(-evaluateContentRestriction:intoQualifier:): new overriden method
6720	handling tests on the PR_MESSAGE_CLASS_UNICODE property.
6721
6722	* OpenChange/EOQualifier+MAPIFS.m (-[EOBitmaskQualifier
6723	_evaluateMAPIFSMessageProperties:]): new method adapted to the new
6724	class below.
6725
6726	* OpenChange/EOBitmaskQualifier.[hm]: new class module
6727	implementing a new EOQualifier subclass that's adapted to the MAPI
6728	bitmask restrictions.
6729
67302010-12-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
6731
6732	* Implemented the "bindAsCurrentUser" feature (when
6733	set to the LDAP SOGoUserSources, to YES) which forces
6734	SOGo to use the DN of the currently "requesting" user
6735	to perform all LDAP-related operations
6736
67372010-12-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6738
6739	* OpenChange/EOQualifier+MAPIFS.[hm]: new category module for
6740	evaluating qualifiers with regards to SOGoMAPIFSMessage objects.
6741
6742	* OpenChange/MAPIStoreGCSBaseContext.[hm]: new class module
6743	containing all the code common to SOGoGCSFolder-based context
6744	classes, in particular with regards to restriction handling.
6745
6746	* OpenChange/MAPIStoreContext.m (-init): added new
6747	"restrictedMessageCache" dictionary to retain the ids matching the
6748	active restriction filter and "parentFoldersBag" array to retain
6749	folder objects that are parents of the module folder.
6750
6751	(-getCommonTableChildproperty:atURL:withTag:inFolder:withFID:):
6752	added handling for PR_SEARCH_KEY.
6753	(-evaluateContentRestriction:intoQualifier:)
6754	(-evaluateExistRestriction:intoQualifier:) implemented fallback
6755	code.
6756	(-getTableProperty:withTag:atPosition:withTableType:andQueryType:inFID:):
6757	added the new 'query_type' parameter, as required by the upstream
6758	changes. Adapted the code to check if the active row matches the
6759	filter (live filtering) or to return a pre-filtered set of rows
6760	altogether.
6761	(-releaseRecordWithFMID:ofTableType:) implementation of
6762	op_release_record.
6763
6764	* OpenChange/MAPIStoreMapping.m (MAPIStoreMappingInitDictionary):
6765	new function used during the instance initialization to fetch
6766	pre-existing ids from tdb index.
6767
6768	* OpenChange/MAPIStoreTypes.h (MAPIPropertyKey): renamed from
6769	MAPIPropertyNumber, changed behaviour to only take the 2 msb into
6770	account to generate a value key.
6771
6772	* OpenChange/NSData+MAPIStore.m (-asShortBinaryInMemCtx:): new
6773	corrolary method to +dataWithShortBinary:.
6774
6775	* OpenChange/MAPIStoreFileSystemBaseContext.[hm]: new base
6776	MAPIStoreContext class that handles requests for objects based on
6777	the SOGoMAPIFSFolder and SOGoMAPIFSMessage classes.
6778
6779	* MAPIStoreCommonViewsContext.[hm],
6780	MAPIStoreDeferredActionsContext.[hm],
6781	MAPIStoreDeletedItemsContext.[hm], MAPIStoreDraftsContext.[hm],
6782	MAPIStoreFreebusyContext.[hm], MAPIStoreJournalContext.[hm],
6783	MAPIStoreNotesContext.[hm], MAPIStoreRemindersContext.[hm],
6784	MAPIStoreScheduleContext.[hm], MAPIStoreSearchContext.[hm],
6785	MAPIStoreSentItemsContext.[hm], MAPIStoreShortcutsContext.[hm],
6786	MAPIStoreViewsContext.[hm]:
6787	new subclasses of MAPIStoreFileSystemBaseContext.
6788
6789	* OpenChange/NSValue+MAPIStore.[hm]: new category module for
6790	returning native MAPI types.
6791
6792	* OpenChange/SOGoMAPIFSFolder.[hm]: new class module that
6793	implements a SOGoFolder subclass that stores and retrives data
6794	to/and from the file system in the form of a plist.
6795
6796	* OpenChange/SOGoMAPIFSMessage.[hm]: new class module that
6797	implements a SOGoObject subclass that stores and retrives data
6798	to/and from the file system in the form of a plist.
6799
68002010-12-09  Ludovic Marcotte  <lmarcotte@inverse.ca>
6801
6802        * SoObject/SOGo/SQLSource.m - added SHA password
6803	hash support for SQL authentication sources.
6804	* Added patch from bug #1048
6805	* SoObjects/Mailer/SOGoDraftObject.m:
6806	-mimeHeaderMapWithHeaders:excluding: axed the "replyTo"
6807	code as it was always 'empty', leading to Reply-To being
6808	always set to the From: address, which is rather stupid.
6809
68102010-12-08  Francis Lachapelle  <flachapelle@inverse.ca>
6811
6812	* UI/WebServerResources/MailerUI.js (onMenuEmptyTrashCallback):
6813	refresh the folders tree if there're folders in the trash.
6814
68152010-12-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6816
6817	* OpenChange/MAPIStoreContext.m
6818	(-setRestrictions:withFMID:andTableType:getTableStatus:): new
6819	backend method that accepts a struct mapi_SRestriction * in order
6820	to filter the table rows.
6821	(-evaluateRestriction:intoQualifier:)
6822	(-evaluateNotRestriction:intoQualifier:)
6823	(-evaluateAndRestriction:intoQualifier:)
6824	(-evaluateOrRestriction:intoQualifier:): new low-level restriction
6825	handlers for converting MAPI restrictions into EOQualifier
6826	equivalents.
6827	(-evaluateContentRestriction:intoQualifier:)
6828	(-evaluatePropertyRestriction:intoQualifier:)
6829	(-evaluateBitmaskRestriction:intoQualifier:)
6830	(-evaluateExistRestriction:intoQualifier:) new overridable
6831	restriction handlers.
6832	(-backendIdentifierForProperty:): new overridable restriction
6833	helper for converting restriction attributes into database or IMAP
6834	fields, depending on the module in use. Used by the topmost
6835	version of -evaluatePropertyRestriction:intoQualifier: for
6836	handling "needs eval" restriction types.
6837	(-saveOrSubmitChangesInMessageWithMID:andFlags:save:) prevent any
6838	creation or modification of messages with a type attribute of
6839	"IPM.Microsoft.FolderDesign.NamedView", at least for now, because
6840	no module is able to handle those view-related messages.
6841
6842	* OpenChange/MAPIStoreSpoolerContext.m: new experimental subclass
6843	of MAPIStoreOutboxContext.
6844
6845	* OpenChange/MAPIStoreTypes.m (NSObjectFromMAPISPropValue): new
6846	helper function, similar in semantics to NSObjectFromSPropValue
6847	but taking a struct mapi_SPropValue * as parameter.
6848
6849	* OpenChange/NSData+MAPIStore.m: (+dataWithShortBinary:): new
6850	constructor for returning an NSData instance from a struct
6851	SBinary_short.
6852
68532010-12-03  Francis Lachapelle  <flachapelle@inverse.ca>
6854
6855	* UI/WebServerResources/MailerUI.js
6856	(deleteSelectedMessagesCallback): must set the value of
6857	lastClickedRow and lastClickedRowId when selecting the next row.
6858
6859	* UI/WebServerResources/HTMLElement.js (refreshSelectionByIds):
6860	log invalid references to element IDs.
6861
68622010-12-02  Ludovic Marcotte  <lmarcotte@inverse.ca>
6863
6864	* Main/SOGo+DAV.m - we avoid assuming a range is found
6865	and check for it, returning no location if necessary
6866
68672010-12-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6868
6869	* OpenChange/MAPIStoreContext.m: prevent leaks by adding an
6870	additional mutable array that retains the required parent folders
6871	until deallocation of the context.
6872	(-getCommonTableChildproperty:atURL:withTag:inFolder:withFID:):
6873	log the name of the missing properties for easier diagnostics.
6874
68752010-11-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6876
6877	* OpenChange/MAPIStoreMailContext.m
6878	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:):
6879	when the property is larger than 4000 bytes, register it in a
6880	"message" dictionary and return MAPI_E_NOT_ENOUGH_MEMORY so that
6881	it can be fetched later via the streaming mechanism.
6882
6883	* OpenChange/MAPIStoreTypes.h (MAPIPropertyNumber): changed the
6884	prototype to use an enum MAPITAGS instead of an int32_t.
6885
6886	* OpenChange/MAPIStoreContext.m
6887	(-getFolderTableChildproperty:atURL:withTag:inFolder:withFID:)
6888	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:)
6889	(-getCommonTableChildproperty:atURL:withTag:inFolder:withFID:):
6890	now return an "enum MAPISTATUS" for making debugging easier.
6891	(_createMessageWithMID:inFID:): display an error when the returned
6892	message is nil.
6893	(-getMessageProperties:inRow:atURL:): when an error code is
6894	returned from the getXXXChildProperty.. methods, the tag is set to
6895	its corresponding error tag and the error code is returned as a
6896	long value.
6897	(-getProperty:withFMID:ofTableType:intoFile:): implemented
6898	"op_get_property_into_fd" backend method.
6899
69002010-11-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6901
6902	* OpenChange/MAPIStoreTypes.m (NSObjectFromStreamData): new
6903	function for returning an NSObject from a property tag and a data
6904	pointer.
6905
6906	* OpenChange/MAPIStoreContext.m
6907	(-setProperty:withFMID:ofTableType:fromFile:): new method
6908	implementing the "set_property_from_fd" backend operation.
6909
69102010-11-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6911
6912	* OpenChange/SOGoDraftObject+MAPIStore.m: new category module.
6913	(-setMAPIProperties,-MAPISubmit,-MAPISave): implemented the MAPI
6914	methods for sending messages.
6915
6916	* OpenChange/MAPIStoreSOGo.m: (sogo_op_modifyrecipients): new
6917	backend operation.
6918
6919	* OpenChange/MAPIStoreContext.m:
6920	(-modifyRecipientsWithMID:inRows:withCount:): new method
6921	implementing the new "modifyrecipients" operation.
6922
6923	* OpenChange/MAPIStoreOutboxContext.m: new class module
6924	implementing the "outbox" folder type, as a subclass of
6925	MAPIStoreMailContext.
6926	(-createMessageInFolder:): new method that returns an instance of
6927	SOGoDraftObject.
6928
69292010-11-23  Francis Lachapelle  <flachapelle@inverse.ca>
6930
6931	* UI/WebServerResources/SchedulerUI.js (deletePersonalCalendar):
6932	argument is now the list node instead of simply the node id. The
6933	confirmation callback (deletePersonalCalendarConfirm) is binded to
6934	this object.
6935	(deletePersonalCalendarConfirm): unselect and hide the calendar
6936	node in the list until the Ajax call returns.
6937	(deletePersonalCalendarCallback): remove the hidden calendar node
6938	on success and show it when the Ajax call failed.
6939	(drawNowLine): fixed the selection of the target cells.
6940
69412010-11-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6942
6943	* OpenChange/MAPIStoreTypes.m (NSObjectFromSPropValue): added
6944	support for "PT_BINARY".
6945
6946	* OpenChange/NSData+MAPIStore.m (+dataWithBinary:): new
6947	constructor for generating an NSData instance from a struct
6948	Binary_r *.
6949
6950	* SoObjects/Mailer/SOGoDraftObject.m (-setIsHTML, -isHTML): new
6951	accessors, which enables the setting of html mode from the caller
6952	rather than from the user defaults.
6953	(-mimeMessageForContentWithHeaderMap:, -bodyPartForText): make use
6954	of "isHTML".
6955
6956	* UI/MailerUI/UIxMailEditor.m (-setIsHTML, -isHTML): new
6957	accessors. The former sets the "isHTML" ivar based on a previous
6958	request on the latter, which actually returns the value stored in
6959	the user defaults. This enables the user to change composition
6960	type while editing a message without altering the proper logic
6961	underneat.
6962	(-_saveFormInfo): forward the value of "isHTML" to the co.
6963
69642010-11-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6965
6966	* OpenChange/MAPIStoreContext.m
6967	(_prepareContextClass): new static function for clearing up
6968	+contextFromURI:inMemCtx:.
6969	(+registerFixedMappings:): new subclassable method.
6970	(_prepareContextClass): the static mappings are now initialized
6971	from the context class themselves, via the use of an unique
6972	invocation of +registerFixedMappings: when the class is
6973	instantiated first.
6974	(+MAPIModuleName): new method that returns the corresponding
6975	module name for parsing or constructing MAPI urls.
6976	(+initialize): wander the list of subclasses and construct a
6977	static dictionary with the help of the new method above for
6978	further user from +contextFromURI:inMemCtx:. This replaces the
6979	static code therein with a more dynamic approach.
6980	(-submitMessageWithMID:andFlags:): implemented method via a
6981	private method derived from
6982	-saveChangesInMessageWithMID:andFlags:, invoking -MAPISubmit on
6983	the resulting object.
6984	(-saveChangesInMessageWithMID:andFlags:) make use of the same
6985	private method as above, invoking -MAPISave on the resulting
6986	object.
6987
6988	* OpenChange/SOGoTaskObject+MAPIStore.m (-setMAPIProperties:): the
6989	start date must be taken from the 0x811e0040 property rather than
6990	"PR_START_DATE" (contrary to the event properties), we now handle
6991	the due date (0x811f0040) as well as the task "body", set as
6992	comment.
6993
69942010-11-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
6995
6996	* OpenChange/MAPIStoreTasksContext.m (-createMessageInFolder:):
6997	implemented method.
6998
6999	* OpenChange/SOGoTaskObject+MAPIStore.[hm]: new category
7000	module.
7001	(setMAPIProperties:): partially implemented, in order to be able
7002	to create basic tasks.
7003
7004	* OpenChange/MAPIStoreFreebusyContext.[hm]: new class module for
7005	the "SCHEDULE+ FREE BUSY" public folder (0x70001).
7006
7007	* OpenChange/MAPIStoreContext.m
7008	(-setPropertiesWithFMID:type:inRow:): renamed to
7009	-setPropertiesWithFMID:ofTableType:inRow:.
7010	(-getProperties:inRow:withMID:type:): renamed to
7011	-getProperties:ofTableType:inRow:withMID:.
7012
7013	* OpenChange/MAPIStoreContactsContext.m (-createMessageInFolder:):
7014	mark new entry as new.
7015
7016	* OpenChange/MAPIStoreCalendarContext.m (-createMessageInFolder:):
7017	implemented method.
7018
7019	* OpenChange/SOGoAppointmentObject+MAPIStore.[hm]: new category
7020	module for SOGoAppointmentObject.
7021	(setMAPIProperties:): partially implemented, in order to be able
7022	to create basic events.
7023
7024	* OpenChange/MAPIStoreTypes.m: new helper module designed to
7025	handle type conversion between MAPI types and NS types.
7026
7027	* OpenChange/NSDate+MAPIStore: renamed back to
7028	NSCalendarDate+MAPIStore.
7029
70302010-11-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7031
7032	* OpenChange/MAPIStoreContactsContext.m (-createMessageInFolder:):
7033	implemented method and returns an instance of SOGoContactGCSEntry.
7034
7035	* OpenChange/SOGoContactGCSEntry+MAPIStore.m: new category module.
7036	(setMAPIProperties:) new method that resets the properties on the
7037	current object and update the corresponding record in the database.
7038
7039	* OpenChange/MAPIStoreContext.m
7040	(-setPropertiesOfMessage:fromRow:): check the size of the integers
7041	on the build platform to invoke the right constructor of NSNumber.
7042	(-saveChangesInMessageWithMID:andFlags:): implemented method by
7043	looking up the requested object and creating one via "[self
7044	createMessageInFolder:]" if not exist. Afterwards, the MAPI props
7045	previously passed via setProperties.... are commited into the
7046	created/updated SOGo object.
7047
7048	* OpenChange/MAPIStoreMailContext.m
7049	(-getMessageProperties:inRow:atURL:): moved method into
7050	MAPIStoreContext.m since it's generic enough to apply to all the
7051	stores.
7052
7053	* OpenChange/MAPIStoreSOGo.m (sogo_create_context): we now make
7054	sure that the MAPIStoreContext class has been loaded. Otherwise we
7055	return MAPISTORE_ERROR.
7056
7057	* OpenChange/MAPIApplication.m (-init): most of the setup code has
7058	been moved into MAPIStoreSOGo.m.
7059
7060	* OpenChange/GNUmakefile: the MAPIStoreSOGo library is now just a
7061	wrapper that loads the new "SOGoBackend" bundle from
7062	SoProductRegistry.
7063
7064	* SoObjects/SOGo/SOGoContentObject.m (-outlookMessageClass):
7065	removed useless method.
7066
70672010-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7068
7069	* Tests/Integration/test-davacl.py (DAVPublicAccessTest.setUp):
7070	renamed "init" method to "setUp" to force reinitialization of the
7071	client objects before each test.
7072
70732010-11-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7074
7075	* UI/WebServerResources/generic.js: (onCASRecoverIFrameLoaded):
7076	the ajax recovery request is now performed from a timeout attached
7077	to the window, to make sure it does not reference the iframe
7078	itself. The iframe is removed from a similar timeout, to avoid
7079	reference errors and a continuous spinning wheel after a recovery
7080	request.
7081
70822010-11-15  Francis Lachapelle  <flachapelle@inverse.ca>
7083
7084	* UI/WebServerResources/MailerUI.js (refreshMailbox): now calls
7085	refreshUnseenCounts so the unseen count is updated when the user
7086	clicks on the "Get Mail" button.
7087
70882010-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7089
7090	* UI/Scheduler/UIxAppointmentEditor.m (-saveAction): check the
7091	equality of componentCalendar and previousCalendar by comparing
7092	their ocsPath, since the objects themselves might be different
7093	instances when the current user has logged in with a different
7094	identifier than his/her uid.
7095
70962010-11-12  Francis Lachapelle  <flachapelle@inverse.ca>
7097
7098	* UI/WebServerResources/MailerUI.js (messageFlagCallback): now
7099	remove the message headers from the cache.
7100
7101	* SoObjects/SOGo/SOGoGCSFolder.m
7102	(-folderPropertyValueInCategory:forUser:): new method that allows
7103	to specify the user from which to fetch the settings.
7104
7105	* SoObjects/Appointments/SOGoAppointmentFolder.m
7106	(-includeInFreeBusy): the verification is now performed on the
7107	calendar owner's settings instead of the activer user's settings.
7108
71092010-11-11  Francis Lachapelle  <flachapelle@inverse.ca>
7110
7111	* UI/WebServerResources/MailerUI.js (deleteSelectedMessages):
7112	don't try to delete message(s) when the selected mailbox is not a
7113	folder.
7114	(deleteSelectedMessagesCallback): when automatically selecting the
7115	next message after deletion, invalidate this message header if it
7116	was unread.
7117	(refreshCurrentFolder): don't refresh the selected mailbox if it's
7118	not a folder.
7119
7120	* UI/WebServerResources/SOGoDataTable.js (_emptyTable): now removes
7121	references to previously selected rows.
7122
71232010-11-10  Francis Lachapelle  <flachapelle@inverse.ca>
7124
7125	* UI/MailerUI/UIxMailEditor.m (-sendAction): the error message (if
7126	any) is now translated in the HTTP response.
7127
7128	* SoObjects/SOGo/SOGoMailer.m
7129	(:_smtpSendData:toRecipients:sender:): added exception handling
7130	when the smtp server is not accessible.
7131
7132	* UI/WebServerResources/MailerUI.js (openMailbox): improved
7133	behavior when reloading the mailbox.
7134	(onMenuEmptyTrashCallback): new callback exclusive to the "empty
7135	trash" menu option; it deletes the cached data source and refresh
7136	the current folder instead of jumping to the inbox.
7137
71382010-11-08  Ludovic Marcotte  <lmarcotte@inverse.ca>
7139
7140	* SOPE/GDLContentStore/GCSAlarmsFolder.m
7141	We now check for non-nil values before calling
7142	-timeInterval...
7143	* SoObjects/Mailer/SOGoMailAccount.m
7144	We try to fallback to the imap server prior falling
7145	back to localhost
7146
71472010-11-08  Francis Lachapelle  <flachapelle@inverse.ca>
7148
7149	* UI/WebServerResources/SOGoDragHandles.js (adjust): for vertical
7150	drag handles, prioritize the top limit rather than the bottom one.
7151
7152	* UI/WebServerResources/UIxContactEditor.js (onComboButtonClick):
7153	return false so the form is not submitted when the button is clicked.
7154
7155	* UI/WebServerResources/ContactsUI.js
7156	(onCategoriesMenuPrepareVisibility): don't verify the selection if
7157	the list doesn't exist (happens in the contact editor).
7158
71592010-11-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7160
7161	* OpenChange/MAPIStoreSOGo.m: added debugging witnesses call to
7162	each method.
7163
7164	* OpenChange/MAPIStoreContext.m: added a private category to NSObject.
7165	(+[NSObject objectFromSPropValue:]) new generic constructor for
7166	converting mapi types to NS* types.
7167	(-init): added a new "messages" NSMutableDictionary ivar for
7168	storing messages in constructions.
7169	(-createMessageWithMID:inFID:): implemented method by registering
7170	a new message object in "messages".
7171	(-setPropertiesWithFMID:type:inRow:): implemented the message part
7172	of the method by resolving the message passed as parameter and
7173	passing it to the new setPropertiesOfMessage:fromRow: method.
7174	(-setPropertiesOfMessage:fromRow:): new method that wanders in the
7175	property array of the aRow parameter, converts each member via
7176	+[NSObject objectFromSPropValue:] and stores the result in the
7177	message passed as parameter.
7178
7179	* OpenChange/NSDate+MAPIStore.[hm]: this module now implements a
7180	category for NSDate rather than NSCalendarDate.
7181	(+dateFromFileTime): new method that returns an NSDate from a
7182	struct FILETIME
7183
7184	* SoObjects/Appointments/SOGoAptMailReceipt.m (-getSubject)
7185	(-getBody): invoked setupValues if values is nil to ensure that
7186	the timezone has been set properly.
7187
71882010-11-05  Francis Lachapelle  <flachapelle@inverse.ca>
7189
7190	* UI/MailerUI/UIxMailListActions.m (-getSortedUIDsAction): now
7191	accepts the form parameter "no_headers" so only the UIDs are
7192	returned, without the prefetched headers.
7193
7194	* UI/WebServerResources/SOGoMailDataSource.js (init): made the
7195	headers argument optional.
7196	(_loadCallback): handled the case when the server doesn't send the
7197	prefetched headers.
7198
7199	* UI/WebServerResources/SOGoDataTable.js (_refresh): new method to
7200	force the refresh of the data table with the data of the data source.
7201	(remove): don't update the internal variables (index and count) if
7202	the UID was not found in the data source.
7203
7204	* UI/WebServerResources/MailerUI.js (openMailbox): when reloading
7205	a mailbox, only fetch the messages UIDs (without the headers).
7206	(loadMessageCallback): only reload the headers if the seen state
7207	has changed.
7208
72092010-11-04  Ludovic Marcotte  <lmarcotte@inverse.ca>
7210
7211	SoObjects/SOGo/SOGoMailer.m
7212	We stop when we see an invalid recipient and we inform the
7213	client back with what are the invalid recipients
7214
72152010-11-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7216
7217	* Tools/SOGoSockDOperation.m (_getFolderWithId:forUser:): invoke
7218	-[SOGoParentFolder lookupPersonalFolder:ignoringRights:] directly,
7219	in order to avoid a useless permission check.
7220
72212010-11-03  Francis Lachapelle  <flachapelle@inverse.ca>
7222
7223	* UI/WebServerResources/SOGoDataTable.js (remove): we must
7224	decrement the value of renderedIndex when the row removed is
7225	before the first rendered row. We also call deselect in order to
7226	update the internal array of selected rows IDs.
7227	(refresh): new method to force the recomputation of the top and
7228	bottom padding rows of the table.
7229
72302010-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7231
7232	* Tests/Integration/teststrings.sh: new utility script to test the
7233	parsability of the localization strings file.
7234
7235	* UI/WebServerResources/generic.js: (onCASRecoverIFrameLoaded):
7236	go back to the user's page instead of the logoff page.
7237
72382010-11-02  Ludovic Marcotte  <lmarcotte@inverse.ca>
7239
7240	* Implemented http://sogo.nu/bugs/view.php?id=821
7241
72422010-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7243
7244	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]:
7245	SoObjects/SOGo/NSScanner+BSJSONAdditions.[hm]: removed classes,
7246	obsoleted by the use of the SBJson library.
7247
72482010-11-01  Francis Lachapelle  <flachapelle@inverse.ca>
7249
7250	* UI/WebServerResources/MailerUI.js (mailListToggleMessagesRead):
7251	we now accepts an element as argument to directly set a message as
7252	read or unread. Also fix the bug of marking multiple messages.
7253	(mailListToggleMessagesFlagged): idem.
7254	(messageListCallback): no more observers are registered on the
7255	rows and cells. All events are delegated to the table.
7256	(onMessageSelectionChange): implemented event delegation on the
7257	table.
7258	(configureMessageListEvents): idem.
7259
7260	* UI/WebServerResources/generic.js (onRowClick): we now accepts an
7261	element as argument, bypassing the event's target element and the
7262	event listener.
7263
7264	* UI/MailerUI/UIxMailListActions.m (-messageSubject): we now
7265	escape HTML tags in the returned string.
7266
72672010-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7268
7269	* SoObjects/Appointments/SOGoAptMailUpdate.m (-setupValues): avoid
7270	setting values that are already set in SOGoAptMailNotification.
7271
7272	* SoObjects/Appointments/SOGoAptMailDeletion.m (-getBody): added
7273	the same details as for the meeting invitations.
7274
7275	* SoObjects/Appointments/SOGoAptMailNotification.m (-setupValues):
7276	merged setup code from SOGoAptMailInvitation.m.
7277
7278	* UI/WebServerResources/ContactsUI.js: (resetCategoriesMenu)
7279	(onCategoriesMenuPrepareVisibility, onCategoriesMenuItemClick)
7280	(setCategoryOnNode, unsetCategoryOnNode): new methods designed to
7281	handle the handling of categories directly from the contacts list.
7282
7283	* SoObjects/Contacts/SOGoContactGCSFolder.m (+initialize): we now
7284	return the "c_categories" field too.
7285
7286	* UI/Contacts/UIxContactActions.m: new class module implementing
7287	actions on contacts.
7288	(-setCategoryAction, -unsetCategoryAction): new actions.
7289
7290	* UI/WebServerResources/generic.js (triggerAjaxRequest): invoke
7291	the request callback only when set on the http object.
7292
7293	* SoObjects/Mailer/SOGoMailBaseObject.m (-_createIMAP4Connection):
7294	we need to initialize newConnection to nil when the return
7295	password is nil.
7296
72972010-10-28  Francis Lachapelle  <flachapelle@inverse.ca>
7298
7299	* SoObjects/Mailer/SOGoDraftObject.m
7300	(-mimeHeaderMapWithHeaders:excluding:): added the X-Forward header
7301	with the user's IP address, if available and not equal to 'localhost'.
7302
73032010-10-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7304
7305	* SoObjects/Appointments/SOGoAppointmentFolders.m
7306	(-_migrateWebCalendarsSettings): fixed a bug where the active
7307	user's login name would be used as comparison prefix, leading to a
7308	corrupted and very long calendar key. Added code to migrate those
7309	previously corrupted keys to their proper form.
7310
73112010-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7312
7313	* UI/Contacts/UIxContactView.m (-categories): new accessor for
7314	displaying card categories.
7315
7316	* UI/WebServerResources/UIxContactEditor.js: (onComboButtonClick):
7317	take the container's scrollTop into account when displaying the
7318	combobox menu.
7319
73202010-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7321
7322	* SoObjects/Contacts/SOGoContactSourceFolder.m
7323	(-lookupContactsWithFilter:onCriteria:sortBy:ordering:): added the
7324	handling of the new "criteria" parameter, returning an empty set
7325	if no known one has been passed.
7326
7327	* SoObjects/Contacts/SOGoContactGCSFolder.m
7328	(-lookupContactsWithFilter:onCriteria:sortBy:ordering:): added the
7329	handling of the new "criteria" parameter, returning an empty set
7330	if no known one has been passed.
7331
7332	* OGoContentStore/OCSContactFieldExtractor.m
7333	(-extractQuickFieldsFromVCard:): we now extract the list of
7334	categories from the vcard.
7335
7336	* UI/WebServerResources/UIxPreferences.js: added code to handle
7337	the new "Contacts Options" tab, in particular the contacts
7338	categories.
7339
7340	* UI/PreferencesUI/UIxPreferences.m (-languageCategories): renamed
7341	to "_languageCalendarCategories" as it is a private method. The
7342	dictionary key has also been renamed to
7343	"calendar_category_labels" since we now handle contact categories
7344	too.
7345	(-calendarCategoriesValue, -setCalendarCategoriesValue:): renamed
7346	from "categories" method.
7347	(-contactsCategoryList, -contactsCategoriesValue)
7348	(-setContactsCategoriesValue:): new methods for handling contacts
7349	categories in the preferences. Transfers are in JSON.
7350
7351	* UI/WebServerResources/UIxContactEditor.js: (saveCategories)
7352	(appendCategoryInput, onComboButtonClick, onCategoryInputChange)
7353	(onCategoryInputFocus, regenerateCategoriesMenu)
7354	(onCategoryMenuEntryClick, onEmptyCategoryClick) new methods added
7355	for handling the contact categories.
7356
7357	* UI/Contacts/UIxContactEditor.m (-dealloc): release
7358	addressBookItem, item, componentAddressBook and contactCategories
7359	ivars.
7360	(-setContactCategories, -contactCategories): new accessors for
7361	getting/setting the contact vcard categories. Transfers are made
7362	in JSON.
7363	(-contactCategoriesList): new accessor to return the list of
7364	categories defined in the preferences, combined with the list of
7365	those found int the contact.
7366
7367	* SoObjects/SOGo/NSArray+Utilities.m (-mergedArrayWithArray:): new
7368	method that returns the contact of the current array merged with
7369	a unique copy of the objects of the array passed as parameter.
7370
7371	* SoObjects/SOGo/SOGoUserDefaults.m (-{set}ContactsCategories):
7372	renamed version of the "contactCategories" accessors.
7373
7374	* SoObjects/SOGo/NSString+Utilities.m (-objectFromJSONString): new
7375	method replacing the one below in a more generic way. I.e. the
7376	method will accept any JSON object as input and not only
7377	dictionaries.
7378
7379	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.m
7380	(+dictionaryWithJSONString:): removed method, replaced with
7381	the more generic -[NSString objectFromJSONString] in
7382	NSString+Utilities.
7383
73842010-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7385
7386	* SoObjects/SOGo/SOGoUserDefaults.m (-setContactCategories)
7387	(-contactCategories): new accessors for the
7388	"SOGoContactCategories" user default. Accept/return an array of
7389	strings.
7390
7391	* SoObjects/Contacts/SOGoContactFolders.m
7392	(-setDavContactCategories, -davContactCategories): new accessors
7393	for the new
7394	"{urn:ietf:params:xml:ns:inverse-dav}contact-categories" custom
7395	property. Make use of the new methods above.
7396
73972010-10-25  Francis Lachapelle  <flachapelle@inverse.ca>
7398
7399	* UI/Contacts/UIxContactFolderActions.m (-importLdifData:): use
7400	lowercase keys for the contact dictionary.
7401
74022010-10-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
7403
7404        * Changes required for http://sogo.nu/bugs/view.php?id=795
7405
74062010-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7407
7408	* SoObjects/SOGo/SOGoContentObject.m (-davContentLength): fixed a
7409	potential crash (see http://www.sogo.nu/bugs/view.php?id=915) by
7410	evaluating the length differently.
7411
74122010-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7413
7414	* UI/Scheduler/UIxCalListingActions.m (_fixDates:): restored
7415	deleted code, see explanation in the code.
7416
74172010-10-15  Ludovic Marcotte  <lmarcotte@inverse.ca>
7418
7419	* SoObjects/SOGo/SOGoGCSFolder.m - remove the ACL cache
7420	and moved it to SOGoCache with memcached support. Also
7421	modified _setDisplayNameFromRow: to NOT use SOGoUser
7422	instances and it is _very costly_ to do so.
7423	* SoObjects/SOGo/SOGoCache.{h,m} - added support for
7424	caching ACLs locally and in memcached
7425
74262010-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7427
7428	* OpenChange/MAPIStoreContext.m (-getPath:ofFMID:withTableType:):
7429	returns a found path IIF the fmid matches the current context.
7430	Print an error message when the cause of mismatch is the lack of
7431	sync with the indexing file.
7432	(-getFoldersList:withFMDI:): returns a list IIF the FMID matches
7433	the current context.
7434
7435	* OpenChange/MAPIStoreMapping.m (+sharedMapping): singleton
7436	constructor.
7437
74382010-10-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7439
7440	* UI/WebServerResources/generic.js: (triggerAjaxRequest): save the
7441	content in the request object in the case a retry is needed.
7442	(onCASRecoverIFrameLoaded): on the first retry, the content
7443	parameter is passed back to "triggerAjaxRequest".
7444
7445	* OpenChange/MAPIStoreMailContext.m
7446	(-getMessageProperties:inRow:atURL:): new method.
7447	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:):
7448	added responses for PR_BODY, PR_HTML and fake responses for
7449	PR_RTF_COMPRESSED, PR_RTF_IN_SYNC.
7450
7451	* OpenChange/NSData+MAPIStore.m: new category module.
7452	(-asBinaryInMemCtx:): new method returning a struct Binary_r.
7453
7454	* OpenChange/MAPIStoreMailContext.m (-openMessage:atURL:): basic
7455	implementation returning the "to" recipients only and a few
7456	unchecked tags.
7457
7458	* OpenChange/MAPIStoreContext.m (-openMessage:withMID:inFID:):
7459	implemented method by resolving the url corresponding to the MID
7460	and transferring the call to the new subclassable
7461	"openMessage:atURL:" method.
7462	(-openMessage:atURL:): new subclassable method.
7463	(-createMessageWithMID:inFID:)
7464	(-saveChangesInMessageWithMID:andFlags:):
7465	(-submitMessageWithMID:andFlags:):
7466	(-getProperties:inRow:withMID:type:):
7467	(-getFID:byName:inParentFID:)
7468	(-setPropertiesWithMID:type:inRow:)
7469	(-deleteMessageWithMID:withFlags:): return MAPISTORE_ERROR for
7470	those unimplemented methods.
7471	(-getMessageProperties:inRow:atURL:): new subclassable method.
7472
74732010-10-14  Francis Lachapelle  <flachapelle@inverse.ca>
7474
7475	* UI/WebServerResources/MailerUI.js (updateUnseenCount): used the
7476	method charAt to read a string character instead of accessing it
7477	as an array (was not supported by IE).
7478	(saveAs): fixed a selection bug where only the first message would
7479	be saved.
7480
7481	* UI/WebServerResources/UIxAttendeesEditor.js
7482	(performSearchCallback): improved autocompletion when changing
7483	field before completion has returned.
7484
7485	* UI/WebServerResources/UIxMailToSelection.js (fancyAddRow): when
7486	using IE, the input element is now removed and created when cloning
7487	a row. Also convert the onFocus and onBlur attributes to
7488	JavaScript calls.
7489
74902010-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7491
7492	* OpenChange/MAPIStoreMapping.m (-registerURL:): commented method out.
7493	(-_setupFixedMapping): new method that registers well-known ids
7494	with well-known urls.
7495
7496	* OpenChange/MAPIStoreContext.m (+contextFromURI:): no longer
7497	register the URI mapping since the basic ones are always
7498	registered.
7499	(-setURI:andMemCtx:): new method,
7500	replacing setMemCtx, which also stores the context uri in the new
7501	"uri" ivar.
7502	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:)
7503	added assertions for context id searches. Make the context id
7504	search without the "sogo://" prefix.
7505	Added missing "break" statement, leading PR_FID to get the value
7506	of PR_MID.
7507	(-parentFID): simply returns fid...
7508	(-getPath:ofFMID:withTableType:): implemented.
7509	(-getFoldersList:withFMID:): new temporary store method,
7510	implemented.
7511
7512	* OpenChange/NSArray+MAPIStore.m: new category module.
7513	(-asFoldersListInCtx:): new method returning a properly populated
7514	"struct struct indexing_folders_list *" from an array of fids.
7515
7516	* SoObjects/Mailer/SOGoMailNamespace.m (-toOneRelationshipKeys):
7517	removed method since it seems that certain servers allow messages
7518	to be put in certain "namespace folders" (like Courier IMAP).
7519
7520	* SoObjects/Mailer/SOGoMailBaseObject.m (-imap4Connection): split
7521	initialization of the connection is the new
7522	"_createIMAP4Connection" method, make use of the cache below.
7523
7524	* SoObjects/SOGo/SOGoCache.m (-registerIMAP4Connection:forKey:)
7525	(-imap4ConnectionForKey:): new accessors that enabling the
7526	per-request caching of IMAP4 connections, in a valid state or not.
7527
75282010-10-13  Francis Lachapelle  <flachapelle@inverse.ca>
7529
7530	* SoObjects/SOGo/LDAPSource.m (_qualifierForUIDFilter:): removed
7531	duplicated constraints in the filter when using bind fields.
7532
7533	* UI/WebServerResources/HTMLElement.js (deselectAll): fixed a bug
7534	where the properties where not removed from the proper element
7535	(table instead of the tbody).
7536
7537	* UI/Scheduler/NSArray+Scheduler.h: added index constants for
7538	events fields.
7539	(compareEventsCalendarNameAscending): new method to sort by
7540	calendar name.
7541
7542	* UI/Scheduler/UIxCalListingActions.m: now uses the above
7543	mentioned constants.
7544	(+initialize): added calendar name to events fields.
7545	(eventsListAction): added sort by calendar name.
7546
7547	* UI/WebServerResources/SchedulerUI.js (eventsListCallback): added
7548	calendar name column.
7549	(onCalendarSelectEvent): improved list selection.
7550
75512010-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7552
7553	* OpenChange/MAPIStoreContext.m (-setMemCtx): argument is now of
7554	type "struct mapistore_context *". The new ldbCtx ivar is
7555	iinitialized from here.
7556	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:):
7557	added support for PR_MESSAGE_CODEPAGE, PR_MESSAGE_LOCALE_ID,
7558	PR_MESSAGE_FLAGS, PR_MESSAGE_SIZE, PR_MSG_STATUS,
7559	PR_SUBJECT_PREFIX_UNICODE, PR_IMPORTANCE, PR_PRIORITY,
7560	PR_SENSITIVITY.
7561	Add registration of unregistered MID to ldb.
7562	(-getFolderTableChildproperty:atURL:withTag:inFolder:withFID:):
7563	Add registration of unregistered FID to ldb.
7564
7565	* OpenChange/MAPIStoreCalendarContext.m: added support for case
7566	PR_CREATION_TIME.
7567
7568	* Scripts/cas-proxy-validate.py: new script that resolve
7569	reentrancy issues occurring when using SOGo in CAS mode, when SOGo
7570	requests a PGT from the CAS server.
7571
75722010-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7573
7574	* UI/WebServerResources/UIxAttendeesEditor.js:
7575	(performSearchCallback): same as below.
7576
7577	* UI/WebServerResources/SOGoAutoCompletion.js:
7578	(SOGoAutoCompletionInterface.performSearchCallback): when the
7579	match string is not found in "completeEmail" (due to a match with a
7580	non-displayed attribute), don't put emphasize anything
7581	graphically.
7582
7583	* UI/WebServerResources/ContactsUI.js:
7584	(onToolbarWriteToSelectedContacts): display an error message when
7585	no contact is selected rather than composing a new message. Fixed
7586	the method to only have one return point.
7587
7588	* UI/WebServerResources/generic.js: (triggerAjaxRequest): added an
7589	optional "attempt" argument that enables counting the number of
7590	invocations for an ajax request.
7591	(onCASRecoveryIFrameLoaded): don't repeat a failed request more
7592	than once.
7593
7594	* UI/WebServerResources/HTMLElement.js:
7595	(Element.getSelectedNodesId): if the element has not
7596	"selectedIds", set "selArray" to an empty array before checking
7597	the "selectedElements" attribute. This enables the caller to not
7598	check for a "null" return value.
7599
76002010-10-08  Francis Lachapelle  <flachapelle@inverse.ca>
7601
7602	* UI/WebServerResources/generic.js (showConfirmDialog)
7603	(showPromptDialog): keys for cached dialogs are now build from a
7604	combination of the dialog title and label to avoid collisions.
7605
7606	* UI/WebServerResources/SchedulerUI.js
7607	(deleteEventFromViewCancel): new function loaded if the user
7608	cancel the deletion of an event. It clears the array of events to
7609	delete.
7610	(onCalendarSelectEvent): don't clear the selection if the
7611	contextual menu is going to appear.
7612
7613	* UI/WebServerResources/ContactsUI.js (onDocumentKeydown):
7614	improved character key identification to fix a bug with some
7615	browsers.
7616
7617	* UI/WebServerResources/MailerUI.js (onDocumentKeydown): idem.
7618
7619	* UI/WebServerResources/SchedulerUI.js (onDocumentKeydown): idem.
7620
76212010-10-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7622
7623	* UI/Scheduler/UIxCalDateSelector.m (-viewTimeZone): restored
7624	accessor, required for the proper display of the minimonth.
7625
7626	* SoObjects/Appointments/SOGoAppointmentFolder.m
7627	(-removeFolderSettings:withReference:): new method which removes
7628	the settings for keys "FreeBusyExclusions", "FolderColors",
7629	"FolderShowAlarms", "FolderShowTasks", "InactiveFolders",
7630	"FolderSyncTags" and "FolderSynchronize". Code taken from
7631	-[SOGoGCSFolder subscribeUser:reallyDo:].
7632
7633	* SoObjects/SOGo/SOGoGCSFolder.m
7634	(-removeFolderSettings:withReference:): new overridable method
7635	which enables the removal of user settings pertaining to a folder
7636	and its type when deleting the folder or unsubscribing from it.
7637	This implementation removes the folder reference from the
7638	"FolderDisplayNames" key.
7639	(-delete): make use of the new method above.
7640
7641	* UI/WebServerResources/ContactsUI.js: (setEventsOnAddressBook)
7642	enable the "dblclick" event on non-owned addressbooks, except the
7643	public ones (owned by "nobody")
7644	(onAddressBookModify): enable the renaming of non-owned
7645	addressbooks, except the public ones
7646
76472010-10-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7648
7649	* SoObjects/SOGo/SOGoUser.m (-_appendSystemMailAccount): check
7650	that -[url scheme] and -[url query] are not null before the
7651	comparison, since nil == 0 == NSOrderedSame....
7652
7653	* OpenChange/MAPIStoreContext.m:
7654	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:)
7655	added response for PR_ROW_TYPE (always 1) and PR_DEPTH (always 0).
7656	(MAPIBoolValue, MAPILongValue, MAPILongLongValue): new helpers for
7657	talloc'd C values.
7658
76592010-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7660
7661	* OpenChange/MAPIStoreTasksContext.m
7662	(-getMessageTableChildproperty:atURL:withTag:inFolder:withFID:)
7663	implemented the following properties: PR_SUBJECT_UNICODE,
7664	PR_NORMALIZED_SUBJECT_UNICODE, PR_CONVERSATION_TOPIC_UNICODE,
7665	0x8124000b, 0x81250040, PR_CREATION_TIME,
7666	PR_MESSAGE_DELIVERY_TIME, PR_CLIENT_SUBMIT_TIME,
7667	PR_LOCAL_COMMIT_TIME, PR_LAST_MODIFICATION_TIME, 0x81200003 as
7668	well as stubs for 0x68340003, 0x683a0003, 0x68410003.
7669
76702010-10-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7671
7672	* OpenChange/MAPIStoreTasksContext.[hm]: new mapi context class
7673	for tasks.
7674
7675	* OpenChange/SOGoGCSFolder+MAPIStore.m (-componentKeysWithType:):
7676	new method that return the keys of components corresponding to the
7677	type passed as parameter.
7678
7679	* OpenChange/SOGoGCSFolder+MAPIStore.[hm]: new category module.
7680
7681	* OpenChange/MAPIStoreContext.m (-lookupObject): return nil when
7682	the parsed URL is nil.
7683	(-getFolderMessageKeys:): new subclass method designed to return
7684	the appropriate "message" keys depending on the folder type.
7685
7686	* SoObjects/SOGo/SOGoObject.m (-displayName): new accessor.
7687
76882010-09-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7689
7690	* UI/WebServerResources/UIxContactsUserFolders.js:
7691	(onConfirmFolderSelection): fixed the regexp used when sanitizing
7692	a username containing a user info field.
7693
7694	* SoObjects/Mailer/SOGoMailAccount.m (-identities): the account
7695	identities are now kept in an ivar until the account object is
7696	released. Moreoever, we invoke the new
7697	"_appendDelegatorIdentities" method when the account
7698	nameInContainer is "0".
7699	(-_appendDelegatorIdentities): new method that appends the mail
7700	values of all delegators for the owner user.
7701
7702	* UI/WebServerResources/MailerUI.js: (onMenuAccountDelegation):
7703	new menu action for showing the new dialog below.
7704	(onAccountIconMenuPrepareVisibility): new setup function.
7705
7706	* UI/MailerUI/UIxMailAccountActions.m (-addDelegateAction)
7707	(-removeDelegation): new action methods.
7708
7709	* SoObjects/Mailer/SOGoUser+Mailer.m: new category module.
7710	(mailDelegators, addMailDelegator, removeMailDelegator): new
7711	accessors.
7712
7713	* UI/MailerUI/UIxMailUserDelegationEditor.m: new window for
7714	choosing account delegates
7715
7716	* UI/WebServerResources/UIxMailUserDelegationEditor.js: new page
7717	file, derived from UIxAclEditor.js.
7718
7719	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.m
7720	(+[NSMutableDictionary dictionaryWithJSONString:]): return nil
7721	directly if the json string is empty.
7722
77232010-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7724
7725	* SoObjects/SOGo/SOGoUser.m (-_appendSystemMailAccount): cleaned
7726	up method by using NSNumber as class for port and removing useless
7727	tests on nil values.
7728
7729	* UI/MailerUI/UIxMailFolderActions.m (-createFolderAction):
7730	modified to make use of -[SOGoMailFolder create].
7731
7732	* SoObjects/Mailer/SOGoMailObject.m (-displayName): new accessor.
7733
7734	* SoObjects/Mailer/SOGoMailFolder.m (-displayName): fixed accessor
7735	to return the real folder name rather than the nameInContainer,
7736	which is escaped and prefixed with "folder".
7737	(-create): new method intented to align the operations on this
7738	class to the ones in SOGoGCSFolder.
7739
7740	* SoObjects/Contacts/SOGoContactGCSEntry.m (-displayName): new
7741	accessor.
7742
77432010-09-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
7744
7745        * Added caching support for LDAP-based groups
7746	* SoObjects/SOGo/LDAPSource.m
7747	Improved SafeLDAPCriteria() to properly escape '%'
7748	* Dropped lots of unnecessary and worthless files
7749
77502010-09-22  Francis Lachapelle  <flachapelle@inverse.ca>
7751
7752	* UI/WebServerResources/ContactsUI.js
7753	(onToolbarDeleteSelectedContacts): delete the selected addressbook
7754	if no contact is selected. Also checked if rows is defined
7755	otherwise it would cause an error with Safari.
7756
77572010-09-20  Ludovic Marcotte  <lmarcotte@inverse.ca>
7758
7759	* SoObjects/SOGo/SOGoGCSFolder.m
7760	(+folderWithSubscriptionReference:inContainer:)
7761	We now consider the localIsSubscription when
7762	building the folderName
7763
77642010-09-20  Francis Lachapelle  <flachapelle@inverse.ca>
7765
7766	* SoObjects/SOGo/SOGoContentObject.m (-davContentLength): use UTF8
7767	encoding instead of latin1.
7768
7769	* UI/WebServerResources/MailerUI.js (deleteWithoutTrash): new
7770	function used when the messages can't be copied to the trash
7771	folder (usually because the user's mailbox is overquota).
7772
7773	* UI/WebServerResources/generic.js (showConfirmDialog): added new
7774	argument variable to overwrite the default callback when user
7775	clicks on the "No" button.
7776
7777	* SoObjects/Mailer/SOGoMailFolder.m
7778	(-deleteUIDs:useTrashFolder:inContext:): new "useTrashFolder"
7779	argument variable that avoids moving the messages to the trash is
7780	set to YES.
7781
7782	* UI/MailerUI/UIxMailFolderActions.m (-batchDeleteAction): now
7783	accepts a new form variable, "withoutTrash".
7784
77852010-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7786
7787	* SoObjects/SOGo/LDAPSource.m (-_searchAttributes): added
7788	"IDField" to the search attributes for constructing addressbook
7789	entries with a valid "c_name".
7790
7791	* Tests/Integration/test-davacl.py
7792	(DAVCalendarPublicAclTest.testCollectionAccessNormalUser): make
7793	use of the fix below when removing the rights for the subscriber
7794	user.
7795
7796	* Tests/Integration/utilities.py (TestACLUtility.setupRights):
7797	when "rights" is None or unspecified, the user is now deleted from
7798	the access list. This enable default roles to take place for the
7799	specified user, which is different from simply removing all its
7800	rights.
7801
78022010-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7803
7804	* Main/SOGo+DAV.m (-davComplianceClassesInContext:): new method to
7805	declares DAV capabilities.
7806
78072010-09-17  Francis Lachapelle  <flachapelle@inverse.ca>
7808
7809	* SoObjects/SOGo/SOGoGCSFolder.m (-renameTo:): don't act as the
7810	owner of the folder when user is a superuser.
7811	(-_realAclsForUser:forObjectAtPath:): don't ignore "None" access
7812	right in order to avoid rollbacking to default roles for the
7813	calendar module (SOGoCalendarDefaultRoles) when the user has
7814	specifically no rights.
7815
78162010-09-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
7817
7818	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
7819	(_davSpecialCalendarURLWithName:): we do not return
7820	the schedule-inbox-URL if the CAL is iCal and
7821	the owner isn't the current user
7822
78232010-09-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7824
7825	* UI/Common/UIxPageFrame.m (-systemAdditionalJSFiles): new web
7826	accessor for the new method below.
7827
7828	* SoObjects/SOGo/SOGoDomainDefaults.m (-additionalJSFiles): new
7829	accessor for the new "SOGoUIAdditionalJSFiles" user default.
7830
78312010-09-13  Ludovic Marcotte  <lmarcotte@inverse.ca>
7832
7833        * Updated Ukrainian translation - patch from
7834	Oleksa Stasevych <oleksiy.stasevych@gmail.com>
7835	* Updated Italian translation - patch from
7836	Alessio Fattorini (alessio.fattorini@nethesis.it)
7837
78382010-09-09  Ludovic Marcotte  <lmarcotte@inverse.ca>
7839
7840	* Main/NSException+Stacktrace.m - reworked entirely
7841	so we use the backtrace() function to generate an
7842	interesting backtrace when an exception is raised
7843
78442010-09-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7845
7846	* UI/WebServerResources/generic.js: (recoverRequest): removed
7847	obsolete function.
7848	(onAjaxRequestStateChange): when a recovery request is required,
7849	we now use the new "createCASRecoveryIFrame" function and the
7850	"onCASRecoverIFrameLoaded" to handle the request.
7851
7852	* UI/MainUI/SOGoUserHomePage.m (-recoverAction): new method,
7853	returning a simple text-based response with HTTP code 200,
7854	ensuring that the CAS authentication process has succeeded.
7855
7856	* UI/MainUI/SOGoRootPage.m (-recoverAction): removed method.
7857
78582010-09-02  Francis Lachapelle  <flachapelle@inverse.ca>
7859
7860	* UI/WebServerResources/generic.js (openMailTo): replaced calls to
7861	encodeURI by encodeURIComponent to make sure symbols such as '?'
7862	and '&' are encoded.
7863
7864	* SoObjects/SOGo/NSDictionary+URL.m (-asURLParameters): escaped
7865	keys and values using [NSString+misc stringByEscapingURL] from SOPE.
7866
78672010-09-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7868
7869	* UI/Contacts/UIxContactFoldersView.m (-allContactSearchAction):
7870	inverted the contact/list condition test as the vlist test is
7871	faster to execute.
7872
7873	* UI/MailerUI/UIxMailView.m (_receiptMessageHeaderTo:): properly
7874	escape the message subject in QP when needed.
7875
7876	* UI/WebServerResources/UIxMailEditor.js:
7877	(onMenuCheckReturnReceipt): the function has an event parameter
7878	which we need. This fixes an exception occurring when clicking the
7879	"Options" menu.
7880
78812010-09-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7882
7883	* Tests/Unit/SOGoTest.m (-run): fixed build on GNUstep >= 1.20.
7884
7885	* UI/MailerUI/UIxMailView.m (-sendMDNAction): new action for
7886	sending an MDN from the confirmation dialog.
7887
7888	* UI/WebServerResources/MailerUI.js: (handleReturnReceipt): new
7889	function, crafted to be executed both from the main window and the
7890	popup mail window, where the value of the new "shouldAskReceipt"
7891	field is evaluated and where a popup is displayed accordingly.
7892	(onMessageConfirmMDN): new callback function for dialog mentionned
7893	above.
7894
7895	* UI/WebServerResources/JavascriptAPIExtensions.js:
7896	(String.prototype.cssIdToHungarianId) new helper method that
7897	compose the hungarian representation from an identifier where the
7898	parts are separated with a dash, such as css class and id
7899	identifiers.
7900
7901	* UI/WebServerResources/UIxPreferences.js: added code for handling
7902	prefs pertaining to return receipts.
7903
7904	* UI/MailerUI/UIxMailView.m (-shouldAskReceipt): new accessor that
7905	returns a JS bool string when the current message satisfy the
7906	conditions required for asking the user whether to send a receipt
7907	or not. Additionally, it will send the receipt automatically if
7908	the message category falls in a category where the unconditonnal
7909	send is required as per the user preferences. If "ask" or "always"
7910	is the returned value, the "$MDNSend" flag is automatically set on
7911	the IMAP message, since we want to avoid asking the user twice.
7912
7913	* UI/PreferencesUI/UIxPreferences.m
7914	(-_extractMainReceiptsPreferences:): new method for extracting
7915	prefs pertaining to return receipts and save them in the user
7916	prefs dictionary.
7917
7918	* SoObjects/SOGo/SOGoUserDefaults.m (-setAllowUserReceipt:)
7919	(-allowUserReceipt, setUserReceiptNonRecipientAction:)
7920	(userReceiptNonRecipientAction)
7921	(setUserReceiptOutsideDomainAction:)
7922	(userReceiptOutsideDomainAction, setUserReceiptAnyAction:)
7923	(userReceiptAnyAction): new accessors pertaining to return
7924	receipts.
7925
7926	* SoObjects/SOGo/SOGoUser.m (-_appendSystemMailAccount): append
7927	preferences pertaining to return receipts.
7928
79292010-08-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7930
7931	* SoObjects/SOGo/NSScanner+BSJSONAdditions.m (-scanJSONValue:):
7932	make use of NSUInteger rather than "unsigned int" for length
7933	values.
7934	(-scanJSONNumber:): now scan float numbers too.
7935
7936	* UI/WebServerResources/UIxMailEditor.js
7937	(onMenuCheckReturnReceipt): new function.
7938	(getMenus): added entries for initializing the new "Options" menu
7939	as well as the "Priority" menu.
7940
7941	* UI/MailerUI/UIxMailEditor.m (-setReceipt, -receipt): new
7942	accessors for the "receipt" hidden input field, meant to interract
7943	the the "return receipt" entry in the "Options" menu.
7944	(-setReplyTo, -replyTo): removed obsolete methods.
7945
7946	* SoObjects/Mailer/SOGoDraftObject.m (-setHeaders:)
7947	(-mimeHeaderMapWithHeaders:excluding:): added handling for the
7948	"Disposition-Notification-To" header.
7949
79502010-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7951
7952	* Tools/SOGoToolRemoveDoubles.m, UI/MailerUI/UIxMailFormatter.m:
7953	adapted classes to use "NSInteger" and "NSUInteger" instead of
7954	"int" and "unsigned int" for compatibility with versions of
7955	GNUstep base >= 1.20.
7956
79572010-08-27  Francis Lachapelle  <flachapelle@inverse.ca>
7958
7959	* UI/WebServerResources/SchedulerUI.js (newBaseEventDIV): now adds
7960	icon for event classification (confidential or private).
7961
79622010-08-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7963
7964	* UI/WebServerResources/ckeditor/: updated to v3.4.
7965
7966	* UI/WebServerResources/ckeditor/{ckeditor_source.js,ckeditor_basic_source.js,ckeditor.pack}:
7967	dropped useless files.
7968
7969	* UI/WebServerResources/UIxPreferences.js: (appendSieveFilterRow):
7970	we bind the "click" event on the activation checkbox rather than
7971	"change", because a certain obsolete browser simply ignores it.
7972	(updateFilterFromEditor): the "filter" argument is replaced with a
7973	JSON-encoded string representing the filter in question. On a
7974	certain obsolete browser, object referencing is so messed up that
7975	closing the "creator" window will suddenly invalidate the created
7976	objects. This solves the voodoo error message "The callee (server
7977	[not server application]) is not available and disappeared; all
7978	connections are invalid." when saving and closing.
7979	(setupMailboxesFromJSON): new method, created due the same issue
7980	as above, that enables the creation of an array from the response
7981	received by the filter editing window.
7982	(updateSieveFilterRow): we avoid removing the activation cb since
7983	further update event would no longer be taken into account.
7984	However we reset its "checked" status to the activation status of
7985	the updated filter.
7986
79872010-08-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
7988
7989	* SoObjects/SOGo/NSString+Utilities.m (-asQPSubjectString:): we
7990	use "NGEncodeQuotedPrintableMime" instead of
7991	"dataByEncodingQuotedPrintable" (NGQuotedPrintableCoding), as it's
7992	more suited for email header fields.
7993
7994	* SoObjects/Mailer/SOGoDraftObject.m (_quoteSpecials:): now work
7995	on single strings.
7996	(_quoteSpecialsInArray:): new method that offers the same
7997	functionality as _quoteSpecials: did before the change above.
7998
7999	* UI/MailerUI/UIxMailEditor.m (_emailFromIdentity:): the "from"
8000	field is handled in SOGoDraftObject, therefore we don't need to
8001	modify it here, especially since this will alterate the display.
8002
8003	* Tests/Unit/TestNGMimeAddressHeaderFieldGenerator.m: new test
8004	module for NGMimeAddressHeaderFieldGenerator.
8005
80062010-08-25  Francis Lachapelle  <flachapelle@inverse.ca>
8007
8008	* UI/WebServerResources/SchedulerUI.js (copyEventToClipboard)
8009	(copyEventFromClipboard, copyEventToPersonalCalendar, copyEvents):
8010	new functions to allow the copy/paste of events.
8011	(selectCalendarEvent): fixed various bugs with the selection of
8012	events.
8013	(onMenuCurrentViewPrepareVisibility): new function to disable the
8014	delete option when no event is selected and to disable the copy
8015	option when the event is owned by the user.
8016	(onDocumentKeydown): added actions for Ctrl-C and Ctrl-V.
8017	(deleteEvent): avoid showing a confirmation dialog with recurrent
8018	events that the user can't erase.
8019
8020	* UI/WebServerResources/SOGoDataTable.js: Overrided methods from
8021	HTMLElement (selectRange, selectAll) to handle selection based on rows ID.
8022
8023
8024	* UI/WebServerResources/MailerUI.js: selected messages are now
8025	identified by their row ID to handle live loading.
8026
8027	* UI/WebServerResources/HTMLElement.js (getSelectedNodesId): take
8028	advantage of the selectedIds attribute.
8029	(selectElement): also verify if the element is in the selectedIds
8030	array.
8031	(deselectAll): performance improvement; unselect elements based on
8032	the _selected class.
8033
8034	* UI/Scheduler/UIxAppointmentActions.m (-copyAction): new method
8035	to copy the appointment to a different calendar.
8036
8037	* SoObjects/Appointments/SOGoCalendarComponent.m
8038	(-copyComponent:toFolder:): was copyToFolder. This new method
8039	accepts a specific calendar component.
8040	(-copyToFolder:): uses the above method with the current calendar.
8041
80422010-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8043
8044	* UI/Contacts/UIxListEditor.m: slightly improved code at various
8045	places.
8046
80472010-08-25  Ludovic Marcotte  <lmarcotte@inverse.ca>
8048
8049        * It's now possible to use SSL or TLS for the
8050	SOGoIMAPServer value. Also updated the documentation
8051	to give samples. Fixed the "port" value save from
8052	the preferences module.
8053
80542010-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8055
8056	* UI/WebServerResources/generic.js: (log): added a hack to enable
8057	child windows to log messages in the log console of the main window.
8058
8059	* SoObjects/Contacts/SOGoContactGCSList.m (-davAddressData): added
8060	method.
8061
80622010-08-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
8063
8064	* UI/Templates/PreferencesUI/UIxPreferences.wox
8065	Enabled the UI widgets related to SSL/TLS.
8066	SOPE *must* be updated for them to work properly.
8067
80682010-08-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8069
8070	* UI/WebServerResources/UIxMailEditor.js: (clickEditorSend): make
8071	use of the iframe hack for receiving the POST's response and
8072	interpret it as JSON, with error handling.
8073
8074	* UI/WebServerResources/HTMLElement.js: (Element.allTextContent):
8075	fetch the concatenated text content of the all the child nodes of
8076	the element, recursively.
8077
8078	* UI/WebServerResources/MailerUI.js: (initMailer): use
8079	"UserSettings" only if we are the main window.
8080
8081	* UI/MailerUI/UIxMailEditor.m (-sendAction): return a json
8082	representation of the success of the operation, with a message if
8083	an exception was returned.
8084
8085	* UI/WebServerResources/MailerUI.js: (mailListToggleMessagesRead):
8086	new method, spun from "mailListMarkMessage", which is basically
8087	replaces in a more generic way by acting on all selected messages
8088	in the msg list.
8089	(mailListToggleMessagesFlagged): same as above for
8090	"mailListFlagMessageToggle".
8091	(onMenuToggleMessageRead, onMenuToggleMessageFlag): new menu
8092	callback methods.
8093	(onMarkMenuPrepareVisibility): new visibility method for the
8094	"mark-menu".
8095	(getMenus): activated the "mark as read" and "toggle flag" menu
8096	options of the "mark menu".
8097
80982010-08-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8099
8100	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-checkLogin:password:):
8101	same as below.
8102
8103	* SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): same as
8104	below.
8105
8106	* SoObjects/SOGo/SOGoGCSFolder.m (_deduceObjectNamesFromURLs:):
8107	accept "@" chars encoded as "%40".
8108
8109	* SoObjects/Contacts/SOGoContactFolders.m (-appendSystemSources):
8110	append nothing if used from an iPhone.
8111
8112	* SoObjects/SOGo/SOGoParentFolder.m (-appendPersonalSources): we
8113	now that "owner" is always set properly from the init methods, no
8114	need to invoke ownerInContext: anymore.
8115
8116	* SoObjects/SOGo/WORequest+SOGo.m (-isMacOSXAddressBookApp):
8117	renamed from "isAddressBookApp".
8118	(-isIPhoneAddressBookApp): new method to detect whether the
8119	request has been performed from the AB of iOS.
8120
8121	* SoObjects/SOGo/SOGoFolder.m (-davEntityTag): we no return a
8122	pseudo etag for collections for compatibility with the broken
8123	Apple clients.
8124
81252010-08-19  Francis Lachapelle  <flachapelle@inverse.ca>
8126
8127	* UI/WebServerResources/generic.js (showConfirmDialog): new
8128	function to replace window.confirm().
8129
8130	* UI/WebServerResources/MailerUI.js (onMenuEmptyTrash): delete the
8131	cache of the trash mailbox when called.
8132
81332010-08-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8134
8135	* Tools/sogo-ealarms-notify.m: new tool meant to be executed every
8136	minute from cron for handling email alarms notifications.
8137
8138	* SoObjects/Appointments/SOGoEMailAlarmsManager.[hm]: new GCS
8139	aware singleton class for main email alarms operations on the db.
8140
8141	* SoObjects/Mailer/SOGoMailFolder.m (-deleteUIDs:inContext:): make
8142	the use of the "result" variable clearer by declaring it with a
8143	proper class name and avoiding type confusion within the code.
8144
8145	* UI/WebServerResources/MailerUI.js: (initDnd): removed useless
8146	method.
8147	(onMessageListPrepareVisibility): fixed a bug where the current
8148	mailbox name would be attemptedly taken from the menu target,
8149	while it really should have been deduced from
8150	"Mailer.currentMailbox".
8151	(configureDraggables): we now take all label nodes under
8152	"#mailboxTree" into account and accept them as droppable when they
8153	are not an account node. Also, we associate an account tag with
8154	all of them.
8155	(startDragging): we set the drag classname of the drag handle to
8156	the correct account tag, to avoid visual feedback when hovering
8157	mailboxes from another account.
8158
8159	* UI/WebServerResources/UIxReminderEditor.js
8160	(initialiseFormValues): added code to configure the "actionList"
8161	if present (email alarms enabled).
8162	(onEditorOkClick): modify the parent's reminderAction,
8163	reminderEmailOrganizer, reminderEmailAttendees when email alarms
8164	are available. "reminderAction" is conditionally set to "display"
8165	otherwise.
8166
8167	* UI/Scheduler/UIxReminderEditor.m (-emailAlarmsEnabled): new accessor.
8168
8169	* SoObjects/Appointments/SOGoCalendarComponent.m
8170	(-saveComponent:): invoke SOGoEMailAlarmsManager to register any
8171	email alarms in the saved component.
8172	(-PUTAction:): new super method to perform the same as the above.
8173	(-prepareDelete): new super method. Invoke SOGoEMailAlarmsManager
8174	to unregister any email alarms in the deleted component.
8175
8176	* UI/Scheduler/UIxComponentEditor.m (-init): added the
8177	"reminderAction", "reminderEmailOrganizer" and
8178	"reminderEmailAttendees" ivars.
8179	(_loadEMailAlarm:) new setup method for setting up parameters that
8180	are specific to email alarms.
8181	(_appendAttendees:toEmailAlarm:,_appendOrganizerToEmailAlarm:):
8182	new method for adding "attendees" to email alarms.
8183	(-emailAlarmsEnabled): new accessor.
8184
8185	* SoObjects/Appointments/SOGoAppointmentObject.m (-prepareDelete):
8186	we now invoke -[super prepareDelete] since SOGoCalendarComponent
8187	now implements the method.
8188	(-DELETEAction:): invoke -prepareDelete instead of
8189	-prepareDeleteOccurence: since we want -[super prepareDelete] to
8190	be invoked from here too.
8191
8192	* Main/SOGo.m (-_checkMandatoryTables): added code to create the
8193	alarms table if email alarms are enabled.
8194
8195	* SoObjects/SOGo/SOGoSystemDefaults.m (-enableEMailAlarms): new
8196	method for the "SOGoEnableEMailAlarms" user default.
8197
81982010-08-19  Francis Lachapelle  <flachapelle@inverse.ca>
8199
8200	* UI/WebServerResources/generic.js (showPromptDialog): new
8201	function to replace window.prompt().
8202
82032010-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8204
8205	* SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord): we now
8206	make use of the new -[iCalAlarm nextAlarmDate] method.
8207
8208	* SoObjects/Appointments/iCalToDo+SOGo.m (-quickRecord): we now
8209	make use of the new -[iCalAlarm nextAlarmDate] method.
8210
82112010-08-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8212
8213	* UI/WebServerResources/MailerUIdTree.js: (getMailboxNode): fixed
8214	method to return unfolded nodes too.
8215
8216	* UI/WebServerResources/MailerUI.js: (updateUnseenCount): renamed
8217	from "updateStatusFolders" and improved to use DOM methods.
8218
8219	* UI/WebServerResources/dtree.js: (Node): removed the "hasUnseen"
8220	parameter.
8221
8222	* UI/MailerUI/UIxMailAccountActions.m (-listMailboxes): make use
8223	of the "application/json" content type in the response.
8224
8225	* UI/MailerUI/UIxMailFolderActions.m: (-unseenCount): renamed and
8226	moved implementation of the -[UIxMailAccountActions statusFolders]
8227	method, splitted thereof since we now execute the method on all
8228	mail folders.
8229
8230	* UI/MailerUI/UIxMailMainFrame.m (-defaultColumnsOrder): removed
8231	accessor, made obsolete by the new propagation mechanism of user
8232	defaults.
8233	(-getUnseenCountForAllFolders): new accessor that returns the
8234	value below as a string value.
8235
8236	* SoObjects/SOGo/SOGoDomainDefaults.m (-mailCheckAllUnseenCounts):
8237	new method returning whether the unseen count of all mailboxes
8238	should be checked.
8239
8240	* SoObjects/Mailer/SOGoMailAccount.m (-updateFilters): when the
8241	first login attempt fails, we must request a new password to the
8242	authenticator (as intended originally).
8243
8244	* UI/WebServerResources/generic.js: (onAjaxRequestStateChange):
8245	when using CAS authentication and when the return code is 0 and
8246	when the request status is 4, chances are that the initial ajax
8247	request failed due to the expiration of the CAS ticket entry in
8248	memcached. In FF 3.5 and above, a bug prevents the initial cookie
8249	from being given back to the reauthentication redirect from an
8250	AJAX request. Therefore we open a window that will do this for us
8251	and will close one the authentication has succeeded again.
8252
8253	* UI/MainUI/SOGoRootPage.m (-revoverAction): new fake action that
8254	perform the CAS redirection and then trigger the respawn of the
8255	initial request.
8256
8257	* UI/Common/UIxPageFrame.m (-usesCASAuthentication): new accessor
8258	used for recovery of redirected requests.
8259
8260	* SoObjects/Contacts/SOGoFolder+CardDAV.m:
8261	(_appendObject:withBaseURL:toREPORTResponse:): moved method here
8262	from SOGOContact{GCS,Source}Folder since its implementation was
8263	mostly the same in the two classes and never invoked anywhere
8264	else.
8265	Modified to return both "address-data" and "addressbook-data"
8266	(draft rev < 4) unless we parse the requested props appropriately.
8267
8268	* SoObjects/Contacts/SOGoContactGCSFolder.m
8269	(-davAddressbookMultiget): new method that responds the
8270	CardDAV addressbook-multiget report.
8271	(-davSQLFieldsTable): new overriden method that adds support for
8272	the CardDAV address-data property.
8273
8274	* SoObjects/Appointments/SOGoAppointmentFolder.m
8275	(-davCalendarMultiget:): make use of the new method below.
8276
8277	* SoObjects/SOGo/SOGoGCSFolder.m
8278	(-performMultigetInContext:inNamespace:): collection-type
8279	independent form of -[SOGoAppointmentFolder davCalendarMultiget:],
8280	moved along with all its private methods.
8281
8282	* SoObjects/Contacts/SOGoContactFolders.m
8283	(-toManyRelationshipKeys): new overriden method to return only the
8284	personal addressbook when the request is performed by
8285	AddressBook.app.
8286
82872010-08-11  Ludovic Marcotte  <lmarcotte@inverse.ca>
8288
8289	* SoObjects/Appointments/SOGoAppointmentObject.m
8290	Removed all the old calendar-schedule code and
8291	instead, implemented calendar-auto-schedule. The old
8292	code will always succeed and the new code reuses
8293	all the business logic used for the Web interface
8294	of SOGo.
8295	* SOPE/NGCards/iCalRecurrenceRule.m
8296	Modified setInterval: so that when the value is
8297	equal to 1, we do NOT set it.
8298	* UI/WebServerResources/UIxAclEditor.js
8299	In addUserCallback(), we remove the owner of the
8300	resource if it was added. This fixes #682.
8301	* We now correctly encode/decode the '&'
8302	character in the mailbox name when copying and moving
8303	messages and also when opening mailboxes. This
8304	fixes #716.
8305
83062010-08-11  Francis Lachapelle  <flachapelle@inverse.ca>
8307
8308	* UI/WebServerResources/MailerUI.js (refreshMessage): if the
8309	current mailbox is the sent folder, refresh the mailbox instead of
8310	only the message.
8311
83122010-08-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8313
8314	* UI/WebServerResources/SchedulerUI.js: (initCalendars): avoid
8315	setting "showCompletedTasks" when in a popup, since this needs
8316	access to a UserDefaults dictionary which is not present nor event
8317	required.
8318
8319	* Main/SOGo+DAV.m (-davCurrentUserPrincipal): new method
8320	implementing the "{DAV:}current-user-principal" property.
8321
8322	* SoObjects/Contacts/SOGoContactGCSEntry.m (-davAddressData): new
8323	DAV property accessor returning the card content.
8324
8325	* SoObjects/SOGo/WORequest+SOGo.m (-isAddressBookApp): new
8326	(hackish) test method to determine whether the client is Apple's
8327	AddressBook.app.
8328
8329	* UI/Common/UIxPageFrame.m (_dictionaryWithKeys:fromSource:):
8330	set an NSNull as value for keys which return no results, in order
8331	to avoid an NSInvalidArgumentException.
8332
83332010-08-10  Francis Lachapelle  <flachapelle@inverse.ca>
8334
8335	* UI/WebServerResources/generic.js (showAlertDialog): new function
8336	to replace window.alert().
8337
83382010-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8339
8340	* UI/WebServerResources/MailerUI.js (openMailbox): removed the
8341	"updateStatus" parameter, which is never used.
8342
8343	* UI/WebServerResources/generic.js (log): fixed handling of
8344	messages ending with "\n".
8345
8346	* UI/Common/UIxPageFrame.m (-setUserDefaultsKeys:)
8347	(-hasUserDefaultsKeys, -setUserSettingsKeys:)
8348	(-hasUserSettingsKeys): new accessor for determining explicitly
8349	which user defaults/settings keys are returned. The new
8350	corresponding ivars are "udKeys" and "usKeys" respectively.
8351	(-userDefaults, -userSettings): rewrote methods to create a
8352	dictionary containing only the requested keys (see above). Since
8353	the source are now explicitly queried, the values can now be
8354	inherited from the domain and system defaults.
8355
8356	* UI/WebServerResources/UIxFilterEditor.js (loadMailboxes): the
8357	first account is now always identitied with "0", therefore we no
8358	longer need the "firstMailAccount" variable.
8359
8360	* UI/PreferencesUI/UIxFilterEditor.m (-firstMailAccount): removed
8361	osbolete accessor.
8362
8363	* UI/WebServerResources/UIxPreferences.js: (onMailAccountAdd)
8364	(onMailAccountDelete): set "hasChanged" to 1 when triggered.
8365	(onColorPickerChoice): don't invoke "onChoiceChanged" as it is an
8366	event callback.
8367
83682010-08-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8369
8370	* UI/WebServerResources/generic.js (reloadPreferences): dropped
8371	useless method.
8372
8373	* UI/PreferencesUI/UIxPreferences.m (_extractAuxiliaryAccounts:):
8374	since we no longer transfer the user password to the client, the
8375	old password has to be fetched from the old account unless a new
8376	password has been set.
8377	(-mailAccounts): we now strip the passwords from the returned mail
8378	accounts, to avoid transferring them uselessly with a risk of
8379	keeping them in cache.
8380
8381	* UI/WebServerResources/MailerUI.js: (initMailboxTree): make use
8382	of the new class below and drop all code related to keeping track
8383	of active requests.
8384
8385	* UI/WebServerResources/generic.js: (AjaxRequestsChain): new class
8386	that implements the chaining of ajax requests.
8387
8388	* UI/WebServerResources/MailerUI.js: (dropAction): ensure that the
8389	destination mailbox is in the same mail account as the message
8390	being dragged.
8391	(getMenus): arranged menu descriptions as as single statement.
8392	Added "prepareVisibility" callbacks for the "messageListMenu",
8393	"messagesListMenu" and "messageContentMenu" (move/copy ops) and
8394	"inboxIconMenu", "trashIconMenu", "mailboxIconMenu" menus (folder
8395	sharing).
8396	(onMessageListMenuPrepareVisibility): new vis. callback designed
8397	to attach the right folder submenu to the copy and move ops.
8398	(onFolderMenuPrepareVisibility): new vis. cb for disabling the
8399	share of folders for auxiliary accounts.
8400	(updateMailboxMenus): simplified method by removing the first
8401	level of submenus, where the account names used to be.
8402	(openInbox): "openMailbox" only takes 3 parameters. Using "null"
8403	instead of "false" was also pretty lame.
8404	(updateStatusFolders): take the mailbox name as parameter and
8405	arranged for multiple mail accounts. In particular, "unseenCount"
8406	is now a class identifier rather than an element id.
8407	(markMailInWindow): make use of
8408	MailerUIdTreeExtension.getMailboxNode.
8409
8410	* UI/WebServerResources/ContactsUI.js
8411	(onToolbarDeleteSelectedContacts): use translated labels.
8412
8413	* UI/WebServerResources/MailerUIdTree.js:
8414	(MailerUIdTreeExtension._addFolderNode): no longer set a SPAN
8415	arroung the unseen count.
8416	(MailerUIdTreeExtension.getMailboxNode): new method returning the
8417	DIV.dTreeNode corresponding to the mailbox name passed as
8418	parameter.
8419
8420	* UI/WebServerResources/UIxPreferences.js: (_setupEvents): no
8421	longer take any parameter, which simplifies the method, as
8422	removing the "change" observers on input field is not useful.
8423	(initMailAccounts): new method that parses the mail accounts JSON
8424	dictionary, populates the mail account UL and setup related
8425	events.
8426	(onMailAccountInfoChange, onMailIdentityInfoChange)
8427	(onMailIdentitySignatureClick, onMailIdentitySignatureOK)
8428	(createMailAccountLI, onMailAccountEntryClick, displayMailAccount)
8429	(displayAccountSignature, createMailAccount)
8430	(onMailAccountAdd, onMailAccountDelete, saveMailAccounts)
8431	(compactMailAccounts): new methods completing the above.
8432
8433	* UI/PreferencesUI/UIxPreferences.m (-identitiesList)
8434	(-itemIdentityText, -signature, -setSignature): removed obsolete
8435	methods.
8436	(-defaultAction): when updating filters, we now only need to query
8437	the "0" account since accounts are no longer identified by "name".
8438	(-mailAuxiliaryUserAccountsEnabled): new bool method.
8439	(-setMailAccounts): new accessor that decodes the new mail
8440	accounts dictionary in JSON format and validates it prior to save
8441	it in the user defaults.
8442	(-mailAccounts): new accessor.
8443
8444	* UI/MailerUI/UIxMailFolderActions.m (_setFolderPurpose:): we now
8445	use the corresponding methods on the SOGoUserDefaults instance
8446	rather than in the user settings (old bug) when setting folders
8447	for the main account. Additionally, we now handle the entries from
8448	auxiliary accounts.
8449
8450	* UI/MailerUI/UIxMailEditor.m (-fromEmails): the list of
8451	identities is now taken from the corresponding mail account dict.
8452
8453	* SoObjects/Mailer/SOGoMailForward.m (-signature): same as below.
8454
8455	* UI/MailerUI/UIxMailAccountActions.m (-composeAction): same as below.
8456
8457	* SoObjects/Mailer/SOGoDraftObject.m (-fetchMailForForwarding):
8458	the signature is now taken from the original mail's corresponding
8459	account.
8460
8461	* SoObjects/Mailer/SOGoMailFolder.m
8462	(-copyUIDs:toFolder:inContext:): we now ensure that the operation
8463	is not attempted on two separate accounts.
8464	(-httpURLForAdvisoryToUser): the returned mail account is now
8465	always "0".
8466
8467	* SoObjects/Mailer/SOGoMailBaseObject.m (-imap4URL): we now add
8468	the "tls=YES" url parameter if the corresponding account
8469	encryption is set to "tls".
8470	(-imap4Login): removed useless method.
8471	(-imap4PasswordRenewed:): now a proxy to the same method on the
8472	instance account folder.
8473
8474	* SoObjects/Mailer/SOGoMailAccount.m (-identities, -signature)
8475	(encryption): new helper methods that return the corresponding key
8476	in the appropriate mail account dictionary.
8477	(-_migrateFolderWithPurpose:): moved method in SOGoMailAccount.m.
8478	(-_userFolderNameWithPurpose): rewrote method to make use of the
8479	mail account dictionaries. Fallback on the main account of the
8480	auxiliary ones do not have the required entry.
8481	(-imap4PasswordRenewed:): moved method from SOGoMailBaseObject.m
8482	and use the "password" entry in auxiliary account dicts depending
8483	on "nameInContainer".
8484	(-imap4LoginFromHTTP, -imap4Login): removed useless methods.
8485
8486	* SoObjects/SOGo/SOGoUser.m (-mailAccounts): we now conditionnally
8487	append the array of auxiliary user accounts, if enabled in the
8488	domain defaults.
8489	(-_appendSystemMailAccount): the user main signature and the
8490	sent, drafts, trash folder location are now stored in the account
8491	dictionaries. Added migration code from us to ud from
8492	SOGoMailAccount.m.
8493
8494	* SoObjects/SOGo/SOGoDomainDefaults.m
8495	(-mailAuxiliaryUserAccountsEnabled): new method returning a BOOL
8496	describing whether the domain users can access auxiliary mail
8497	accounts.
8498
8499	* SoObjects/SOGo/SOGoUserDefaults.m (-setAuxiliaryMailAccounts:)
8500	(auxiliaryMailAccounts): new methods that receives and returns an
8501	NSArray of NSDictionary describing the user's auxiliary mail
8502	accounts.
8503
8504	* UI/WebServerResources/HTMLElement.js: (deselectAll): if the
8505	container has a "selectedElements" attribute, then it's no longer
8506	required to wander through the "selectedIds" attribute. This fixes
8507	a strange bug on IE when modifying the selection on LI lists.
8508
85092010-08-05  Francis Lachapelle  <flachapelle@inverse.ca>
8510
8511	* UI/WebServerResources/SOGoResizableTable.js
8512	(computeColumnsWidths): was previous part of saveColumnsState.
8513	Used when the user hasn't modify the columns widths but the local
8514	"ratios" hash still need to be built.
8515
85162010-08-04  Francis Lachapelle  <flachapelle@inverse.ca>
8517
8518	* UI/WebServerResources/generic.js (createDialog): when the
8519	position class is set to "none", the dialog will be modal (with a
8520	dimmed background).
8521
8522	* UI/WebServerResources/ContactsUI.js: replaced window.confirm by
8523	a CSS modal dialog.
8524
85252010-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8526
8527	* UI/WebServerResources/RowEditionController.js:
8528	(RowEditionController.startEditing): avoid setting the whole
8529	element class. Make use of addClassName/removeClassName instead,
8530	so that classes added/removed via other evt handlers are not
8531	ignored.
8532
85332010-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8534
8535	* SoObjects/SOGo/SOGoUser.m (-_appendSystemMailAccount): new
8536	private method with the mailbox code split from -[mailAccounts].
8537
8538	* UI/WebServerResources/MailerUI.js (composeNewMessage): the first
8539	account is always identified as "0".
8540
8541	* UI/MailerUI/UIxMailMainFrame.m (-mailAccounts): we now return
8542	tje JSON rep. of a simple and flat array containing the account
8543	display names, since the account are represented with an integer
8544	index.
8545	(-inboxData): we directly fetch the first mail account by using
8546	the "0" key.
8547	(-composeAction): same as above.
8548
8549	* SoObjects/Mailer/SOGoMailAccount.m (-imap4URLString): the
8550	"nameInContainer" now represents the index of the current account
8551	in the array of user mail accounts, which simplifies this method.
8552	We also handle the "encryption" key, albeit currently unused, and
8553	we now add the port to the url as needed.
8554	(-shortTitle): removed method.
8555	(-davDisplayName): we only need to return the "name" key of the
8556	current account.
8557
8558	* SoObjects/Mailer/SOGoMailAccounts.m (-mailAccounts): new utility
8559	method that returns the mail account dictionaries corresponding to
8560	the owner.
8561	(-toManyRelationshipKeys): we now identify mail accounts via their
8562	index in the array of accounts, since the order will never vary,
8563	this simplifies the code.
8564	(-lookupName:inContext:acquire:): same as the above.
8565
8566	* UI/WebServerResources/RowEditionController.js:
8567	RowEditionController.startEditing: keep the "_selected" class
8568	when starting edition, if exists.
8569	RowEditionController.acceptEdition: revert the changes if the new
8570	value is an empty string (might be wrong, though).
8571	RowEditionController.onInputKeyDown: we now handle the tab key
8572	too.
8573
85742010-08-03  Ludovic Marcotte  <lmarcotte@inverse.ca>
8575
8576	* Applied patch for bug #690
8577	* Applied patch for bug #703
8578	* Applied patch for bug #714
8579	* Updated Ukrainian translation - patch from
8580	Oleksa Stasevych <oleksiy.stasevych@gmail.com>
8581
85822010-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8583
8584	* UI/WebServerResources/RowEditionController.js: new class module
8585	that implements the handling of editable list items.
8586
8587	* SoObjects/SOGo/NSNumber+Utilities.m (-jsonRepresentation):
8588	returns "true" or "false" when the initial return value is "YES"
8589	or "NO".
8590
85912010-07-30  Francis Lachapelle  <flachapelle@inverse.ca>
8592
8593	* UI/WebServerResources/SchedulerUI.js (deleteEvent): improved
8594	the function to delete all selected events cells.
8595	(onSelectAll): improved the function to select all events cells.
8596	(onDocumentKeydown): select all elements upon ctrl-A.
8597	(onCalendarSelectEvent): allow multiple selections.
8598
8599	* UI/WebServerResources/HTMLElement.js (selectAll): new method to
8600	select all entries of a list or a table.
8601
8602	* UI/WebServerResources/scriptaculous/dragdrop.js (initDrag):
8603	avoid stopping the event propagation so the blur event is properly
8604	fired on the search input field when it isfocused.
8605
86062010-07-28  Francis Lachapelle  <flachapelle@inverse.ca>
8607
8608	* UI/WebServerResources/MailerUI.js (deleteCachedMailboxByType,
8609	deletedCachedMailbox): new methods to update the datasources
8610	(mailboxes) cache.
8611
8612	* UI/WebServerResources/UIxComponentEditor.js (getCalendarOwner):
8613	new function that returns the event organizer or the calendar
8614	owner in case of an event with no organizer yet.
8615
8616	* UI/Scheduler/UIxComponentEditor.m (-organizerProfile): was
8617	jsonOrganizer. Now caches the resulting dictionary in an ivar.
8618	(-calendarOwnerList): new method called from the wox template and
8619	use to display the event organizer in the edition window of the
8620	attendees.
8621
86222010-07-27  Francis Lachapelle  <flachapelle@inverse.ca>
8623
8624	* UI/WebServerResources/SOGoAutoCompletion.js
8625	(performSearchCallback): minor change on when the popup menu has
8626	to be positioned differently.
8627
86282010-07-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
8629
8630	* Added Migration/Horde/* - scripts used to migrate
8631	the address books and email signatures from Horde to
8632	the SOGo database.
8633
86342010-07-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8635
8636	* UI/WebServerResources/ContactsUI.js: (dropSelectedContacts):
8637	reenabled copying contacts from system (LDAP) addressbooks.
8638
86392010-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8640
8641	* SoObjects/SOGo/SOGoUserFolder.m (_subFoldersFromFolder:): we
8642	need to validate the current user's access to the listed folders
8643	again because of the recent changes on SOGoParentFolder.
8644
8645	* UI/Contacts/UIxContactFoldersView.m (_subFoldersFromFolder:):
8646	removed unused method.
8647
86482010-07-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8649
8650	* UI/Contacts/UIxContactEditor.m (-photosURL): copy of the method
8651	below.
8652
8653	* UI/Contacts/UIxContactView.m (-photosURL): new access that
8654	returns the URL to the photos contained in the VCARD, whether
8655	inline or not.
8656	(-tabSelection): removed unused method.
8657
8658	* SoObjects/Contacts/SOGoContactGCSEntry.m
8659	(-lookupName:inContext:acquire:): new overriden method to handle
8660	"photoX" lookups and return the corrsponding SOGoContactEntryPhoto
8661	instance, if exists.
8662
8663	* SoObjects/Contacts/SOGoContactEntryPhoto.[hm]: new controller
8664	class for VCARD PHOTO objects.
8665
8666	* SoObjects/SOGo/SOGoContentObject.m (-davContentLength): fixed a
8667	crash occurring with certain versions of GNUstep by using
8668	NSISOLatin1StringEncoding instead of UTF8. This is actually the
8669	correct way of doing things anyway since we want to return the
8670	length in bytes and not in characters.
8671
86722010-07-16  Ludovic Marcotte  <lmarcotte@inverse.ca>
8673
8674	* UI/Contacts/UIxContactView.m
8675	In secondaryEmail, we make sure that we loop
8676	in all available email address and we pick the
8677	first one that doesn't match the primaryEmail
8678	* UI/Contacts/UIxContactEditor.m
8679	UI/Contacts/UIxContactView.m - we make sure,
8680	when excluding a type, that we reset the
8681	local variable to nil since we might exclude
8682	all values in our array.
8683
86842010-07-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8685
8686	* SoObjects/Appointments/SOGoAppointmentObject.m
8687	(_handleUpdatedEvent:fromOldEvent:): added handling of delegation
8688	chains when resetting the participation status of the attendees.
8689	Fixes #688.
8690
86912010-07-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8692
8693	* SoObjects/SOGo/SOGoUser.m (-personalCalendarFolderInContext:):
8694	we now make use of -[SOGoParentFolder
8695	lookupPersonalFolder:ignoringRights:] with @"personal" and YES as
8696	arguments.
8697
8698	* SoObjects/Appointments/SOGoAppointmentFolder.m
8699	(-lookupCalendarFolderForUID:): removed useless method, which can
8700	be replaced with -[SOGoUser personalCalendarFolderInContext:].
8701
8702	* UI/Scheduler/UIxCalListingActions.m
8703	(_aptFolder:withClientObject:): removed unused method.
8704	(_fixDates:): apply fix also for monthly views.
8705
8706	* UI/WebServerResources/UIxAppointmentEditor.js
8707	(onComposeToAllAttendees): take the status image DIV into account
8708	when detecting the user fullnames.
8709	(onComposeToUndecidedAttendees): same as above.
8710
8711	* Tests/Integration/test-davacl.py
8712	(DAVCalendarPublicAclTest.testCollectionAccessNormalUser): print
8713	the amount of received hrefs.
8714
8715	* SoObjects/Appointments/SOGoAppointmentFolders.m
8716	(-folderObjectKeys): we now check the "AccessObject"
8717	right on the returned folders to determine whether their ICS or
8718	XML version should be accessible.
8719
8720	* SoObjects/SOGo/SOGoParentFolder.m
8721	(_fetchPersonalFolders:withChannel:): we no longer check access
8722	rights from here as this method is too low level and prevent other
8723	mechanisms from working properly.
8724	(-lookupPersonalFolder:ignoringRights:): new method enabling the
8725	lookup of a user's personal folders only and offering the choice
8726	of respecting (or not) the active user's permission before
8727	returning it.
8728	(-lookupName:inContext:acquire:): we now make use of the above
8729	method when looking up personal folders ("personal" or not).
8730	(-toManyRelationShipKeys): same as lookupName... above.
8731
8732	* SoObjects/SOGo/SOGoObject.m (-ignoreRights): new utility method
8733	that determines whether the current object must check access
8734	rights on subobjects.
8735
87362010-07-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8737
8738	* SoObjects/SOGo/SOGoGCSFolder.m (-aclSQLListingFilter): return an
8739	empty string when the active user is a super user.
8740	(-initializeQuickTablesAclsInContext:): set
8741	"userCanAccessAllObjects" to YES also when the active user is a
8742	super user.
8743
8744	* Tests/Integration/test-davacl.py
8745	(DAVCalendarAclTest._testEventIsSecureVersion): accept a differing
8746	SUMMARY since it will always change depending on the user's
8747	language and is a pain to adapt.
8748	(DAVCalendarPublicAclTest.testCollectionAccessNormalUser): added
8749	code to accept and handle the XML and ICS calendar variants.
8750	(DAVCalendarSuperUserAclTest.__init__): new test access class for
8751	ensuring that super users have full, inconditionnal and complete
8752	access to simple user's collections
8753
87542010-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8755
8756	* Tests/Integration/test-put.py: new test module executing X puts
8757	based on a number of auto-generated events configured in config.py
8758
8759	* Tests/Integration/ev_generator.py: new module producing
8760	auto-generated events based on a number of days
8761
8762	* Tests/Integration/sogotests.py: new module overriding
8763	certain methods from the "unittest" module in order to
8764	automatically execute the tests in verbose mode and by displaying
8765	a timing of the test execution.
8766
8767	* Tests/Integration/test-webdavsync.py (WebdavSyncTest.test):
8768	adapted to suit the new handling of empty collections in SOGo
8769
87702010-07-09  Francis Lachapelle  <flachapelle@inverse.ca>
8771
8772	* UI/WebServerResources/UIxAttendeesEditor.js (onContactKeydown):
8773	reset left scroll uppon autocompletion (fix for IE).
8774	(onAttendeeResultClick): idem.
8775	(prepareAttendees): add the organizer at the top of the attendees list.
8776
8777	* UI/Scheduler/UIxComponentEditor.m (-jsonOrganizer): new method
8778	that returns a JSON representation of a dictionary describing the
8779	organizer of the event.
8780
87812010-07-07  Francis Lachapelle  <flachapelle@inverse.ca>
8782
8783	* UI/WebServerResources/HTMLInputElement.js: renamed valueAsDate
8784	as inputAsDate since it conflicts with the DOM attribute with the same
8785	name in HTML5.
8786
87872010-07-06  Francis Lachapelle  <flachapelle@inverse.ca>
8788
8789	* SoObjects/SOGo/NSString+Utilities.m (-_setupCSSEscaping): added
8790	the single quote (') in the list of characters to escape.
8791
8792	* UI/WebServerResources/JavascriptAPIExtensions.js
8793	(asCSSIdentifier): idem.
8794
87952010-07-05  Francis Lachapelle  <flachapelle@inverse.ca>
8796
8797	* UI/WebServerResources/UIxContactEditor.js
8798	(validateContactEditor): added validation of birthdate.
8799
8800	* UI/WebServerResources/SchedulerUI.js (onCalendarModify): fixed
8801	proper identification of web calendars and adjusted height of
8802	popup window.
8803
88042010-07-04  Ludovic Marcotte  <lmarcotte@inverse.ca>
8805
8806        * In the Contacts module, we prioritize the
8807	WORK number while excluding the FAX one in case
8808	we see the latter before the former.
8809
88102010-07-01  Ludovic Marcotte  <lmarcotte@inverse.ca>
8811
8812        * In the Contacts module, improved the label
8813	of the birthday field.
8814
88152010-06-30  Ludovic Marcotte  <lmarcotte@inverse.ca>
8816
8817        * When displaying or editing cards, we make sure
8818	we properly fallback to the homeURL field when
8819	a work value is defined but we also have one other
8820	untagged value defined.
8821
88222010-06-30  Francis Lachapelle  <flachapelle@inverse.ca>
8823
8824	* UI/MailerUI/UIxMailEditor.m (-localeCode): new method that
8825	returns the language two-letter code. Used to set the language in
8826	the CKEditor instance in JavaScript.
8827
8828	* UI/PreferencesUI/UIxPreferences.m (-localeCode): idem.
8829
88302010-06-30  Ludovic Marcotte  <lmarcotte@inverse.ca>
8831
8832        * When displaying cards, we now make sure that
8833	the "service" is non-empty prior creating the
8834	proper field value.
8835
88362010-06-30  Francis Lachapelle  <flachapelle@inverse.ca>
8837
8838	* UI/WebServerResources/UIxPreferences.js (savePreferences): added
8839	email validation of forward address (if enabled).
8840
8841	* UI/WebServerResources/MailerUI.js (onDocumentKeydown): improved
8842	scrolling when using the arrows keys.
8843
88442010-06-29  Francis Lachapelle  <flachapelle@inverse.ca>
8845
8846	* UI/WebServerResources/UIxCalendarProperties.js
8847	(onLoadCalendarProperties): we now make use of tabs in the
8848	properties window.
8849
8850	* UI/Scheduler/UIxCalendarProperties.m (-isPublicAccessEnabled):
8851	new method, copied from Common/UIxAclEditor.m.
8852	(-_basePublicCalDAVURL): new method that return the public base
8853	URL of the calendar.
8854	(-publicCalDavURL, -publicWebDavICSURL, -publicWebDavXMLURL): new
8855	methods to return the various public URLs associated to the calendar.
8856
8857	* SoObjects/SOGo/SOGoGCSFolder.m (-publicDavURL): new method to
8858	return the public DAV URL of the folder.
8859
88602010-06-28  Ludovic Marcotte  <lmarcotte@inverse.ca>
8861
8862        * SOPE/sope-patchset-r1664.diff
8863	Fixed the LF/CRLF encoding issue in NGSmtpClient.m
8864	* SOPE/sope-patchset-r1664.diff
8865	We now also consider https connections for WOHTTPURLHandle.m
8866	* SoObjects/Appointments/SOGoWebAppointmentFolder.m
8867	(-loadWebCalendar):
8868	Modified so that we use SOPE's WOHTTPURLHandle class instead
8869	of the NSURL code to fetch remote ICS calendars. This allow
8870	use to support SSL by using SOPE class instead of the SSL
8871	bundle of GNUstep (which is generally not available anywhere).
8872
88732010-06-28  Francis Lachapelle  <flachapelle@inverse.ca>
8874
8875	* UI/Contacts/UIxContactEditor.m (-initSnapshot, -_saveSnapshot):
8876	added support for "extended" work/home addresses.
8877
88782010-06-25  Francis Lachapelle  <flachapelle@inverse.ca>
8879
8880	* UI/MailerUI/UIxMailMainFrame.m (-inboxData): new method used to
8881	avoid an AJAX call when first loading the webmail module. It
8882	returns a dictionary with the UIDs of the inbox folder as well as
8883	the headers of the first few messages.
8884
8885	* UI/MailerUI/UIxMailListActions.m (-imap4SortOrdering): fixed an
8886	issue that would not save the sorting state when matching the
8887	default sort key but not the sort direction.
8888	(-getUIDsAndHeadersInFolder:): new method that returns all UIDs of
8889	a mail folder and the headers of the first corresponding messages.
8890	(-getHeadersForUIDs:inFolder:): was getHeadersAction. It now
8891	returns an array of arrays instead of an array of
8892	dictionaries. The first array contains the previous dictionary
8893	keys so we can easily reconstruct a dictionary in JavaScript.
8894
8895	* UI/MailerUI/UIxMailEditor.m (-setSourceUID:, -sourceUID,
8896	-setSourceFolder:, -sourceFolder): new methods to keep track of
8897	the source folder replying or forwarding a message.
8898	(-sendAction): now calls the JavaScript function refreshMessage
8899	instead of refreshCurrentMailbox.
8900
8901	* SoObjects/Mailer/SOGoDraftObject.m (-setSourceFolder:,
8902	-setSourceFolderWithMailObject:, -sourceFolder): new methods to
8903	keep track of the source folder replying or forwarding a message.
8904	(-fetchMailForEditing:): fixed the message UID value.
8905
8906	* UI/WebServerResources/SOGoMailDataSource.js (remove): new
8907	function that was integrated to invalidate. There are now
8908	splitted.
8909	(init): new function to initialize the data source with
8910	pre-fetched uids and headers.
8911	(getData): if the source is not yet loaded, the function will now
8912	be called by the method _loadCallback.
8913	(_getRemoteDataCallback): headers received from the server are no
8914	formatted as a hash but as an array with the first entry
8915	corresponding the previous hash keys.
8916
8917	* UI/WebServerResources/SOGoDataTable.js (initSource): was
8918	setSource which was redefined to received a data source as
8919	argument.
8920	(invalidate): new function to refresh a single row.
8921
8922	* UI/WebServerResources/MailerUI.js (openMailbox): added caching
8923	of data sources (IMAP folders). The previous selection is now
8924	restored when chaning folders.
8925	(loadMessageCallback): the window is no longer reloaded if the
8926	message doesn't exist; only the proper row is removed.
8927	(refreshMessage): new function called after sending a message.
8928	(onMailboxMenuMove, onMailboxMenuCopy): remove cache of target
8929	folder.
8930
89312010-06-24  Francis Lachapelle  <flachapelle@inverse.ca>
8932
8933	* UI/MailerUI/UIxMailEditor.m (-sendAction): trigger the new
8934	JavaScript function refreshMessage() instead of
8935	refreshCurrentFolder() so we only refresh one row.
8936
89372010-06-23  Francis Lachapelle  <flachapelle@inverse.ca>
8938
8939	* SoObjects/SOGo/SOGoUserDefaults.m (-language): verify that the
8940	language is part of the supported languages of the system configuration.
8941
8942	* UI/Scheduler/UIxCalMonthView.m (-init): retrieve the locale
8943	associated to the user's language.
8944
89452010-06-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8946
8947	* SoObjects/SOGo/SOGoGCSFolder.m (-_lastModified): new method that
8948	returns the last modified timestamp of the folder. Taken from
8949	previous implementation of davCollectionTag.
8950	(-davCollectionTag): make use of the new method above.
8951	(_isValidSyncToken:): new method that perform a real validation of
8952	the sync token passed as parameter.
8953	(-davSyncCollection): make use of the new method above.
8954
89552010-06-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8956
8957	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-checkLogin:andPassword:)
8958	we save the CAS session information to the cache after a
8959	successful authentication/validation.
8960
89612010-06-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8962
8963	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-checkLogin:andPassword:)
8964	(imapPasswordInContext:forServer:forceRenew:): when using CAS
8965	authentication, make use of the password as a CAS ticket instead
8966	of as identifier, since we don't make use of those in DAV.
8967
89682010-06-17  Francis Lachapelle  <flachapelle@inverse.ca>
8969
8970	* UI/WebServerResources/UIxMailToSelection.js
8971	(addressFieldLostFocus): improved intelligence when parsing
8972	recipient.
8973	(expandContactListCallback): we remove the container attribute to
8974	avoid triggering the event autocompletion:changedlist once again.
8975
8976	* UI/WebServerResources/SOGoAutoCompletion.js (bind): remove the
8977	container attribute for the same reason.
8978
89792010-06-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
8980
8981	* SoObjects/Appointments/SOGoAppointmentFolders.m
8982	(-reloadWebCalendars:): invoke -[self
8983	_migrateWebCalendarsSettings] for when we are executing from a
8984	non-Calendar module.
8985
89862010-06-16  Francis Lachapelle  <flachapelle@inverse.ca>
8987
8988	* UI/WebServerResources/UIxListEditor.js (onDocumentKeydown):
8989	submit form when pressing the return key.
8990
8991	* UI/WebServerResources/UIxContactEditor.js (onDocumentKeydown):
8992	idem.
8993
8994	* UI/WebServerResources/SOGoAutoCompletion.js
8995	(performSearchCallback): fixed the position of the popup menu when
8996	the input is within a relatively positioned div (mainly the
8997	contacts list editor).
8998
89992010-06-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9000
9001	* UI/Scheduler/UIxCalListingActions.m
9002	(_fillBlocks:withEvent:withNumber:): "c_iscycle" and "c_recurrence_id"
9003	have position 13 and 15 instead of 12 and 13, respectively.
9004
9005	* SoObjects/Mailer/SOGoDraftObject.m
9006	(_purgeRecipients:fromAddresses:): we need to compare the email
9007	addresses case-insensitively.
9008
90092010-06-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9010
9011	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-checkLogin:password:):
9012	perform authentication in LDAP inconditionnally and fallback on
9013	CAS if enabled for DAV.
9014
90152010-06-14  Francis Lachapelle  <flachapelle@inverse.ca>
9016
9017	* UI/WebServerResources/UIxPreferences.js: Fixed a bug when saving
9018	the preferences while some of the calendar categories are still editable.
9019
90202010-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9021
9022	* UI/Scheduler/UIxCalMainActions.m (-saveUrl:forCalendar:):
9023	removed method since obsoleted by the code below.
9024
9025	* SoObjects/Appointments/SOGoWebAppointmentFolder.m
9026	(-loadWebCalendar): removed the URL parameter since it's
9027	read-only.
9028	(-delete): simplified method.
9029
9030	* SoObjects/Appointments/SOGoAppointmentFolders.m
9031	(-newWebCalendarWithName:atURL:): new self-explicit method.
9032	(-reloadWebCalendars): we now make use of the @"WebCalendar" name
9033	as a property key.
9034	(_migrateWebCalendarsSettings): new method that converts
9035	WebCalendar entry keys in a format suitable for use as a property
9036	key.
9037
9038	* UI/Scheduler/UIxCalFilterPanel.m (+initialize): commented out
9039	the "All Events" option as this could cause a delay too long in IE
9040	when drawing the list.
9041
90422010-06-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9043
9044	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-checkLogin:password:):
9045	use CAS in proxy mode when SOGoDAVAuthenticationType is set to
9046	"cas".
9047	(-imapPasswordInContext:forServer:forceRenew:): now a copy of the
9048	equivalent method in SOGoWebAuthenticator, when the above
9049	condition is true.
9050
9051	* UI/Common/UIxPageFrame.m (-logoffPath): reverted previous change
9052	as we now make use of the logoffAction to redirect to the CAS
9053	logout url.
9054
9055	* SoObjects/SOGo/SOGoSystemDefaults.m (-davAuthenticationType):
9056	new method similar to -authenticationType. Currently used for CAS
9057	or non-CAS authentication.
9058
9059	* UI/MainUI/SOGoUserHomePage.m (-logoffAction): split method in
9060	smaller submethods for the sake of clarity. Also, we provide as
9061	"CAS" mode where the redirection is made to the CAS logout page.
9062
9063	* SoObjects/SOGo/SOGoCASSession.m
9064	(+CASSessionWithTicket:fromProxy:): added a new "fromProxy" parameter.
9065	(+CASSessionWithIdentifier:fromProxy:): idem.
9066	(-fetchData): if the session is used by a proxy client, we invoke
9067	"proxyValidate" rather than "serviceValidate".
9068
9069	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-userInContext:):
9070	reorganized method.
9071
9072	* SoObjects/SOGo/NSString+Utilities.m
9073	(-composeURLWithAction:parameters:andHash:): don't attempt to add
9074	parameters if the parameters argument is empty.
9075
9076	* UI/Common/UIxPageFrame.m (-canLogoff)): return YES when the
9077	authentication type is set to "cas" and SOGoCASLogoutEnabled is
9078	set.
9079	(-logoffPath): return an href to the CAS service logout URL when
9080	using "cas" as authentication type.
9081
9082	* SoObjects/SOGo/SOGoSystemDefaults.m (-CASLogoutEnabled): new
9083	method that returns whether the "SOGoCASLogoutEnabled" ud is set.
9084
90852010-06-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9086
9087	* SoObjects/SOGo/SOGoUserFolder.m (_subFoldersFromFolder:):
9088	restore the "owner" record that went bugously missing a few days
9089	ago.
9090
9091	* SoObjects/Appointments/SOGoAppointmentFolderObject.m
9092	(-_folderCalendars): we now fetch the records only covering the
9093	value of SOGoDAVCalendarStartTimeLimit in days with the current
9094	date as the middle of the time range.
9095
90962010-06-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9097
9098	* UI/WebServerResources/UIxAttendeesEditor.js
9099	(initializeAttendeeRole): new function that initialize an input's
9100	row appearance based in the associated uid.
9101
9102	* UI/WebServerResources/SchedulerUI.js:
9103	(onCalendarsMenuPrepareVisibility): the "export" menu option is
9104	now disabled for non-owner users, since the function itself will
9105	not do anything otherwise.
9106	(onCalendarExport): we make use of the URLForFolderId method,
9107	which reduces code size.
9108
9109	* UI/Scheduler/UIxCalFolderActions.m (-exportAction): this web
9110	method is now bound to the ICS folder object, thereby removing
9111	duplicate code.
9112
9113	* SoObjects/Appointments/SOGoAppointmentFolderObject.m
9114	(-displayName, -davDisplayName): new accessors that are forwarded
9115	to the real folder object.
9116
9117	* UI/WebServerResources/UIxAclEditor.js: (onAclLoadHandler) we
9118	bind the "unload" event rather than "beforeunload", which does not
9119	seem to work on IE.
9120
91212010-06-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9122
9123	* UI/WebServerResources/UIxAclEditor.js (onAclLoadHandler): add
9124	tooltips to the special user entries.
9125
9126	* UI/Common/UIxAclEditor.m (_displayNameForUID:):
9127	(-ownerName, hasOwner): removed useless methods.
9128	(-currentUserDisplayName): make use of the method below from the um.
9129
9130	* SoObjects/SOGo/SOGoUserManager.m (-getFullEmailForUID:):
9131	enhanced to return a proper string for users with an empty "cn" or
9132	an empty "c_email".
9133
9134	* SoObjects/Appointments/SOGoAppointmentFolders.m
9135	(-toOneRelationShipKeys): with a request from iCal, we return
9136	nothing to avoid confusing iCal 3 with non-collection resources.
9137
9138	* UI/Common/UIxAclEditor.m (-isPublicAccessEnabled): we now expose
9139	the state of public access in order to not show the "anonymous"
9140	user when not needed.
9141
91422010-06-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9143
9144	* UI/Scheduler/UIxCalendarProperties.m (-calDavURL, -webDavICSURL)
9145	(-webDavXMLURL): new accessors for the URL now appearing at the
9146	bottom of the properties page.
9147
9148	* UI/WebServerResources/generic.js (onBodyClickContextMenu):
9149	leave the context menu to appear on "A" elements with a
9150	"clickableLink" class.
9151
9152	* SoObjects/SOGo/SOGoGCSFolder.m (-realDavURL): new method that
9153	returns the the owner version of the URL to the current folder.
9154
91552010-06-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9156
9157	* UI/Scheduler/UIxCalParticipationStatusView.m: removed obsolete module.
9158
9159	* UI/Common/UIxUserRightsEditor.m
9160	(-sendACLAdvisoryTemplateForObject:): don't attempt to send a
9161	notification email to the "anonymous" or the default user.
9162
9163	* SoObjects/Appointments/SOGoAppointmentFolderXML.[hm]: same as
9164	below for XML.
9165
9166	* SoObjects/Appointments/SOGoAppointmentFolderICS.[hm]: new class
9167	module that exports personal calendars as one ICS file.
9168
9169	* SoObjects/Appointments/SOGoAppointmentFolders.m
9170	(-folderObjectKeys): new method that return the "toOne..." keys
9171	mapping XML or ICS representation of calendars.
9172
91732010-06-03  Ludovic Marcotte  <lmarcotte@inverse.ca>
9174
9175	* Added Ukrainian translation (first pass) from
9176	Oleksa Stasevych <oleksiy.stasevych@gmail.com>
9177
91782010-06-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9179
9180	* UI/WebServerResources/generic.js (CurrentModule): new function
9181	that returns the name of the currently active module.
9182
9183	* UI/WebServerResources/UIxAclEditor.js (addUser): take into
9184	account the fact that the "default roles" button has been replaced
9185	with a new "authenticated users" entry and that we want to keep
9186	that entry at the end of the list.
9187	(nodeForUser): added a "canSubscribe" parameter that determines
9188	whether the "subcribe user" button should be displayed.
9189	(openRightsForUserId): when the user id is "anonymous", the acl
9190	window is reduced by 42 pixels. If the window to display is the
9191	one pertaining to contacts rights, 21 pixels are substracted again.
9192	(openRightsForDefaultUser): removed function.
9193
9194	* UI/Scheduler/UIxCalUserRightsEditor.m (-objectRights): the list
9195	of rights must be limited to the immutative ones whe the active
9196	user is "anonymous".
9197
9198	* UI/Common/UIxUserRightsEditor.m (-userIsAnonymousUser): new
9199	accessor that returns whether the selected user is "anonymous", in
9200	which case certain UI elements need to be adapted.
9201
9202	* UI/Common/UIxAclEditor.m (-_prepareUsers): added support for
9203	"anonymous" user id.
9204
92052010-06-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9206
9207	* UI/WebServerResources/*.js: replaced all remaining calls to
9208	"getLabel" with calls to "_".
9209
9210	* Tests/Integration/test-davacl.py (DAVPublicAccessTest): new test
9211	class that implements tests strictly related to accessing the
9212	"/public" prefix.
9213	(DAVCalendarPublicAclTest.setUp): new test class that tests the
9214	behaviour of calendar resources with regards to the super user,
9215	a non-owner user, the "anonymous" user and the default user
9216	(for default roles).
9217
9218	* Tests/Integration/utilities.py (TestACLUtility.setupRights): we
9219	excape the value for the "user" attribute with
9220	xml.sax.saxutils.escape.
9221
9222	* Tests/Integration/webdavlib.py (HTTPPUT.__init__): added the
9223	"content_type" and "exclusive" optional parameters. The latter
9224	implies the use of the "if-none-match" header.
9225	(WebDAVPUT): removed useless operation class
9226
9227	* SoObjects/SOGo/WORequest+SOGo.m (-handledByDefaultHandler):
9228	fixed a bug where the -requestHandlerKey method would be invoked
9229	on the "request" (NGHttpRequest) ivar rather than on self.
9230
9231	* SoObjects/SOGo/SOGoUserFolder.m (_subFoldersFromFolder:):
9232	thanks to the change below, the ACL checking code is no longer
9233	needed here, where we can now concentrate on returning subfolders
9234	metadata.
9235
9236	* SoObjects/SOGo/SOGoParentFolder.m
9237	(_fetchPersonalFolders:withChannel:): if the active user is not
9238	the owner of the current parent folder, subfolders are returned
9239	only when he/she has permissions set on them even for the
9240	"personal" subfolder.
9241
9242	* SoObjects/SOGo/SOGoGCSFolder.m (-aclsForUser:forObjectAtPath:):
9243	extracted db code into a new "_realAclsForUser:forObjectAtPath:"
9244	private method. When the "None" special role is returned, we
9245	remove it from the list. Finally, we don't allow fetching default
9246	roles when the specified uid is "anonymous".
9247
9248	* SoObjects/Contacts/SOGoContactFolders.m (-appendSystemSources):
9249	we now add public sources to the list of folders if and only if
9250	the active user is the owner of the current parent folder.
9251
9252	* SoObjects/SOGo/SOGoWebAuthenticator.m (-userInContext): if the
9253	returned user has the login "anonymous", we return a corresponding
9254	instance of SOGoUser to make sure methods are never invoked on
9255	SoUser instances.
9256
9257	* SoObjects/SOGo/SOGoUser.m (-rolesForObject:inContext:): now make
9258	use of the new "isInPublicZone" method of SOGoObject to give the
9259	"PublicUser" role to the unauthenticated user.
9260
9261	* SoObjects/SOGo/SOGoObject.m (-isInPublicZone): same as below,
9262	but we cache the result in a new "isInPublicZone" ivar.
9263
9264	* Main/SOGo.m (-lookupName:inContext:acquire): when the "public"
9265	key is requested in DAV mode, we now instantiate a
9266	"SOGoPublicBaseFolder", if the "SOGoEnablePublicAccess" user
9267	default is set.
9268	(-isInPublicZone): new method that always returns "NO" and is
9269	meant to be called from child objects.
9270
9271	* SoObjects/SOGo/SOGoPublicBaseFolder.m: new class module that
9272	enables anonymous access to resources. Instantiated from the
9273	"SOGo" object. Implements a method "-isInPublicZone" that always
9274	returns "YES".
9275
92762010-06-02  Francis Lachapelle  <flachapelle@inverse.ca>
9277
9278	* UI/Scheduler/UIxCalListingActions.m (_userStateInEvent): fixed
9279	array indexes that would cause the user participation state to no
9280	longer be returned.
9281
92822010-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9283
9284	* SoObjects/SOGo/WORequest+SOGo.m (-handledByDefaultHandler): test
9285	the request handler key instead of invoking isSoWebDAVRequest,
9286	which performs additional and permission tests.
9287
9288	* Tests/Integration/test-davacl.py
9289	(DAVCalendarAclTest._testRights): reenabled test code even when no
9290	classification rights are available.
9291
9292	* SoObjects/SOGo/SOGoSystemDefaults.m (-enablePublicAccess): new
9293	accessor for the SOGoEnablePublicAccess boolean user default.
9294
9295	* SoObjects/SOGo/SOGoUserManager.m
9296	(-contactInfosForUserWithUIDorEmail:): return a fixed dictionary
9297	of information for uid = "anonymous".
9298
9299	* Tests/Integration/test-*.py: take the API changes in
9300	webdavlib.py into accounts with regards to XPath queries.
9301
9302	* SoObjects/Appointments/SOGoAppointmentFolder.m
9303	(-_privacySqlString): renamed to the new standardized
9304	"aclSQLListingFilter". Again, a difference is now made between
9305	empty and nil return strings, which we now apply here too.
9306	(-bareFetchFields:from:to:title:component:additionalFilters:,
9307	(-fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:):
9308	make use of the new semantics to the above method.
9309
9310	* SoObjects/SOGo/SOGoGCSFolder.m (-aclSQLListingFilter): new
9311	overridable method designed to return a filter to SQL queries that
9312	avoids requesting records that are not meant to be visible to the
9313	active user. Replaces and extends -[SOGoAppointmentFolder
9314	_privacySqlString] with the additional convention that returning a
9315	nil string will prevent any query at all.
9316	(-toOneRelationshipKeys): new overriden method (see below). Make
9317	use of the new aclSQLListingFilter method to retrieve records so
9318	that unaccessible records are not even listed.
9319
9320	* SoObjects/SOGo/SOGoFolder.m (-fetchContentObjectNames): removed
9321	this useless alias to "toOneRelationshipKeys".
9322
9323	* Tests/Integration/all.py: disable multilanguage tests by
9324	default, reverting the "disbale-languages" cmd-line parameter to
9325	"enable-languages".
9326
9327	* Tests/Integration/webdavlib.py (WebDAVClient.__init__): made
9328	"username" and "password" parameters optional to enable anonymous
9329	connections. Also, M2Crypto.httpslib is imported explicitly only
9330	when an SSL connection is requested. This renders this library
9331	optional.
9332	(WebDAVQuery.set_response): we now make use of the xml.etree API
9333	instead of the one from xml.dom.
9334	(xpath_evaluate): the above change makes this method obsolete
9335	since XPath queries can now be performed directly on returned
9336	elements.
9337
9338	* SoObjects/SOGo/SOGoCache.m (-setValue:forKey:expire:): display
9339	the memcached error string when an error occurs.
9340
93412010-05-28  Francis Lachapelle  <flachapelle@inverse.ca>
9342
9343	* UI/MailerUI/UIxMailMainFrame.m (-saveColumnsStateAction): new
9344	method to save the relative sizes of the columns widths. It will
9345	also save the columns order when the web interface supports it.
9346
9347	* UI/WebServerResources/SOGoResizableTable.js (saveColumnsState): idem.
9348
93492010-05-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9350
9351	* UI/WebServerResources/UIxComponentEditor.js:
9352	(findDeleteAddress): new function that returns the properly
9353	formatter full email of the delegate attendee.
9354	(findAttendeeWithFieldValue): new function that wanders through
9355	the list of attendees and returns the one that has the field
9356	passed as parameter equal to the value passed as parameter.
9357
93582010-05-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9359
9360	* UI/MailerUI/WOContext+UIxMailer.m
9361	(-mailEnvelopeAddressFormatter): declare result as
9362	UIxEnvelopeAddressFormatter.
9363
9364	* UI/MailerUI/UIxMailListActions.m (-getHeadersAction):
9365	"addressFormatter" really is a UIxEnvelopeAddressFormatter.
9366
9367	* UI/WebServerResources/UIxAttendeesEditor.js: (prepareAttendees):
9368	automatically append a new attendee line when the window is loaded
9369	and no attendee is present in the list yet.
9370
93712010-05-27  Francis Lachapelle  <flachapelle@inverse.ca>
9372
9373	* UI/MailerUI/UIxMailListActions.m: renamed from
9374	UIxMailListview.m. Associated .wox was removed and converted to a
9375	WODirectAction.
9376	(-getSortedUIDsAction): new method that returns a JSON
9377	array with all the messages UIDs of the mailbox, sorted as requested.
9378	(-getHeadersAction): new method that returns a JSON dictionary of
9379	the headers of requested messages UIDs.
9380
9381	* UI/Common/WODirectAction+SOGo.m (-pageResourceManager,
9382	-urlForResourceFilename): methods copied from UIxComponent.
9383
9384	* UI/WebServerResources/SOGoDataTable.js: new interface to add
9385	"live loading" to a table.
9386
9387	* UI/WebServerResources/SOGoMailDataSource.js: new class that
9388	dynamically fetches the message headers depending on the requests
9389	from a SOGoDataTable.
9390
9391	* UI/WebServerResources/SOGoResizableTable.js: new interface to
9392	add resizable headers to a table.
9393
9394	* UI/WebServerResources/MailerUI.js (initMailer): associates a DIV
9395	with the new SOGoDataTable interface.
9396	(openMailbox): uses the new SOGoMailDataSource class to fetch the
9397	messages list.
9398	(messageListCallback): new function called to populate a row from
9399	the data received from the SOGoDataTable interface and
9400	SOGoMailDataSource class.
9401	(updateMessageListCounter): new function to update the message
9402	counter that appears in the headers table.
9403	(toggleAddressColumn): new
9404	function to toggle the address column header content
9405	(From/To). This column changes depending on the mailbox type
9406	selected (draft, sent or other).
9407
9408	* UI/WebServerResources/HTMLElement.js (refreshSelectionByIds):
9409	new method to restore the selection based on the elements IDs instead
9410	of the elements themselves.
9411
9412	* UI/MailerUI/UIxMailMainFrame.m (-showToAddress,
9413	-columnsMetaData, -columnsMetaData, -columnsDisplayOrder,
9414	-columnsOrder, setCurrentColumn, -currentColumn, -columnTitle):
9415	moved those methods from UIxMailListView, since the messages table
9416	is now populated with a JSON representation of the data.
9417
94182010-05-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9419
9420	* UI/WebServerResources/UIxAttendeesEditor.js:
9421	(toggleOfficeHours): removed obsolete method.
9422	(initialiseTimeSlotWidgets): we now initialize the time range
9423	hours to the day start hour and day end hour, respectively,
9424	instead of the event start and end time.
9425	(handleAllDay): we make use of the "dayStartHour" and "dayEndHour"
9426	variables instead of hardcoded values. Also, we hide the time
9427	range widgets when this code is executed.
9428	(availabilityController.onNextSlotClick,
9429	availabilityController.onPreviousSlotClick): ignore clicks when a
9430	request is already active.
9431
94322010-05-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9433
9434	* SoObjects/Appointments/SOGoCalendarComponent.m
9435	(_bodyPartForICalObject:): new help method designed to return a
9436	body part representing the event in iso-8859-1 and falling back on
9437	UTF-8 if not possible.
9438
9439	* SoObjects/Appointments/SOGoAptMailNotification.m (+initialize):
9440	removed obsolete method.
9441	(-viewTZ, setViewTZ): idem.
9442	(-setupValues): the "viewTZ" is now initialized from here, using
9443	the active user's defaults.
9444
9445	* UI/WebServerResources/SchedulerUIDnD.js:
9446	(SOGoEventDragEventCoordinates.setLocation)
9447	(SOGoEventDragGhostController.setLocation): new self-explanatory
9448	methods.
9449	(SOGoEventDragController.attachToEventCells): now take the event
9450	location SPAN into acccount when drawing the ghost.
9451
94522010-05-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9453
9454	* SoObjects/Appointments/SOGoAptMailUpdate.m (-valueForProperty:):
9455	set the timezone of date objects to the active user's timezone.
9456
9457	* UI/WebServerResources/SchedulerUI.js: (resetCategoriesStyles):
9458	fixed an exception occurring when
9459	UserDefaults['SOGoCalendarCategoriesColors'] is undefined.
9460
94612010-05-21  Francis Lachapelle  <flachapelle@inverse.ca>
9462
9463	* UI/WebServerResources/SchedulerUI.js (onMenuCurrentView):
9464	propagate the click event when right-clicking on an event.
9465
9466	* UI/WebServerResources/UIxPreferences.js (endEditable,
9467	onColorPickerChoice): those functions will automatically trigger
9468	the reload of the current module (hasChanged is set to 1).
9469
9470	* UI/WebServerResources/SchedulerUI.js (resetCategoriesStyles):
9471	new method to manage the CSS associated to the event categories.
9472	(newBaseEventDIV): a CSS class is added to the event div if a
9473	category is associated to the event.
9474
9475	* SoObjects/Appointments/SOGoAppointmentFolder.m
9476	(-fetchCoreInfosFrom:to:title:component:additionalFilters:): added
9477	c_category field so UIxCalListingActions can fetch it.
9478
94792010-05-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9480
9481	* UI/WebServerResources/SchedulerUI.js: (newEventDIV): we now add
9482	a span with class "location" when the location field is available.
9483
94842010-05-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9485
9486	* SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord): extract
9487	the event category into the c_category column.
9488
9489	* SoObjects/Appointments/iCalToDo+SOGo.m (-quickRecord): extract
9490	the task category into the c_category column.
9491
9492	* UI/Scheduler/UIxCalListingActions.m (+initialize): added the
9493	new "c_category" field to the list of fields that require
9494	fetching.
9495
9496	* UI/WebServerResources/SchedulerUI.js (newBaseEventDIV): shifted
9497	field indexes by 1 from the 9th field, which is now the "category"
9498	field.
9499
9500	* Main/SOGo.m (-dispatchRequest:): send a "SOGoRequestDuration"
9501	header back to the client with the time delta as value when
9502	SOGoDebugRequests is set to YES.
9503
95042010-05-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9505
9506	* UI/WebServerResources/UIxAttendeesEditor.js
9507	(redisplayEventSpans): "event spans" are now stored in a cache to
9508	improve performance.
9509	(availabilityController): new class designed to handle the
9510	interaction with the availability widgets.
9511	(availabilitySession): new class, used by the above, for
9512	triggering availability searchs in the available freebusys.
9513	Listeners should implement the "onRequestComplete" method.
9514	(freeBusyRequest): new class designed to asynchronosly fetch a user
9515	freebusy between specific dates. Makes use of an internal cache
9516	and may trigger ajax requests covering more that the specified
9517	range in order to take advantage of that cache. Listeners should
9518	implement the "onRequestComplete" method.
9519	(_freeBusyCacheEntry): new class, used internally by
9520	"freeBusyRequests" for handling cache entries.
9521	(initializeTimeSlotWidgets): new method that initializes the new
9522	widgets that controls the time range behaviour in the freebusy
9523	searches.
9524	(editorConflictHander): new class that handles time conflicts.
9525
9526	* UI/Scheduler/UIxCalListingActions.m (-findPossibleSlotAction):
9527	removed action method and submethods since the slot resolution is
9528	now performed directly in javascript to benefit from the freebusy
9529	cache and to improve performance.
9530
9531	* UI/MainUI/SOGoUserHomePage.m (-readFreeBusyAction): simplified
9532	method by using -[self responseWithStatus:andString:].
9533
9534	* UI/WebServerResources/generic.js (log): improved the method's
9535	performance by making use of DOM methods on the "logConsole"
9536	object.
9537
9538	* UI/WebServerResources/JavascriptAPIExtensions.js
9539	(Date.prototype.clone): new method for copying the Date object
9540	into another instance.
9541	(Date.prototype.deltaDays): new method that returns the number of
9542	days separating the current date with another one passed as
9543	parameter.
9544	(Date.prototype.beginOfDay): new method that returns a new date
9545	instance corresponding to time 00:00 of the current instance.
9546
95472010-05-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9548
9549	* Tests/Integration/test-caldav-scheduling.py
9550	(CalDAVPropertiesTest): new class for testing caldav-specific
9551	properties
9552	(CalDAVPropertiesTest.testDavScheduleCalendarTransparency): new
9553	test method for testing "schedule-calendar-transp".
9554
9555	* UI/Scheduler/UIxCalendarProperties.m (-includeFreeBusy)
9556	(-setIncludeFreeBusy): new template accessors for the equivalent
9557	methods below.
9558	(-userIsOwner): new accessor that returns whether the current user
9559	is the calendar's owner.
9560
9561	* SoObjects/Appointments/SOGoFreeBusyObject.m
9562	(-fetchFreeBusyInfosFrom:to:): test whether the listed calendars
9563	must be included in the freebusy.
9564
9565	* SoObjects/Appointments/SOGoAppointmentFolder.m
9566	(-setIncludeInFreeBusy, -includeInFreeBusy): new accessors that
9567	determines whether the current calendar is included in the
9568	computing of its owner's freebusy.
9569	(-davScheduleCalendarTransparency)
9570	(-setDavScheduleCalendarTransparency:): equivalent DAV accessors
9571	for the above.
9572
95732010-05-05  Francis Lachapelle  <flachapelle@inverse.ca>
9574
9575	* UI/WebServerResources/SchedulerUI.js (tasksListCallback):
9576	refresh the tasks list when receiving the AJAX response instead of
9577	emptying the list before sending the AJAX request.
9578
95792010-05-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9580
9581	* UI/WebServerResources/UIxAttendeesEditor.js (onContactKeydown):
9582	the code for the "enter" and "tab" has been merged, since it was
9583	similar. We also resolve individual contacts from list entries.
9584	(resolveListAttendees): new function that fetches the indivual
9585	entries from contacts lists.
9586	(resolveListAttendeesCallback): callback for the above, that
9587	create rows and input fields corresponding to the returned
9588	entries, and trigger a contact search on each of them.
9589	(performSearch): take an "input" field as argument since
9590	"attendeesEditor.currentField" is no longer used.
9591	(performSearchCallbacks): roles and partstats are now stored in
9592	individual attributes rather than in the element class. We also
9593	now behave differently depending on whether the event owner is
9594	returned or another type of user, in order to match Lightning's
9595	behaviour.
9596	(newAttendee): no longer a callback, and now takes an optional
9597	argument that indicates with attendee row precedes the one being
9598	created. Also the new row is returned.
9599	(checkAttendee): no longer a callback. Now takes an "input"
9600	argument.
9601	(onInputBlur): new callback that invokes "checkAttendee" and
9602	handle the cleanup of the entries menu.
9603	(displayFreeBusyForNode): use DOM methods rather than "innerHTML"
9604	to modify the cell contents.
9605	(updateFreeBusyDataCallback): freebusy requests are no longer
9606	sequential.
9607	(prepareAttendees): we now modify the DOM attributes rather than
9608	the HTML attributes.
9609
9610	* UI/Contacts/UIxListView.m (-propertiesAction): we now invoke
9611	-[self responseWithStatus:andJSONRepresentation:] to build the
9612	resulting WOResponse.
9613
9614	* UI/Contacts/UIxContactFoldersView.m (-allContactSearchAction):
9615	the type of returned component can now be deduced from the value
9616	of "c_component" rather than from the c_name extension... Also, we
9617	avoid autoreleasing variables where it's not needed.
9618	(-contactSearchAction): removed obsolete method.
9619
9620	* SoObjects/Contacts/SOGoContactGCSFolder.m (+initialize): new
9621	method initializing "folderListingFields" as a static NSArray
9622	rather than as macro. Added "c_component" to the list of fields to
9623	retrieve.
9624
9625	* UI/Scheduler/UIxComponentEditor.m (-ownerLogin): new accessor
9626	the differenciate between the type of users in the list of
9627	attendees.
9628
9629	* UI/WebServerResources/UIxAttendeesEditor.js
9630	(performSearchCallback): differenciate between the organizer user
9631	and other attendees, as in Lightning.
9632
9633	* UI/WebServerResources/UIxAppointmentEditor.js
9634	(setupAttendeeNode): removed useless calls to $().
9635
9636	* UI/Scheduler/UIxComponentEditor.m
9637	(-ownerIsAttendee:andClientObject:)
9638	(delegateIsAttendee:andClientObject:): handle the case where the
9639	user is found but has no RSVP or one with "FALSE" as value.
9640	(-userHasRSVP): renamed from "userIsAttendee", since we don't
9641	enable users without a RSVP set as "TRUE" to repond to
9642	invitations.
9643	(-currentAttendeeClasses): new method.
9644
9645	* UI/MailPartViewers/UIxMailPartICalActions.m (-tentativeAction):
9646	new action method for the "TENTATIVE" partstat.
9647
9648	* SoObjects/Appointments/iCalEntityObject+SOGo.m
9649	(-userIsParticipant:): renamed to "userIsAttendee:". We now
9650	request the list of attendees rather than the list of
9651	participants.
9652	(-userAsParticipant:): renamed to "userAsAttendee:". Again, we
9653	return the attendee matching the user, whether he/she is a
9654	participant or not.
9655
9656	* SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: removed useless
9657	module, since it implemented methods already found elsewhere.
9658
96592010-05-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9660
9661	* UI/WebServerResources/ContactsUI.js (initContacts): we must
9662	configure the ab toolbar even when in popup mode, provided
9663	"tabsContainer" does resolve to an existing element since the
9664	script will be included for utility windows too.
9665
96662010-05-04  Francis Lachapelle  <flachapelle@inverse.ca>
9667
9668	* SoObjects/Contacts/SOGoContactSourceFolder.m
9669	(-lookupName:inContext:acquire:): verify the result of
9670	lookupContactEntry as it will not necessarily return a contact.
9671	* Updated version number to 1.2.2.
9672
96732010-04-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9674
9675	* Tools/sogo-tool.m (setupUserDefaults): new function that sets up
9676	a few parameters on the user defaults. Notably, we override the
9677	values for "SOGoLDAPQueryLimit" and "SOGoLDAPQueryTimeout" so that
9678	they do not limit the amount of records that can be exported.
9679
9680	* Tools/SOGoToolBackup.m (-proceed): we empty the autorelease pool
9681	every 10 iterations to avoid an excess of unreleased LDAP
9682	connections.
9683
96842010-04-26  Ludovic Marcotte  <lmarcotte@inverse.ca>
9685
9686	* Modified all folder/ACL templates in order
9687	to remove (ie., comment out) broken links.
9688
96892010-04-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9690
9691	* Tests/Integration/test-webdav.py
9692	(WebDAVTest.testPrincipalPropertySearch): new test method for
9693	testing the "principal-property-search" REPORT on SOGo.
9694
9695	* Tests/Integration/webdavlib.py: added copyright notice
9696	(WebDAVPrincipalPropertySearch): new class that handles the
9697	"principal-property-search" REPORT.
9698
9699	* Main/SOGo+DAV.m (-davPrincipalPropertySearch:): restored method.
9700
9701	* SoObjects/SOGo/SOGoUserFolder.m (-collectionDavKey:matches:):
9702	moved this tester method for REPORT queries from SOGo+DAV.m.
9703
9704	* Tools/SOGoSockDOperation.m (-_performSearch): we now support an
9705	additional identifier in the object DN, for specifying specific
9706	objects.
9707	(_appendEntry:toResult:): we take the additional particle into
9708	account when building the dn. Also, we add the "uid" field for
9709	LDAP compliance.
9710
9711	* SoObjects/Contacts/SOGoContactSourceFolder.m
9712	(_flattenedRecord:): new method with the repetitive code from
9713	_flattenedRecords. Snipped to offer the same functionality with
9714	single records.
9715	(-lookupContactWithName:): implemented this method to ensure
9716	compatibility with SOGoGCSFolder (and <SOGoContactFolder>).
9717
9718	* SoObjects/Contacts/SOGoContactGCSFolder.m
9719	(_qualifierForFilter:): adjusted qualifiers to perform the same
9720	search that Thundebird perform in its local abooks.
9721	(-lookupContactWithName:): fixed method to use an equality
9722	qualifier. Simplified code by reducing the amount of required
9723	variables.
9724
97252010-04-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9726
9727	* SoObjects/SOGo/SOGoGCSFolder.m (-renameTo:): when the active
9728	user is a super user, we modify the real owner's version of the
9729	displayname.
9730
9731	* Tests/Integration/webdavlib.py
9732	(_WD_XMLTreeElement.appendSubtree): added handling of unicode
9733	subtrees
9734
97352010-04-22  Francis Lachapelle  <flachapelle@inverse.ca>
9736
9737	* Tests/Unit/TestiCalRecurrenceCalculator.m: new test module for
9738	iCalRecurrenceRule. Added full test method for
9739	recurrenceRangesWithinCalendarDateRange:.
9740
97412010-04-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9742
9743	* Main/SOGo+DAV.m: commented out incomplete code for handling
9744	DAV:principal-property-search
9745
97462010-04-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9747
9748	* SoObjects/SOGo/SOGoUser.m (-mailAccounts): use the user's first
9749	email address as displayname for the mail account. Also, we avoid
9750	autoreleasing objects that do not required to.
9751
9752	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
9753	(-startElement:namespace:rawName:attributes:): "ignoreContent" is
9754	no longer a BOOL but an int, and was renamed to "ignoredContent".
9755	This enables to fix a bug where an ignored content tag could be
9756	"unignored" by being closed more than once, triggering the passing
9757	of further content though the sanitizer.
9758	Also, we now rename the "classid" and "data" attributes of "object"
9759	elements to prevent cross-site scripting.
9760	(+initialize): "applet", "frame", "frameset" and "iframe" a now
9761	banned tags too.
9762
97632010-04-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9764
9765	* SoObjects/Appointments/SOGoWebAppointmentFolder.m (-setReloadOnLogin:)
9766	(-reloadOnLogin): new accessors to the "AutoReloadedWebCalendars"
9767	settings for the "Calendar" module.
9768
9769	* UI/Scheduler/UIxCalendarProperties.m (-setReloadOnLogin:)
9770	(-reloadOnLogin): new accessors.
9771
9772	* SoObjects/Appointments/SOGoAppointmentFolders.m
9773	(-reloadWebCalendars:): moved method from
9774	UI/Scheduler/UIxCalMainActions.m and added a boolean parameter to
9775	it indicating whether the "reload on login" setting should be
9776	honoured or ignored.
9777
97782010-04-19  Francis Lachapelle  <flachapelle@inverse.ca>
9779
9780	* UI/Scheduler/UIxComponentEditor.m (-_loadRRules): added support
9781	for all the rules that can be defined from the Web interface:
9782	custom yearly/monthly/daily rules.
9783	(-_handleCustomRRule:): idem.
9784
9785	* UI/WebServerResources/UIxRecurrenceEditor.js: added support for
9786	custom monthly and yearly occurrences.
9787
9788	* UI/Scheduler/UIxCalListingActions.m (:_fixDates): the recurrence
9789	ID must be adjusted even when in the month view.
9790
9791	* UI/Scheduler/UIxAppointmentEditor.m (-viewAction): no longer
9792	necessary to adjust event date with the daylight saving time.
9793
97942010-04-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9795
9796	* UI/Contacts/UIxContactFolderActions.m (-exportAction): improved
9797	method by providing the encoded filename of the address book
9798	following rfc2047. Make the "uids" parameter optional: when
9799	omitted, the address book is exported completely.
9800
9801	* UI/WebServerResources/ContactsUI.js (getMenus): added entry for
9802	exporting the address books, slightly reorganized the entries.
9803	(onAddressBooksMenuPrepareVisibility): grey out the "export" entry
9804	for LDAP address books.
9805	(onAddressBookExport): new callback for exporting addressbooks
9806	from the contextual menu.
9807
9808	* UI/WebServerResources/generic.js (URLForFolderID): avoid double
9809	slashes in the URL returned for personal folders.
9810
98112010-04-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9812
9813	* SoObjects/Appointments/SOGoCalendarComponent.m
9814	(-lookupOccurence:): the looked up occurrence might be the master
9815	event.
9816
9817	* UI/WebServerResources/UIxMailPopupView.js (initPopupMailer): we
9818	assign window.messageUID from here now (by concatenating
9819	"mailboxName" and "messageName", as it will disappear if the
9820	window is reloaded.
9821
98222010-04-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9823
9824	* UI/WebServerResources/SchedulerUI.js (onDocumentKeydown): when
9825	deleting an event, we must make sure that the even dialog
9826	disappears, as it the case with the click on the corresponding
9827	toolbar button.
9828
9829	* Tools/SOGoToolRemove.m: new sogo-tool utility to remove user
9830	data from the database.
9831
9832	* Tools/SOGoSockDOperation.m (_appendEntry:toResult:): include
9833	"telephonenumber" in the entry information.
9834
98352010-04-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9836
9837	* UI/WebServerResources/MailerUI.js (onMenuArchiveFolder): new
9838	menu callback method that invokes "exportFolder" on the target
9839	mailbox.
9840	(saveAs): we use "window.location.href" instead of "window.open"
9841	when exporting messages, as it avoids the flickering of opening an
9842	ephemeral window.
9843
9844	* UI/MailerUI/UIxMailFolderActions.m (-exportFolderAction): new
9845	action that triggers the archiving of the selected folder.
9846
9847	* SoObjects/Mailer/SOGoMailFolder.m
9848	(-archiveUIDs:inArchiveNamed:inContext:): new version of
9849	"-archiveUIDs:inContext:" taking an optional archive name as
9850	argument, to be used as the filename of the attachment in the mime
9851	headers of the response. Fixed a bug naming the messages following
9852	their identifier's address rather than their identifier. We now
9853	encode the provided filename as a qp utf-8 string when needed.
9854	(-archiveAllMessagesInContext:): new method that uses the above
9855	method for archiving all the messages in an archive named after
9856	the folder's IMAP name.
9857
9858	* UI/WebServerResources/SchedulerUI.js (onDocumentKeydown): new
9859	callback method for handling keypresses. Initial code handles
9860	event/task deletion.
9861
9862	* UI/WebServerResources/generic.js (onRowClick): fixed a typo.
9863
98642010-04-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9865
9866	* UI/WebServerResources/UIxContactEditor.js (initEditorForm): we
9867	need to instantiate a tabs controller here too.
9868
98692010-04-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9870
9871	* SoObjects/SOGo/SOGoProxyAuthenticator.m (-passwordInContext:):
9872	use the "authorization" header to determine the password of the
9873	user, if any.
9874
9875	* SoObjects/Appointments/SOGoAptMailReceipt.m (-getSubject)
9876	(-getBody): taken methods from old version of
9877	SOGoAptMailNotification, to avoid a crash regarding a lock of
9878	method override.
9879
9880	* UI/WebServerResources/SOGoTabsController.js: new js module for
9881	handling tabs, replacing non-object code from generic.js. Added
9882	handling of tab overflows, with the appearance of two left/right
9883	buttons to make them scroll.
9884
98852010-04-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9886
9887	* UI/MailPartViewers/UIxMailPartICalActions.m
9888	(_eventObjectWithUID:forUser:): fixed a typo that would cause the
9889	found event to never be returned.
9890	(-updateUserStatusAction): return a 404 status code when the
9891	corresponding event is not found.
9892
9893	* SoObjects/Mailer/SOGoMailFolder.m (-aclsForUser:): don't fetch
9894	ACL when the current user is not the mailbox owner. Also, we don't
9895	set default viewing roles when the uid is not the active user.
9896
9897	* SoObjects/SOGo/SOGoObject.m (-labelForKey:): restored method.
9898
9899	* SoObjects/Appointments/SOGoAptMailUpdate.m,
9900	SoObjects/Appointments/SOGoAptMailInvitation.m,
9901	SoObjects/Appointments/SOGoAptMailICalReply.m,
9902	SoObjects/Appointments/SOGoAptMailDeletion.m: revamped to make use
9903	of language dictionaries rather than language-specific classes.
9904	This hugely simplifies the code and ease the job of implementing
9905	languages for SOGo.
9906
9907	* SoObjects/SOGo/SOGoObject.m (-labelForKey:) removed method,
9908	obsoleted by the new one below.
9909
9910	* SoObjects/SOGo/NSObject+Utilities.m (-labelForKey:inContext:):
9911	new method that enables the querying of module based language
9912	dictionaries from non SoComponent instances.
9913
9914	* Tests/Integration/utilities.py (TestUtility.fetchUserInfo): same
9915	as below.
9916
9917	* Tests/Integration/test-webdav.py
9918	(WebDAVTest.testExpandProperty): same as below
9919
9920	* Tests/Integration/test-caldav-scheduling.py (fetchUserInfo):
9921	accept empty displayname property.
9922
9923	* Tests/Integration/test-maildav.py: temporarily disabled test
9924
99252010-04-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9926
9927	* UI/MailerUI/UIxMailEditor.m (-fromEMails, -from): make use of
9928	the new _emailFromIdentity: method.
9929	(_emailFromIdentity:): new method that returns a from header
9930	compliant with rfc822.
9931
99322010-04-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9933
9934	* UI/MailPartViewers/UIxMailPartICalActions.m
9935	(_eventObjectWithUID:forUser:): we check that the target event
9936	exists only in the specified user's calendar, as it may already
9937	exists in subcribed calendars belonging to other attendees.
9938
9939	* SoObjects/Mailer/SOGoMailFolder.m (-toManyRelationshipKeys): we
9940	now check if the mailbox exists before returning the message
9941	identifiers.
9942	(-lookupName:inContext:acquire:): we no longer check whether the
9943	folder exists as it causes problems when it is a "noselect" parent
9944	folder. Existence of folders is thus checked only when messages
9945	are accessed.
9946
9947	* SoObjects/Mailer/SOGoMailAccount.m
9948	(_appendNamespace:toFolders:): it may happen that the namespace
9949	"folders" have already been added via the list command, therefore
9950	we now ensure that the folder names do not already exist before
9951	adding them to the array.
9952
99532010-04-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9954
9955	* UI/WebServerResources/UIxPreferences.js (prototypeIfyFilters):
9956	we don't attempt to duplicate the rules if they don't exist.
9957	(copyFilter): same as above.
9958
9959	* UI/WebServerResources/UIxFilterEditor.js (setupFilterViews): we
9960	execute the callback for the match type SELECT in order to show or
9961	hide the rules area depending on its initial value.
9962	(onRuleAddClick): when the rules array does not exist, we must
9963	create it.
9964
99652010-04-05  Ludovic Marcotte <lmarcotte@inverse.ca>
9966
9967	* UI/WebServerResources/SOGoRootPage.js
9968	We now correctly use our rounded value for the
9969	expire value when using ppolicy.
9970
9971	* UI/Contacts/UIxContactEditor.m
9972	We now use URL: in cards w/o a home/work preferred
9973	value as a home URL.
9974
9975	* UI/Contacts/UIxContactEditor.m
9976	We now fallback to TEL;VOICE: when neither HOME
9977	or WORK are defined. We set that value as the
9978	WORK telephone number in this particular case.
9979
99802010-04-02  Francis Lachapelle  <flachapelle@inverse.ca>
9981
9982	* SoObjects/Appointments/SOGoCalendarComponent.m
9983	(-sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:):
9984	when looking for the organizer email, we now rely on the previous
9985	event when the organizer is not defined in the new event. This is
9986	important when the organizer is deleting the only attendee of an event.
9987
9988	* UI/WebServerResources/SchedulerUI.js (onClickableCellsDblClick):
9989	hack to ignore double-click in the scrollbar in the month view &
9990	fix for Firefox.
9991
99922010-04-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
9993
9994	* SoObjects/Mailer/SOGoMailAccount.m (-updateFilters): we ensure
9995	the active script is deactivated so that we can delete it on
9996	Dovecot. This enables scripts to be deleted when all the filters
9997	are disabled.
9998
9999	* UI/Scheduler/UIxCalListingActions.m
10000	(_fillFreeBusy:forUid:fromDate:): fixed a crash occuring when the
10001	length of an event would happen after the period covered by the
10002	freebusy.
10003
100042010-03-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10005
10006	* Tools/sogo-slapd-sockd.m, Tools/SOGoSockDOperation.m,
10007	Tools/SOGoSockDScanner.m, Tools/SOGoSockD.m: new modules
10008	implementing the sockd backend tool for slapd.
10009
10010	* Tools/sogo-tool.m (-run): return a proper return code rather
10011	than "NO".
10012
100132010-03-31  Francis Lachapelle  <flachapelle@inverse.ca>
10014
10015	* SoObjects/Mailer/SOGoDraftObject.m (+initialize): updated the
10016	User-Agent header with the proper version.
10017
10018	* UI/WebServerResources/SchedulerUIDnD.js (onDragStart): don't
10019	start the dragging when the target element has a scrollbar.
10020
100212010-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10022
10023	* SoObjects/Contacts/SOGoContactSourceFolder.m
10024	(-lookupName:inContext:acquire:): lookup the object in the
10025	"childRecords" cache prior to fetching it from the source. If the
10026	latter happens, the resulting record is cached.
10027	(-lookupContactsWithFilter:sortBy:ordering:): populate the
10028	"childRecords" cache with resulting records to avoid further
10029	lookups of the same data.
10030
10031	* SoObjects/SOGo/LDAPSource.m
10032	(-changePasswordForLogin:oldPassword:newPassword:perr:): fixed a
10033	typo that could potentially cause crashes.
10034
100352010-03-29  Ludovic Marcotte <lmarcotte@inverse.ca>
10036
10037	SoObjects/Appointments/SOGoWebAppointmentFolder.m
10038	We no longer use the NSData's method to load
10039	the data as GNUstep will be caching it.
10040
100412010-03-28  Ludovic Marcotte <lmarcotte@inverse.ca>
10042
10043        * Translated to French all the ppolicy stuff
10044
100452010-03-26  Ludovic Marcotte <lmarcotte@inverse.ca>
10046
10047        * Updated the documentation with regard to
10048	the passwordPolicy setting and deprecated
10049	the WOApplicationRedirectURL setting.
10050
100512010-03-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10052
10053	* UI/PreferencesUI/UIxPreferences.m (-setHasChanged:)
10054	(-hasChanged): restored accessors.
10055	(-defaultAction): when "hasChanged" is YES, we request a reload of
10056	the parent window. This feature was carelessly removed recently.
10057
100582010-03-25  Francis Lachapelle  <flachapelle@inverse.ca>
10059
10060	* UI/WebServerResources/UIxContactsUserFolders.js
10061	(onFolderSearchKeyDown, buildUsersTree): change color of search
10062	text to red when no result returned from server.
10063
100642010-03-24  Ludovic Marcotte <lmarcotte@inverse.ca>
10065
10066        * Added a patch from Christophe Palanche and
10067	Guillaume Schreiner which makes the SOGo
10068	cache code usable with repcached
10069	(http://repcached.lab.klab.org/)
10070
10071	* SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m
10072	(- _parseLine:) fixed incorrrect handling
10073	of QP-encoded attributes.
10074
10075	* SoObjects/SOGo/SQLSource.m - we now properly
10076	escape quotes for SQL parameters coming from
10077	user's input.
10078
100792010-03-22  Ludovic Marcotte <lmarcotte@inverse.ca>
10080
10081	* SoObjects/Mailer/SOGoDraftObject.m - we strip
10082	the bcc header prior to sending mails.
10083
100842010-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10085
10086	* UI/Scheduler/UIxCalListingActions.m
10087	(_fetchFields:forComponentOfType:): fix dates only in day-based
10088	views or for all-day events.
10089
10090	* Tests/Unit/TestiCalTimeZonePeriod.m: new test module for
10091	iCalTimeZonePeriod. Added full test method for
10092	_occurenceForDate:byRRule:.
10093
10094	* Tests/Unit/SOGoTestRunner.m (-init): messages must be
10095	initialized to a mutable array.
10096
100972010-03-19  Ludovic Marcotte <lmarcotte@inverse.ca>
10098
10099	* Added the SOGoiPhoneForceAllDayTransparency
10100	preference (and its associated code to handle
10101	it in SOGoAppointmentObject.m) to force
10102	transparency on all-day events coming from
10103	the iPhone-OS based devices.
10104
101052010-03-18  Ludovic Marcotte <lmarcotte@inverse.ca>
10106
10107	* Replaced SOGoUIxUserCanChangePassword with
10108	SOGoPasswordChangeEnabled
10109
10110	* Removed unused prefs / code.
10111
101122010-03-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10113
10114	* SoObjects/SOGo/SOGoUserFolder.m (-davUsersQuery): we invoke
10115	"prepareDAVResponse" only when there is content to return.
10116
10117	* UI/Scheduler/UIxCalListingActions.m (_fixDates:): the events
10118	appearing in the month view needs to have their dates fixed too.
10119	Also, the algorithm was lightly simplified.
10120
10121	* SoObjects/Appointments/SOGoAppointmentFolder.m
10122	(-initWithName:inContainer:): "davTimeLimitSeconds" and
10123	"davTimeHalfLimitSeconds" were erroneously reverted to 0 after
10124	initialization.
10125
10126	* UI/WebServerResources/SchedulerUIDnD.js (onDragStart): typo.
10127
10128	* UI/WebServerResources/SchedulerUI.js (_setupEventsDragAndDrop):
10129	we were setting up drag controllers only for events belonging to
10130	the current user. Now that we handle the "editable" flag, this
10131	had become a limitation.
10132
101332010-03-14  Ludovic Marcotte <lmarcotte@inverse.ca>
10134
10135	* Improved the password policy code. All corner
10136	cases should now be handled correctly.
10137
101382010-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10139
10140	* SoObjects/Appointments/SOGoAppointmentObject.m
10141	(-newOccurenceWithID): moved timezone handling code from
10142	UIxAppointmentEditor to here. Simplified that code.
10143
101442010-03-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10145
10146	* SoObjects/SOGo/SOGoUserFolder.m (_davFetchUsersMatching:): we
10147	were still using the "info" field from the result set for extra
10148	user info, however that field as been renamed "c_info" a couple of
10149	months ago.
10150
10151	* UI/WebServerResources/generic.js (SetLogMessage): we must attach
10152	the message to the container even when the message is null.
10153
101542010-03-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10155
10156	* UI/WebServerResources/SchedulerUI.js (updateCalendarProperties):
10157	the displayname can now also be set by subscribers, in their own
10158	environment.
10159
10160	* UI/Scheduler/UIxCalendarProperties.m (-setCalendarName:): this
10161	action is now unconditional.
10162	(-calendarNameIsDisabled): removed obsolete accessor.
10163
10164	* SoObjects/SOGo/SOGoGCSFolder.m
10165	(-setFolderPropertyValue:inCategory:): new setter for properties
10166	pertaining to the ACTIVE user (who may or may not be the owner).
10167	(-folderPropertyValueInCategory:): getter corollary to the new
10168	method above.
10169	(-_fetchDisplayNameFromSubscriber): new method for getting the
10170	display name of the folder for the active user.
10171	(renameTo:): split the method in an instance for the owner and
10172	another one for subscribers. Respectively: _ownerRenameTo: and
10173	_subscriberRenameTo:. The latter invoke the new methods above.
10174
10175	* SoObjects/Appointments/SOGoAppointmentFolder.m
10176	(_setCalendarProperty:forKey:): replaced method with a new
10177	and more generic accessor from SOGoGCSFolder
10178	"setFolderPropertyValue:inCategory:".
10179
101802010-03-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10181
10182	* UI/Common/WODirectAction+SOGo.m
10183	(-responseWithStatus:andJSONRepresentation:): we now add the
10184	"application/json" content type to the response object.
10185
10186	* UI/SOGoUI/UIxComponent.m
10187	(-responseWithStatus:andJSONRepresentation:): we now add the
10188	"application/json" content type to the response object.
10189
10190	* UI/MainUI/SOGoUserHomePage.m (_usersResponseForResults:): we now
10191	return a JSON response with an encoded array of arrays.
10192
10193	* UI/WebServerResources/UIxContactsUserFolders.js
10194	(onFolderSearchKeyDown): same as below.
10195	(addUsersLineToTree): the responses for user search queries are
10196	now JSON-encoded arrays, which avoids a lot of parsing issues and
10197	reduces the size of the code.
10198
10199	* UI/WebServerResources/generic.js (IsCharacterKey): new helper
10200	function that returns whether the pressed keycode is one that
10201	changes the content of input fields.
10202	(onSearchKeyDown): simplified method by making use of the new
10203	function above.
10204	(onSearchBlur): clear the timer if the field is empty, to avoid a
10205	useless search on the ghost phrase.
10206
102072010-03-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10208
10209	* UI/WebServerResources/generic.js (onSearchKeyDown): set the
10210	search timeout to 500 ms instead of 1 sec.
10211
10212	* UI/WebServerResources/UIxContactsUserFolders.js
10213	(onFolderSearchKeyDown): move the start of the animation to
10214	onSearchFormSubmit.
10215
10216	* UI/WebServerResources/generic.js (createDialog): new method
10217	designed to provide a normalized interface for creating popup
10218	dialogs with DOM methods.
10219	(createButton): same as above for buttons.
10220	(SetLogMessage): new normalizing method for putting typed log
10221	message in specified containers via DOM methods.
10222
10223	* UI/WebServerResources/SOGoRootPage.js: added code for popping up
10224	a password change dialog whenever one is required by the server.
10225
10226	* UI/MainUI/SOGoRootPage.m (_responseWithLDAPPolicyError:): new
10227	method for returning password change and login-based LDAP policy
10228	errors.
10229
10230	* UI/WebServerResources/PasswordPolicy.js: new module that handle
10231	the password change protocol and error codes.
10232
10233	* UI/WebServerResources/UIxPreferences.js
10234	(onComposeMessagesTypeChange): we now do the proper widget
10235	wizardry via DOM methods to alternate between the text-based or
10236	html-based editor for changing the user's signature when the
10237	message format is switched between "text" and "html".
10238	(onChoiceChanged): removed obsolete callback.
10239
10240	* UI/PreferencesUI/UIxPreferences.m (-init): removed the
10241	"hasChanged" and "composeMessageTypeHasChanged" ivars, as they are
10242	no longer needed.
10243	(-setHasChanged, -hasChanged): removed obsolete accessors.
10244	(-defaultAction): simplified method as we no longer have to manage
10245	the handling of the change of message format from here.
10246
102472010-03-08  Ludovic Marcotte  <lmarcotte@inverse.ca>
10248
10249	* Added SoObjects/SOGo/SOGoConstants.{h,m} - a new file
10250	that will hold eventually all SOGo constants.
10251
10252	* Reworked the authentication code to use a generic
10253	method for password authentication (LDAP + SQL).
10254
10255	* Added password change support
10256
10257	* Updated the SOPE patchset which now includes
10258	password-policy support.
10259
102602010-03-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10261
10262	* SoObjects/SOGo/NSString+DAV.m (-davSetterName): enhanced so that
10263	DAV properties directely passed as parameters (and not as dav
10264	method names deduced from DAVPropMap.plist) are handled properly
10265	too.
10266
10267	* SoObjects/SOGo/SOGoUserFolder.m (-setDavSignature:): new
10268	accessor for setting the
10269	{urn:inverse:params:xml:ns:inverse-dav}signature property via DAV.
10270
102712010-03-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10272
10273	* UI/PreferencesUI/UIxPreferences.m (-nameLabel, -colorLabel):
10274	removed useless methods.
10275
10276	* SoObjects/SOGo/SOGoUserDefaults.m (-sieveFilters)
10277	(-setSieveFilters:): new accessors.
10278
10279	* SoObjects/SOGo/SOGoDomainDefaults.m (-sieveScriptEnabled): new
10280	accessor.
10281
10282	* SoObjects/Mailer/SOGoSieveConverter.m: new class for producing
10283	sieve scripts from user defaults.
10284
10285	* UI/PreferencesUI/UIxFilterEditor.m: new template class for
10286	editing sieve scripts.
10287
10288	* UI/WebServerResources/generic.js (_): new gettextable equivalent
10289	of "getLabel".
10290
102912010-03-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10292
10293	* SoObjects/SOGo/SOGoDomainDefaults.m (-imapFolderSeparator): new
10294	method.
10295
102962010-03-01  Francis Lachapelle  <flachapelle@inverse.ca>
10297
10298	* UI/WebServerResources/UIxMailEditor.js (-clickedEditorSend):
10299	fixed wrong condition that would result in refusing to send a
10300	message after having clicked on the Save button.
10301
103022010-02-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
10303
10304	* Added a patch from Adam Yearout <ayearout@royal.wednet.edu>
10305	to fix OpenSUSE compilation issues.
10306
10307	* Added a patch from dev@ib.pl to make the memcached port
10308	being used by SOGo configurable using the SOGoMemcachedPort
10309	default option.
10310
103112010-02-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10312
10313	* UI/Scheduler/UIxCalListingActions.m
10314	(_fetchFields:forComponentOfType:): mark events of remote
10315	calendars as non-editable.
10316
10317	* UI/Common/UIxPageFrame.m (-userIdentification): ancient
10318	"userEmail" method, with a more generic name. Also we now return
10319	the user's complete name.
10320
10321	* SoObjects/Mailer/SOGoMailAccount.m (-imapAclConformsToIMAPExt:)
10322	now based on the server's capability string.
10323
10324	* UI/MailerUI/UIxMailFolderActions.m (-createFolderAction): we
10325	check if the clientObject responds to "aboluteImap4Name",
10326	otherwise the subscription is made to the folderName alone.
10327
10328	* Main/SOGo.m (-run): moved initialization logs from +initialize
10329	here, so that they are output to the redirected output stream.
10330	Added version number to "starting" line.
10331
103322010-02-18  Ludovic Marcotte  <lmarcotte@inverse.ca>
10333
10334	* UI/MailerUI/UIxMailFolderActions.m: Modified the
10335	code so that we correctly subscribe/unsubscribe to
10336	the folders (old/new) when renaming or deleting
10337	a folder. Also corrected the creation of subfolders
10338	by using -absoluteImap4Name.
10339
103402010-02-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10341
10342	* Tools/SOGoToolRestore.m (+initialize): removed method.
10343	(-run): make use of the newly publicized SOGoProductLoader for
10344	loading needed products.
10345
10346	* SoObjects/SOGo/SOGoProductLoader.m (-loadAllProducts): new name
10347	for "loadProducts". Do not list product directories where no
10348	products were loaded.
10349	(-loadProducts:): new method accepting an array of products to
10350	load from SOGo library directories.
10351
10352	* SoObjects/SOGo/SOGoBuild.m: moved from Main/build.h to here.
10353
10354	* SoObjects/SOGo/SOGoProductLoader.m: moved from Main/ to here.
10355
10356	* UI/MainUI/SOGoRootPage.m (-_casDefaultAction): when the local
10357	cache has expired, we create a "cas-location" cookie before
10358	redirecting to the CAS login page and we redirect the user back to
10359	that page when the login has been completed. This way, the
10360	event creation window or any AJAX request would seamlessly restart
10361	where "interrupted" by the login process.
10362
10363	* SoObjects/Appointments/SOGoCalendarComponent.m
10364	(-sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:):
10365	added a few headers to the ical attachment that could help
10366	work-around bugs occurring with Outlook: content-transfer-encoding
10367	= qp. Moreover a \r\n is added to the iCalString.
10368
10369	* SoObjects/SOGo/SOGoCache.m: worked around in bug in GCC
10370	occurring with libmemcached >= 0.37 by making the servers and
10371	handle ivars static globals.
10372
103732010-02-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10374
10375	* UI/WebServerResources/SchedulerUI.js
10376	(updateEventFromDraggingCallback): invoke refreshEventsAndDisplay
10377	instead of changeCalendarDisplay alone.
10378
103792010-02-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10380
10381	* UI/WebServerResources/SchedulerUI.js (onMenuCurrentView): we
10382	hide the "eventDialog" when the menu pops up.
10383
10384	* UI/WebServerResources/UIxColorPicker.js (onChooseColor): the
10385	colour window is now closed once the user has made his choice.
10386
103872010-02-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10388
10389	* UI/WebServerResources/generic.js (getTarget): ensure the
10390	returned target has been initialized with prototype extensions.
10391
10392	* UI/WebServerResources/SchedulerUI.js (gotoToday): set the
10393	selected day to the today date.
10394
10395	* UI/WebServerResources/SchedulerUIDnD.js
10396	(SOGoEventDragGhostController.showGhosts): ghosts now also have an
10397	"eventInside" DIV to contain the title and draw the border. This
10398	avoids the overflow of extra pixels added to the DIV heights for
10399	start and end ghosts.
10400	(SOGoEventDragController.attachToDayNode): we determine whether
10401	the event cell are for an invitation, in which case the dragging
10402	event will be aborted even though the user is technically the
10403	"owner" of the represented event.
10404
104052010-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10406
10407	* UI/WebServerResources/SchedulerUI.js (attachDragControllers): we
10408	only attach handlers to subnodes of #calendarHeader DIV.days, not
10409	..DIV.dayLabels.
10410	(adjustCalendarHeaderDIV): adapted for IE.
10411
104122010-02-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10413
10414	* UI/Scheduler/UIxCalMonthView.m (-currentDayId): new method.
10415	(-currentDayNumber): new method.
10416
10417	* UI/Scheduler/UIxCalDayTable.m (-currentHourId): new method.
10418	(-currentAllDayId): new method.
10419	(-currentDayId): new method.
10420	(-currentHourLineId): removed method because hourlines are no
10421	longer present in the template.
10422	(-currentDayNumber): new accessor, used in javascript to recover
10423	selection faster when the currently selected date is no longer
10424	available.
10425
10426	* UI/WebServerResources/SchedulerUIDnD.js (ScrollController.init):
10427	enhanced scrolling by setting a limit of 6 steps rather than 2.
10428
10429	* UI/WebServerResources/SchedulerUI.js (newEventDIV): the right
10430	limit of event cells is setup using the "right" attribute rather
10431	than "width", to avoid issues with cell borders.
10432	(adjustCalendarHeaderDIV): new method that setups the proper
10433	¨right" attribute for the "calendarHeader" element on non-IE
10434	browsers. This reduces the amount of hacks and failed attempts to
10435	take the day view scrollbar into account.
10436	(changeWeekCalendarDisplayOfSelectedDay): check the class of DIV
10437	elements to avoid using fixed references that might change over
10438	time and cause exceptions.
10439	(onViewEventCallback): use prototype-expanded objects to avoid
10440	exceptions on IE.
10441
104422010-02-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10443
10444	* UI/WebServerResources/SchedulerUIDnD.js: adapted code for
10445	all-day events and monthly view. Added code to avoid modifying
10446	events when the pointer is out of the draggable zone.
10447
10448	* UI/WebServerResources/SchedulerUI.js: adapted code for
10449	all-day events and monthly view.
10450
10451	* UI/Scheduler/UIxAppointmentActions.m (-adjustAction): we now
10452	handle all-day events.
10453
104542010-02-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10455
10456	* UI/WebServerResources/SOGoRootPage.js (initLogin): discard the
10457	login cookie with the appName set as cookie path.
10458
10459	* UI/WebServerResources/SchedulerUI.js (newEvent): removed the
10460	useless "sender" parameter and added "day", "hour" and "duration"
10461	parameters to obtain a more generic method.
10462	(newEventFromWidget): new method the previous "newEvent" incarnation.
10463	(minutesToHM): new method that converts an amount of minutes into
10464	a string value suitable for an "hm" query parameter.
10465	(newEventFromDragging): new method suitable as a drag and drop
10466	callback for creating events.
10467	(updateEventFromDragging): new method suitable as a drag and drop
10468	callback for adjusting events.
10469	(_setupEventsDragAndDrop): new method that setups drag and drop
10470	controllers for instances of events per calendar.
10471	(attachDragControllers): new method that instantiate a drag and
10472	drop controller for each day column.
10473
10474	* UI/Scheduler/UIxCalListingActions.m
10475	(_fillBlocks:withEvent:withNumber:): work around the situation
10476	where the event start would occur after its end, causing a crash.
10477	Still emits a warning.
10478
10479	* UI/Scheduler/UIxCalDayTable.m (-currentHourLineId): new method
10480	replacing "currentHourLineClass". The hour identifier now being
10481	the value of the element id, the hourline classes are populated
10482	from the template itself.
10483
10484	* UI/WebServerResources/generic.js (generateQueryString): adjusted
10485	method to take only "string" and "number" typed values into
10486	account when constructing URL parameters.
10487
10488	* UI/WebServerResources/SchedulerUIDnD.js: new js module with
10489	classes implementing drag and drop of events.
10490
10491	* UI/Scheduler/UIxOccurenceDialog.m (-confirmAdjustmentMethod):
10492	new method for displaying a dialog suitable for start and duration
10493	adjustments.
10494
10495	* UI/Scheduler/UIxAppointmentActions.m (-adjustAction): new method
10496	that takes a "days", a "start" and a "duration" relative
10497	parameters to adjust the current event or occurrence.
10498
10499	* UI/Scheduler/UIxAppointmentActions.[hm]: new module implementing
10500	a WODirectAction class for ajax calls for appointments.
10501
105022010-02-08  Francis Lachapelle  <flachapelle@inverse.ca>
10503
10504	* UI/Contacts/UIxContactFoldersView.m (-verticalDragHandleStyle):
10505	new method (was missing), borrowed from UIxCalMainView.m.
10506	(-horizontalDragHandleStyle): idem.
10507	(contactsListContentStyle): idem.
10508
10509	* UI/WebServerResources/ContactsUI.js (-onAddressBookRemove):
10510	avoid selecting the personal addressbook prior to obtaining the
10511	user's answer.
10512
10513	* UI/MailerUI/UIxMailListView.m (-messageSize): improved
10514	formatting of message size.
10515
105162010-02-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10517
10518	* UI/MainUI/SOGoRootPage.m (-_standardDefaultAction): add an
10519	ending "/" to the active url to avoid a mismatch with the login
10520	cookie path.
10521
105222010-02-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10523
10524	* SoObjects/Contacts/SOGoContactLDIFEntry.m
10525	(-initWithName:withLDIFEntry:inContainer:): removed "name" ivar
10526	which had the same purpose as "nameInContainer". We also invoke
10527	[self initWithName:inContainer:] rather than [self init].
10528	Incidentally this fixes a leak.
10529
10530	* SoObjects/Mailer/SOGoMailBodyPart.m (-imap4URL): we assign our
10531	"imap4URL" ivar so that it can be access directly in order
10532	methods.
10533
10534	* Tests/Integration/test-davacl.py
10535	(DAVCalendarAclTest._testEventDAVAcl): test
10536	current-user-privilege-set on tasks too.
10537
10538	* SoObjects/Appointments/SOGoCalendarComponent.m
10539	(+webdavAclManager): moved method from SOGoAppointmentObject, so
10540	that tasks can benefit from it too.
10541
10542	* SoObjects/Appointments/SOGoAppointmentObject.m
10543	(+webdavAclManager): view-whole-component and view-date-and-time
10544	are now independent and children of "all". "read" is declared as
10545	equivalent to the new "SOGoDAVReadPermission". This hack avoids
10546	problems with ACL hierarchy.
10547
10548	* Tests/Integration/test-davacl.py (DAVCalendarAclTest._putTask):
10549	new method that create tasks in the test collection based on a
10550	template.
10551	(DAVCalendarAclTest._currentUserPrivilegeSet): new method that
10552	request the {DAV:}current-user-privilege-set property on the
10553	specified DAV resource. Also checks whether the request expectedly
10554	fails or succeeds.
10555	(DAVCalendarAclTest._comparePrivilegeSets): new helper method to
10556	compare to arrays.
10557	(DAVCalendarAclTest._testCollectionDAVAcl): new test helper method
10558	for ensure that DAV permissions are conform to the SOGo
10559	permissions on collections.
10560	(DAVCalendarAclTest._testEventDAVAcl): same as above for events.
10561
105622010-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10563
10564	* SoObjects/SOGo/SOGoWebAuthenticator.h: conforms to
10565	SOGoAuthenticator protocol.
10566
10567	* SoObjects/SOGo/SOGoDAVAuthenticator.h: conforms to
10568	SOGoAuthenticator protocol.
10569
10570	* SoObjects/SOGo/SOGoProxyAuthenticator.m
10571	(-imapPasswordInContext:forServer:forceRenew:): added method.
10572	Returns nil when renew is set to YES so that no real retry occurs
10573	(convention: null password is NO password) but returns an empty
10574	string by default.
10575
10576	* SoObjects/SOGo/SOGoUserFolder.m (-ownerInContext:): invoke
10577	setOwner: to retain user.
10578
10579	* SoObjects/SOGo/SOGoObject.m (-initWithName:inContainer:):
10580	ownerInContext: already retains "owner".
10581
10582	* Main/SOGoProductLoader.m (-loadProducts): attempt to free some
10583	memory after "loadAllProducts" is invoked, which consumes a lot of
10584	RAM.
10585
105862010-01-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10587
10588	* SoObjects/SOGo/SOGoSystemDefaults.m (-CASServiceURL)
10589	(-authenticationType): new accessors.
10590
10591	* SoObjects/SOGo/SOGoObject.m (+globallyUniqueObjectId): fixed to
10592	use the result of "random" rather than the function pointer.
10593
10594	* SoObjects/SOGo/SOGoCache.m (-setValue:forKey:expire)
10595	(-setValue:forKey:, -valueForKey:, -removeValueForKey:): new
10596	accessors.
10597	(-CASTicketFromIdentifier:, -CASSessionWithTicket:)
10598	(-setCASSession:withTicket:forIdentifier:): new accessors enabling
10599	the CAS session management.
10600	(-CASPGTIdFromPGTIOU:, -setCASPGTId:forPGTIOU:): new accessors
10601	enabling proxy ticket management (see casProxyAction below).
10602
10603	* UI/MainUI/SOGoUserHomePage.m (-logoffAction): we now pass the
10604	request application name as cookie path.
10605
10606	* UI/MainUI/SOGoRootPage.m (-casProxyAction): new method invoked
10607	by the CAS server when authenticating the SOGo server during a
10608	proxy request.
10609	(-_casDefaultAction): new "defaultAction" method executed in CAS mode.
10610
10611	* UI/Common/UIxPageFrame.m (-canLogoff): return NO in CAS mode.
10612
10613	* SoObjects/SOGo/SOGoWebAuthenticator.m (-checkLogin:password:)
10614	when authentication type is set to "cas", the password is the
10615	ticket identifying the CAS session. We therefore check if the
10616	login and the session login match.
10617	(-imapPasswordInContext:forServer:forceRenew:): new method that
10618	returns the "password" to use for IMAP connections. In CAS mode,
10619	a proxy ticket is fetched with the current CAS session. In
10620	standard mode, we still use the current user's password. The
10621	"forceRenew:" parameter enables the fetching of a new proxy ticket
10622	if the current one has expired.
10623	(-setupAuthFailResponse:withReason:inContext:): we know invoke
10624	"defaultAction" on the SOGoRootPage instance to make sure all the
10625	cookies and CAS tickets are taken into account.
10626	We now pass the request application name as cookie path.
10627
10628	* SoObjects/SOGo/SOGoCASSession.[hm]: new class module
10629	implementing the class in charge of CAS authentication and proxy
10630	transactions.
10631
106322010-01-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10633
10634	* Tools/SOGoToolBackup.m (-fetchUserIDs): retain allUsers to avoid
10635	a release between the pool rotation.
10636
106372010-01-25  Francis Lachapelle  <flachapelle@inverse.ca>
10638
10639	* UI/WebServerResources/SchedulerUI.js
10640	(restoreCurrentDaySelection): fixed selection of current day in
10641	mini-calendar.
10642	* Updated version number to 1.2.0.
10643
106442010-01-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
10645
10646	* Reorganized the layout of automated tests.
10647
106482010-01-22  Francis Lachapelle  <flachapelle@inverse.ca>
10649
10650	* UI/Contacts/UIxListEditor.m (-references): avoid printing the
10651	email address between brackets if not defined.
10652
10653	* UI/Contacts/UIxListView.m (-itemHasEmail): new method that
10654	returns YES if the current list item has an email address.
10655
106562010-01-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10657
10658	* UI/WebServerResources/MailerUI.js (composeNewMessage): fixed
10659	potential js error in IE when no mailbox is selected.
10660
10661	* Tools/SOGoToolRestore.m (+initialize): we need to invoke
10662	[iCalEntityObject+SOGo initializeSOGoExtensions], otherwise the
10663	extraction of quick records will cause a crash because some global
10664	variables won't be initialized.
10665
106662010-01-21  Francis Lachapelle  <flachapelle@inverse.ca>
10667
10668	* UI/Scheduler/UIxCalListingActions.m
10669	(_fetchFields:ofComponentType:): added field ownerIsOrganizer which
10670	identifies whether or not the calendar owner is the organizer of
10671	the event. Also added the field erasable which identifies if the
10672	active user can delete objects in the current calendar.
10673	* UI/WebServerResources/SchedulerUI.js
10674	(-_deleteCalendarEventBlocks): when the organizer deletes an
10675	event, also delete the event in the calendars of the attendees, if
10676	visible. Also, don't allow to delete an event if the user can't
10677	erase objects in the calendar.
10678	(-_deleteCalendarEventCache:): new function to update the events cache.
10679
106802010-01-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10681
10682	* SoObjects/Appointments/SOGoAppointmentInboxFolder.m
10683	(-davCalendarFreeBusySet): only advertise the collections owned by
10684	the inbox's owner.
10685	(-davScheduleDefaultCalendarURL): new caldav accessor.
10686
10687	* SoObjects/Appointments/SOGoAppointmentFolders.m
10688	(-toManyRelationShipKeys): unconditionnally display the inbox
10689	collection.
10690	(-lookupName:inContext:acquire:): accepts "inbox" even when the
10691	active user is not the owner.
10692
10693	* SoObjects/Appointments/SOGoAppointmentFolder.m
10694	(-davResourceType): unconditionnally advertise "personal" as
10695	schedule-outbox.
10696
10697	* UI/WebServerResources/scriptaculous.js: modified to use
10698	ResourcesURL as base loading URL.
10699
10700	* UI/WebServerResources/UIxAclEditor.js (saveAcls): removed
10701	method.
10702	(nodeForUser): don't add a checkbox if "canSubscribeUsers" is
10703	false.
10704
10705	* UI/Common/UIxAclEditor.m (-canSubscribeUsers): new accessor that
10706	returns whether the clientObject has the required method to
10707	subscribe users.
10708
10709	* UI/PreferencesUI/UIxPreferences.m (-itemTimeFormatTexts): the
10710	default time format is not taken from the domain defaults rather
10711	than the user locale.
10712
107132010-01-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10714
10715	* SoObjects/Appointments/SOGoAppointmentFolders.m
10716	(-hasProxyCalendarsWithWriteAccess:forUserWithLogin:)
10717	(-proxySubscribersWithWriteAccess)
10718	(-addProxySubscribers:withWriteAccess:)
10719	(removeProxySubscribers:withWriteAccess:): prevent caldav-proxy
10720	operations on the owner's subscribed resources.
10721
10722	* UI/Common/UIxFolderActions.m (-subscribeUsersAction): new web
10723	method that enables resource owners to subscribe other users to
10724	their resources from the acl editor.
10725
10726	* UI/Common/UIxAclEditor.m (-currentUserIsSubscribed)
10727	(-folderID): new accessors.
10728
10729	* Tests/utilities.py (TestACLUtility.(un)subscribe): added utility
10730	methods.
10731
10732	* Tests/test-ical.py (iCalTest.testCalendarProxy2): test the
10733	behaviour of the ical proxy mechanisms when subscriptions and
10734	access rights are modified.
10735
10736	* SoObjects/SOGo/SOGoUserSettings.m (-subscribedCalendars)
10737	(-subscribedAddressBooks): new accessors.
10738	(-setCalendarProxyUsers:withWriteAccess:)
10739	(-setCalendarProxySubscriptionUsers:withWriteAccess:) removed accessors.
10740
10741	* SoObjects/Appointments/SOGoUser+Appointments.m
10742	(-adjustProxySubscriptionToUser:remove:forWriteAccess:) removed
10743	methods.
10744	(-hasSubscribedToCalendar:): new method that returns whether a
10745	user has subscribed to a calendar resource. Might be a duplicate
10746	of [SOGoGCSFolder userIsSubscriber:].
10747
10748	* SoObjects/Appointments/SOGoAppointmentFolders.m
10749	(-adjustProxyRolesForUsers:remove:forWriteAccess:)
10750	(-adjustProxySubscriptionsForUsers:remove:forWriteAccess:):
10751	removed methods.
10752	(-hasProxyCalendarsWithWriteAccess:forUserWithLogin:): new method
10753	that returns whether the user passed as parameter should be
10754	returned in the list of subscribers corresponding to the proper
10755	write access.
10756	(-proxySubscribersWithWriteAccess:) new method that returns the
10757	list of users that have a proxy access to the current account.
10758	(-addProxySubscribers:withWriteAccess:,-removeProxySubscribers:withWriteAccess:)
10759	setters for the above method.
10760
10761	* UI/WebServerResources/ContactsUI.js (initContacts): fixed a bug
10762	causing a null exception error on IE7 when the window is not the
10763	main window, and is therefore missing the "uploadCancel" and
10764	"uploadOK" elements.
10765
107662010-01-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10767
10768	* Tests/utilities.py: new module implementing utility classes and
10769	methods that are used in different test cases.
10770
10771	* Main/sogod.m (main): set the "GNUSTEP_STRING_ENCODING"
10772	environment variable to NSUTF8StringEncoding to properly decode
10773	the user defaults strings in UTF8.
10774
107752010-01-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10776
10777	* SoObjects/SOGo/SOGoUserSettings.m
10778	(-setCalendarProxyUsers:withWriteAccess:)
10779	(calendarProxyUsersWithWriteAccess:)
10780	(setCalendarProxySubscriptionUsers:withWriteAccess:)
10781	(calendarProxySubscriptionUsersWithWriteAccess:): "Read" and
10782	"Write" were inverted.
10783
107842010-01-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10785
10786	* SoObjects/Appointments/SOGoAppointmentFolder.m
10787	(+webdavAclManager): fixed "read-free-busy" namespace declaration.
10788
10789	* SoObjects/SOGo/SOGoObject.m (-davPrincipalCollectionSet): when
10790	used with iCal 4, we provide a "DAV" header with the proper
10791	compliance classes, since iCal 4 doesn't want to use OPTIONS.
10792
10793	* Tests/test-webdav.py (WebDAVTest.testExpandProperty): new method
10794	to test the new "expand-propery" code in SOGo.
10795
10796	* SoObjects/SOGo/SOGoFolder.m (-davExpandProperty): new method to
10797	handle the "expand-property" REPORT.
10798
10799	* SoObjects/Appointments/SOGoCalendarProxy.m:
10800	adapted module to new code for handling chosen calendars
10801	delegation.
10802
10803	* Main/SOGo+DAV.[hm): new category module for handling dav methods
10804	pertaining to /SOGo/dav/ as the principal-collection-set. Now
10805	implements 3 methods that were previously found in SOGoUserFolder
10806	categories.
10807
10808	* SoObjects/Appointments/SOGoUser+Appointments.[hm]: new category
10809	module.
10810
10811	* SoObjects/Appointments/SOGoAppointmentInboxFolder.[hm]: new
10812	class module that implements the basic "schedule-inbox"
10813	collection mechanisms, enough to let iCal work properly. To be
10814	completed for full invitation handling.
10815
10816	* SoObjects/SOGo/SOGoObject.m (-lookupObjectAtDAVUrl:): new method
10817	that enables DAV reports to lookup objects based on the urls
10818	passed in their parameters.
10819	(-davURLAsString): simplified method by making it recurse from its
10820	top parent.
10821	(-setRoles:forUsers:): treat a list of users at once.
10822	(-davPrincipalMatch): removed method since it really pertains to
10823	/SOGo/dav, which the correct principal-collection-set.
10824
10825	* SoObjects/SOGo/SOGoParentFolder.m (-initSubcribedSubFolders):
10826	enable the super user to see any user's subscriptions. This
10827	enables a new set of tests to work properly in super user mode.
10828	(-appendSubscribedSources): consequently to the above, the
10829	references must be based on the owner user rather than the current
10830	user.
10831
10832	* SoObjects/SOGo/SOGoUser.m: removed commented out methods.
10833
10834	* SoObjects/SOGo/SOGoUserSettings.m (-setProxiedCalendars)
10835	(-setCalendarProxyUsers:withWriteAccess:):
10836	(-setCalendarProxySubscriptionUsers:withWriteAccess:): new method
10837	for handling caldav-proxy related settings.
10838
10839	* SoObjects/SOGo/SOGoWebDAVAclManager.m (_registerChild:of:): only
10840	emits a warning of the specified parent cannot be found, instead
10841	of crashing.
10842
10843	* SoObjects/SOGo/WOResponse+SOGo.m (-prepareDAVResponse): new
10844	method with common code for DAV responses generated from SOGo.
10845
10846	* Tests/webdavlib.py (WebDAVPROPPATCH): new class implementing the
10847	"PROPPATCH" method.
10848	(WebDAVExpandProperty): new class implementing the
10849	"expand-property" REPORT.
10850	(_WD_XMLTreeElement.appendSubtree): new method that enables the
10851	addition of a tree of objects from a dictionary passed as
10852	parameter.
10853
10854	* Tests/test-ical.py: new test script for tesing iCal-related
10855	behaviours.
10856
10857	* Tools/SOGoToolBackup.m (-extractUserPreferences:intoRecord:):
10858	fixed compilation warning.
10859
108602010-01-13  Francis Lachapelle  <flachapelle@inverse.ca>
10861
10862	* UI/WebServerResources/ContactsUI.js (-fixSearchFieldPosition):
10863	replaced this function by the equivalent CSS definition.
10864	(-initContacts): initialized import buttons even for "popup" mode.
10865
108662010-01-12  Ludovic Marcotte  <lmarcotte@inverse.ca>
10867
10868	* SoObjects/SOGo/NSString+Utilities.m
10869	We retain the autoreleased strings static variable
10870	to avoir random issues with the -fromCSSIdentifier method
10871
10872	* Updated the Moz guide for the updateLink part of
10873	the updates.php script.
10874
108752010-01-11  Ludovic Marcotte  <lmarcotte@inverse.ca>
10876
10877	* UI/Contacts/UIxContactFolderActions.m (-importVcardData:):
10878	We now support multiple vCards in the same file during
10879	the import process
10880
108812010-01-08  Ludovic Marcotte  <lmarcotte@inverse.ca>
10882
10883	* SoObjects/SOGo/LDAPSource.{h,m} - bindFields is now
10884	an array instead of a list of strings separated by commas.
10885	Updated the Installation & Configuration Guide to reflect
10886	this change.
10887
108882010-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10889
10890	* UI/Scheduler/UIxCalDateLabel.m: dropped useless module.
10891
10892	* UnitTests/SOGoTestRunner.m: separated class "SOGoTestRunner"
10893	from sogo-tests.m. Moved reporting and logging methods from
10894	SOGoTest into SOGoTestRunner.m
10895
10896	* SoObjects/SOGo/NSString+Utilities.m (-_setupCSSEscaping): we
10897	must initialize cssEscapingCount before using it. Also, fixed a
10898	typo preventing the character buffer from being initialized
10899	completely.
10900
109012010-01-07  Francis Lachapelle  <flachapelle@inverse.ca>
10902
10903	* SoObjects/SOGo/NSString+Utilities.m (-asCSSIdentifier): replaced
10904	%lc by %C.
10905	(-fromCSSIdentifier): idem.
10906
109072010-01-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10908
10909	* SoObjects/SOGo/NSString+Utilities.m (-fromCSSIdentifier): speed
10910	things up a little bit by checking whether the current character
10911	is '_', possibly announcing an escaped sequence, anything else
10912	being treated regularly.
10913
10914	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.m
10915	(-jsonStringFromString:): convert "\" to "\\" rather than "\n".
10916
10917	* SoObjects/SOGo/NSScanner+BSJSONAdditions.m (-scanJSONString): we
10918	now accept lowercase characters in characters coded in UCN.
10919
10920	* UnitTests/TestBSJSONAdditions.m: new unit test for
10921	BSJSONAdditions.
10922
10923	* UnitTests/SOGoTest.m: base class for our unit test testcases.
10924	Similar to JUnit and family.
10925
10926	* UnitTests/sogo-tests.m: main executable for our Objective-C test
10927	framework.
10928
109292010-01-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10930
10931	* UI/WebServerResources/SchedulerUI.js (onViewEventCallback):
10932	simplified lookup of "P" elements by groupings them in an array.
10933	This also fixes a bug where all the returned information would not
10934	be displayed. Also, we make use of the "calendar" field, which was
10935	not used before.
10936
10937	* UI/Scheduler/UIxAppointmentEditor.m (-newAction): new events
10938	have an ".ics" extension instead of ".vcf".
10939
10940	* UI/Scheduler/UIxCalMainView.m (-_setupContext): only invoked once
10941	per instance.
10942	(-checkDefaultModulePreference): synchronize the user defaults
10943	after the login module was modified.
10944
10945	* UI/Scheduler/UIxDatePicker.m
10946	(-takeValuesFromRequest:inContext:): we set the new date to the
10947	user's timezone and recompute the proper offset compare to the
10948	system timezone, which may differ from it.
10949
10950	* SoObjects/Appointments/iCalEntityObject+SOGo.m
10951	(-quickRecordDateAsNumber:withOffset:forAllDay:): we only need to
10952	compute the delta between the user's timezone and UTC rather than
10953	the system timezone.
10954
10955	* SoObjects/Mailer/SOGoMailNamespace.m
10956	(-lookupName:inContext:acquire:): overriden method because the
10957	namespace "folders" cannot be created and cannot contain messages.
10958
10959	* SoObjects/Mailer/SOGoMailAccount.m
10960	(-otherUsersFolderNamespaces): new method that returns all the
10961	namespace "folders" in the "other user" namespace. Replaces the
10962	old "otherUsersFolderName" method.
10963	(-sharedFolderNamespaces): same as above for the "shared"
10964	namespace.
10965
10966	* SoObjects/SOGo/SOGoDomainDefaults.m (-otherUsersFolderName)
10967	(-sharedFolderName): removed obsolete methods.
10968
109692010-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
10970
10971	* UI/WebServerResources/MailerUI.js (Mailbox): "this.name" is now
10972	an escaped form of the mailbox name, that can thus be used to
10973	generate folder URLs.
10974	(Mailbox.findMailboxByName): escape the name passed as parameter
10975	prior to doing a search.
10976
10977	* UI/WebServerResources/JavascriptAPIExtensions.js
10978	(asCSSIdentifier): use two arrays rather than an "Object" in order
10979	to improve performance.
10980
10981	* SoObjects/SOGo/NSString+Utilities.m (-fromCSSIdentifier): new
10982	method that converts an escaped string back to a normal one.
10983	(-asCSSIdentifier): no longer use "replaceString:withString:" in
10984	order to avoid parsing the string multiple times. This probably
10985	enhance performances a bit and also avoid double-encoding
10986	problems.
10987
10988	* SoObjects/SOGo/NSArray+Utilities.m (-resultsOfSelector): new
10989	method that applies a selector on the contained objects and
10990	collect the result objects in a new array.
10991
10992	* SoObjects/Mailer/SOGoMailFolder.m
10993	(-lookupName:inContext:acquire:): we must check and create the
10994	current folder even if the looked up key is a subfolder or a web
10995	method.
10996
10997	* SOPE/sope-patchset-r1664.diff: new patchset replacing
10998	-r1660.diff.
10999	Added code to handle IMAP namespaces.
11000
110012010-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11002
11003	* SoObjects/Mailer/SOGoMailForward.m (-): we use
11004	-[SOGoUserDefaults mailComposeMessageType] instead of querying the
11005	defaults key, so that the fallbacking mechanism between the
11006	different preference layers can be used.
11007
110082009-12-26  Ludovic Marcotte  <lmarcotte@inverse.ca>
11009
11010	* SoObjects/SOGo/SOGoMailer.m (_smtpSendData:
11011	toRecipients:sender:): We now honor the 'port'
11012	part in the SMTP server address. So one can now
11013	specify hostname:port (like localhost:587) as
11014	a value of SOGoSMTPServer. This fixes
11015	http://www.sogo.nu/bugs/view.php?id=201
11016
11017	* SoObjects/Mailer/SOGoMailForward.m (init):
11018	Now consider SOGoMailComposeMessageType instead
11019	of ComposeMessagesType when checking if we are
11020	using HTML mails composition mode. This fixes
11021	http://www.sogo.nu/bugs/view.php?id=280
11022
110232009-12-25  Ludovic Marcotte  <lmarcotte@inverse.ca>
11024
11025	* Tools/SOGoToolBackup.m (-fetchUserIDs:):
11026	We now use a local autorelease pool and flush
11027	it after every 100 requests to the LDAP (or
11028	other source type) server.
11029
110302009-12-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
11031
11032	* UI/Scheduler/UIxCalView.m
11033	Don't call -configureFormatters in -init as it'll
11034	invoke labelForKey prior to setPage: - resulting
11035	in the wrong resources manager being selected.
11036	This fixes: http://www.sogo.nu/bugs/view.php?id=286
11037
11038	* UI/Templates/ContactsUI/UIxContactFoldersView.wox
11039	UI/Templates/SchedulerUI/UIxCalMainView.wox
11040	Modified the uploadForm in those two templates (to add
11041	const:href="") in order to avoid SOPE sessions being
11042	created upon access to the calendar or address book module.
11043	This fixes: http://www.sogo.nu/bugs/view.php?id=208
11044
11045	* SoObjects/SOGo/NSDictionary+Utilities.m (-userRecordAsLDIFEntry)
11046	We skip the "isGroup" attribute from the list of attributes
11047	to include during LDIF generation. This fixes:
11048	http://www.sogo.nu/bugs/view.php?id=221
11049
11050	* UI/WebServerResources/SchedulerUI.js - we also invoke
11051	refreshTasks() in onCalendarReload(). This fixes:
11052	http://www.sogo.nu/bugs/view.php?id=250
11053
110542009-12-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
11055
11056	* Removed all the Kolab-related stuff (more specifically,
11057	associated mail part viewers)
11058
11059	* Removed all references to "anais" stuff.
11060
11061	* SoObjects/Mailer/SOGoMailFolder.m (-deleteUIDs:inContext:):
11062	we check if we  aren't in the Trash folder already before try to
11063	copy over deleted messages.
11064
11065	* We now offer a way to delete events from the context menu
11066	in all calendar views.
11067
110682009-12-22  Francis Lachapelle  <flachapelle@inverse.ca>
11069
11070	* UI/Scheduler/UIxAppointmentEditor.m (-viewAction): added
11071	calendar name in returned dictionary.
11072
110732009-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11074
11075	* Tests/test-webdav.py (WebDAVTest.testPrincipalCollectionSet2):
11076	fixed test to use the proper collection URL as expected value,
11077	rather that the freebusy.ifb resource URL.
11078
11079	* SoObjects/Appointments/SOGoAppointmentFolder.m
11080	(_appendComponentProperties:matchingFilters:toResponse:)
11081	(_appendComponentProperties:matchingURLs:toResponse:): ensure that
11082	baseURL ends with "/".
11083
110842009-12-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11085
11086	* SoObjects/SOGo/SOGoUserFolder.m (-fetchContentObjectNames):
11087	fixed a potential crash by removing the "static" attribute of the
11088	"cos" local variable.
11089
110902009-12-19  Ludovic Marcotte  <lmarcotte@inverse.ca>
11091
11092	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
11093	(_davPersonalCalendarURL): We make sure we handle the
11094	presence or not of the trailing slash when we call
11095	-davURLAsString on the parent object. See
11096	http://www.sogo.nu/bugs/view.php?id=74 for
11097	all details.
11098
110992009-12-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
11100
11101	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
11102	Dropped the use of NGMimeType and we now use
11103	the same string decoding method as used
11104	for text/plain parts.
11105
111062009-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11107
11108	* Tools/SOGoToolRemoveDoubles.m (-processFolder:ofUser:withFoM:):
11109	same as below.
11110
11111	* Tools/SOGoToolCheckDoubles.m (-processIndexResults:withFoM:):
11112	same as below.
11113
11114	* SoObjects/Mailer/NSString+Mail.m
11115	(-stringByConvertingCRLNToHTML): invokde [NSString UTF8String]
11116	rather than cStringUsingEncoding: NSUTF8StringEncoding, since the
11117	latter provokes a crash that the former doesn't.
11118
11119	* UI/Common/UIxPageFrame.m (_stringsForFramework:): use the system
11120	default when the active user does not resolve.
11121
111222009-12-11  Ludovic Marcotte  <lmarcotte@inverse.ca>
11123
11124	* Added a patch from Albrecht Gebhardt <albrecht.gebhardt@algepop.net>
11125	that offers a "Reload" button in the Web contacts management
11126	module.
11127
111282009-12-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11129
11130	* UI/PreferencesUI/UIxPreferences.m (-setUserShortDateFormat:):
11131	fixed handling of the value "default", which actually should
11132	unset the value in the user defaults.
11133
111342009-12-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11135
11136	* SoObjects/SOGo/SOGoUserFolder.m (-toManyRelationShipKeys)
11137	(-lookupName:inContext:acquire:): fixed typo preventing access to
11138	Contacts module.
11139
111402009-12-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11141
11142	* SoObjects/SOGo/WORequest+SOGo.m (-handledByDefaultHandler):
11143	return "not isSoWebDAVRequest".
11144
11145	* Main/SOGo.m (-lookupName:inContext:acquire:): ensure the web
11146	access is enabled or the request is a DAV request before
11147	proceeding.
11148
11149	* SoObjects/SOGo/SOGoUserFolder.m (-toManyRelationShipKeys)
11150	(-fetchContentObjectNames): ensure the proper dav access is
11151	enabled in order before listing the related objects.
11152
11153	* SoObjects/SOGo/SOGoSystemDefaults.m (-isWebAccessEnabled)
11154	(-isCalendarDAVAccessEnabled, isAddressBookDAVAccessEnabled): new
11155	self-explanatory accessors.
11156
11157	* Main/SOGo.m (-davURLAsString): we ensure that the url ends with
11158	"/" since the /SOGo object is a collection and the caller may rely
11159	on this.
11160
111612009-12-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11162
11163	* UI/PreferencesUI/UIxPreferences.m (-defaultAction):
11164	setVacationOptions: and setForwardOptions: are now set from here.
11165
11166	* SoObjects/SOGo/SOGoDomainDefaults.m (-forwardEnabled)
11167	(-vacationEnabled): we must query "SOGoForwardEnabled" and
11168	"SOGoVacationEnabled", respectively.
11169
111702009-12-03  Francis Lachapelle  <flachapelle@inverse.ca>
11171
11172	* SoObjects/SOGo/iCalEntityObject+Utilities.m (-findParticipant:):
11173	we now search in all attendees, including attendees with role
11174	NON-PARTICIPANT.
11175
111762009-12-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11177
11178	* SoObjects/SOGo/SOGoUserDefaults.m (+initialize): we need to
11179	initialize the profile class from the constructor as this method
11180	may be invoked before all modules are loaded.
11181
11182	* SoObjects/SOGo/SOGoSource.h: added new "SOGoDNSource" protocol
11183	as a child protocol of "SOGoSource".
11184
11185	* SoObjects/SOGo/SOGoUserManager.m: added new
11186	"SOGoUserManagerRegistry" class that handles the mapping between
11187	source types and their corresponding classes.
11188	(-[SOGoUserManager registryClass]): new method that returns the
11189	class name of the registry class, which can be overriden to handle
11190	other types.
11191
111922009-12-01  Ludovic Marcotte  <lmarcotte@inverse.ca>
11193
11194	* Reworked the calendar's categories (introduced
11195	the "Meeting" category).
11196
111972009-12-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11198
11199	* UI/Scheduler/UIxComponentEditor.m (-categoryList): the returned
11200	list is now sorted, except if the category of the event was not
11201	always present in the list (kept on top).
11202
11203	* UI/PreferencesUI/UIxPreferences.m (-categoryList): simplified
11204	method by returning only the array of defined categories from the
11205	user defaults or those defined in the Localizable.strings and sort
11206	the resulting array.
11207	(-categoryColor): new accessor that return the color associated
11208	with the value in the "category" ivar, if not exists, we return
11209	the default from SOGoCalendarDefaultCategoryColor.
11210	(-setCategoriesValue): simplified method since we now receive a
11211	dictionary. The dictionary is now transferred as a JSON object
11212	rather than a property list.
11213
11214	* SoObjects/SOGo/SOGoUserDefaults.m
11215	(-setCalendarCategoriesColors:, -calendarCategoriesColors):
11216	SOGoCalendarCategoriesColors is now a dictionary. The values are
11217	migrated in _migrateCalendarCategories.
11218
11219	* SoObjects/SOGo/SOGoDomainDefaults.m
11220	(-calendarDefaultCategoryColor): new accessor for the domain
11221	default SOGoCalendarDefaultCategoryColor.
11222
11223	* SoObjects/SOGo/SOGoDefaultsSource.m (-boolForKey:)
11224	(-floatForKey:, -integerForKey:, -dataForKey:, -stringForKey:)
11225	(-dictionaryForKey:, -arrayForKey:, -stringArrayForKey:): added
11226	type checking and warnings.
11227
112282009-11-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11229
11230	* SoObjects/SOGo/SOGoDefaultsSource.m (-setBool:forKey:): we
11231	encode boolean values as integers to avoid confusing the boolean
11232	objective-c parsers when reading values coming back from the JS
11233	code.
11234
11235	* UI/WebServerResources/SchedulerUI.js (initCalendars): the
11236	"ShowCompletedTasks" parameter is in the UserSettings dictionary.
11237
11238	* SoObjects/SOGo/SOGoDefaultsSource.m
11239	(-migrateOldDefaultsWithDictionary:): when migrating between two
11240	existing keys, the new value is automatically overwritten with the
11241	old one, since it causes a problem with the values inherited from
11242	SOGoDefaults.plist.
11243
112442009-11-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11245
11246	* SoObjects/SOGo/SOGoUserManager.m
11247	(-authenticationSourceIDsInDomain:): now takes a domain argument.
11248	Contrarily to contact sources, specifying a domain will cause the
11249	generic sources to be ignored.
11250	(-fetchUsersMatching:inDomain:): now takes a domain argument.
11251
11252	* SoObjects/SOGo/LDAPSource.m (-initFromUDSource:inDomain):
11253	removed handing of "domain attribute", since the underlying
11254	mechanism causes complex code for an unrealistic case.
11255
112562009-11-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11257
11258	* SoObjects/SOGo/SOGoUserSettings.m: new class module designed to
11259	be the counterpart to SOGoUserDefaults.m.
11260
11261	* UI/PreferencesUI/UIxPreferences.m (-): "hours" is now a static
11262	variable, rather than an ivar.
11263
11264	* UI/MainUI/SOGoRootPage.m (+initialize): the supportedLanguages
11265	are not available from the SOGoSystemDefaults
11266	(SOGoDefaults.plist).
11267
11268	* UI/MailerUI/UIxMailView.m (+initialize): we never used
11269	"SOGoDontUseETagsForMailViewer".
11270
11271	* UI/MailerUI/UIxMailEditor.m (+initialize): we never used
11272	"SOGoShowInternetMarker" and "SOGoInternetMailHeaders".
11273
11274	* SoObjects/Mailer/SOGoDraftObject.m (+initialize):
11275	"TextPlainType" was never used.
11276
11277	* SoObjects/SOGo/SOGoSystemDefaults.m: new class module handling
11278	the getting of system (or "application") defaults, as well as
11279	default values for users and domains.
11280
11281	* SoObjects/SOGo/SOGoDomainDefaults.m: new class module handling
11282	the getting of domain defaults, as well as default values for for
11283	users belonging to the corresponding domain.
11284
11285	* SoObjects/SOGo/SOGoUserDefaults.m: new class module handling
11286	the setting and getting of user defaults.
11287
11288	* SoObjects/SOGo/SOGoLDAPDefaults.h: new protocol module for the
11289	handling of "recursive" ldap defaults.
11290
11291	* SoObjects/SOGo/SOGoDefaultsSource.m: new module class acting as
11292	a proxy between NSDictionary, NSUserDefaults and SOGoUserProfile,
11293	enabling the possibility of hierarchy and fallbacks.
11294
11295	* SoObjects/SOGo/SOGoUserProfile.m: new name for SOGoUserDefaults.
11296	(-arrayForKey:, -stringForKey:, -dataForKey:, -boolForKey:)
11297	(-floatForKey:): removed obsolete methods (as well as their setter
11298	counterparts).
11299
11300	* SoObjects/SOGo/SOGoSQLUserProfile.m: new class module for
11301	handling the SQL backend of the SOGoUserProfile.
11302
11303	* UI/SOGoUI/WOContext+UIx.m: removed obsolete class.
11304
113052009-11-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11306
11307	* SoObjects/SOGo/SOGoUserDefaults.m (-fetchJSONProfileFromDB): the
11308	isNew flag depends on the presence of the row in the database
11309	rather than on the existence of the value.
11310
113112009-11-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11312
11313	* SoObjects/SOGo/SOGoUserDefaults.m (-synchronize): avoid fetching
11314	the values from the database/the cache when they are successfully
11315	stored.
11316	(-fetchJSONProfileFromDB): sql-quoted quote characters do not
11317	apply here. Therefore we no longer need to unescape them.
11318
11319	* SoObjects/SOGo/SOGoCache.m (_cacheValues:ofType:forLogin:): we
11320	also fill the local cache with the new value to avoid ignoring it
11321	next time the cache is invoked.
11322
11323	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.m
11324	(+dictionaryWithJSONString:): method moved from NSDictionary into
11325	NSMutableDictionary for consistency.
11326
113272009-11-26  Ludovic Marcotte  <lmarcotte@inverse.ca>
11328
11329	* SoObjects/Mailer/SOGoMailObject+Draft.m
11330	(_fetchFileAttachmentKey:intoArray:withPath:): we
11331	try to also use basic types (application/, audio/, ...)
11332	when forwarding a mail with attachments and no
11333	Content-Disposition header (or filename) was found. This
11334	avoid losing attachments when forwarding mails.
11335	* UI/PreferencesUI/UIxPreferences.m
11336	We retain/release properly the vacationOptions and
11337	forwardOptions ivars.
11338
113392009-11-24  Francis Lachapelle  <flachapelle@inverse.ca>
11340
11341	* SoObjects/Mailer/NSData+Mail.m (-decodedHeader): renamed from
11342	decodedSubject. The decoding algorithm is now recursive.
11343
11344	* SoObjects/Mailer/NSString+Mail.m (-decodedHeader): renamed from
11345	decodedSubject. The string is now decoded by parts.
11346
113472009-11-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
11348
11349	* SoObjects/SOGo/SOGoGroup.m
11350	Initialize the local var entry to nil to avoid
11351	a crash if only one SQL source was specified
11352
11353	* SoObjects/SOGo/SQLSource.m
11354	Properly invoke cancelFetch on cusors that can return
11355	more than one value (prior to releasing the channel)
11356
113572009-11-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11358
11359	* Tools/sogo-tool.m (main): we check "SOGoUserSources" rather than
11360	the obsolete "SOGoLDAPSources".
11361
113622009-11-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11363
11364	* SoObjects/SOGo/SOGoDAVAuthenticator.m (-init): removed method,
11365	removed the "SOGoAuthenticationMethod" user default, which was
11366	never used.
11367
11368	* SoObjects/SOGo/SOGoWebAuthenticator.m (-init): removed method,
11369	removed the "SOGoAuthenticationMethod" user default, which was
11370	never used.
11371
11372	* SoObjects/SOGo/SOGoProxyAuthenticator.m (-init): removed method,
11373	removed the "SOGoAuthenticationMethod" user default, which was
11374	never used.
11375
11376	* Main/sogod.m (prepareUserDefaults): replaces
11377	"convertOldSOGoDomain", automatically set WOMessageUseUTF8,
11378	WOParsersUseUTF8 and NGUseUTF8AsURLEncoding to YES in the user
11379	defaults.
11380
11381	* SoObjects/SOGo/SOGoUserDefaults.m (_sqlJsonRepresentation:): the
11382	escaping of "\\" was done in the wrong direction.
11383	(-storeJSONProfileInDB:): we commit the transaction to avoid a
11384	lock on the profile table.
11385
113862009-11-19  Francis Lachapelle  <flachapelle@inverse.ca>
11387
11388	* SoObjects/Mailer/SOGoMailReply.m (-messageBody): don't try to
11389	remove the bottom signature when replying to an email, in order to
11390	avoid situations where a previous message follows the last signature.
11391
113922009-11-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11393
11394	* SoObjects/SOGo/SOGoUserDefaults.m (-fetchJSONProfileFromDB):
11395	extracted the conversion of property list values to JSON values
11396	into a new separate method (-_convertPListToJSON:), that will be
11397	invoked by -jsonRepresentation.
11398
11399	* SoObjects/SOGo/SQLSource.m (-checkLogin:andPassword:):
11400	(_lookupContactEntry:considerEmail:, -allEntryIDS)
11401	(_lookupContactEntry:consideringEmail:, fetchContactsMatching:):
11402	check whether the channel is valid before using it or report an
11403	error otherwise. Also, we release the channel after our
11404	operations, to avoid creating hundreds of biglions of useless
11405	and stalled connections.
11406
11407	* SoObjects/SOGo/SOGoUser.m (-userDefaults, -userSettings): the
11408	cache handling has now been put in the SOGoUserDefaults class.
11409	(-primaryUserDefaults, -primaryUserSettings): removed useless
11410	methods.
11411	(-userDefaultsClassName): added accessor to allow different
11412	classes.
11413
11414	* SoObjects/SOGo/SOGoUserDefaults.m (-primaryFetchProfile): split
11415	method to separate the cache data and the db data. We know invoke
11416	the "jsonRepresentation" method, which is the real data accessor
11417	now.
11418	(-primaryStoreProfile): user profile data is now serialized as a
11419	JSON string in order to avoid constant conversions between the
11420	plist and the json formats, from and to the cache.
11421	(-jsonRepresentation): we now handle the cache data from here, as
11422	it made more sense and reduces the code size in SOGoUser.m.
11423	(-fetchProfile): now a void method.
11424	(-storeJSONProfileInDB:): new method that handles the DB portion
11425	of primaryStoreProfile, providing a corollary to
11426	fetchJSONProfileFromDB.
11427
11428	* SoObjects/SOGo/SOGoCache.m (+initialize): the memcached host can
11429	now be configured using the "SOGoMemCachedHost" user default. The
11430	method now contains initialization code for global vars that used
11431	to be in -init instead.
11432	(-userSettingsForLogin:,-userDefaultsForLogin:,-userAttributesForLogin:):
11433	refactoring: those accessors now only return an NSString
11434	associated with their respective key. There is no longer any
11435	dictionary de-/serialization occuring in SOGoCache.
11436
11437	* SoObjects/SOGo/SOGoParentFolder.m (-subFolders): we raise the
11438	exceptions we get only if the current request is a PROPFIND. This
11439	avoids a useless restart of SOGo when the database is down during
11440	the execution of other requests.
11441
11442	* Tools/sogo-tool.m (main): we now check that the SOGo
11443	configuration is valid and consequently that the tool runs under
11444	the same account as SOGo.
11445
11446	* UI/Scheduler/UIxComponentEditor.m (-_handleAttendeeData): make
11447	direct use of the JSON constructor of NSDictionary rather than
11448	instantiating an NSScanner. This simplifies the code.
11449
114502009-11-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11451
11452	* SoObjects/SOGo/NSString+Utilities.m (-isJSONString): new utility
11453	method that determines whether the current string is a json
11454	document.
11455
11456	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.m
11457	(+dictionaryWithJSONString:): this constructor now explicitly
11458	returns an NSMutableDictionary to avoid messing with mutable
11459	copies and useless allocation/deallocation in the callers.
11460
11461	* Main/SOGo.m (+initialize): removed the "debugObjectAllocation" global
11462	variable since "debugLeaks" has the same meaning. Instantiate a
11463	"SOGoStartupLogger" object in order to avoid using NSLog when the
11464	parent process is starting, in order to work-around the caching of
11465	the pid in NSLog.
11466
114672009-11-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11468
11469	* SoObjects/SOGo/SOGoCache.m: "cache", "users" and "localCache"
11470	are now regular ivars. "sharedCache" is now located within the
11471	"sharedCache" constructor. "killCache" is now an instance method.
11472
114732009-11-10  Francis Lachapelle  <flachapelle@inverse.ca>
11474
11475	* UI/Scheduler/UIxComponentEditor.m (-_handleAttendeesEdition):
11476	avoid scanning JSON when there's no attendee.
11477
114782009-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11479
11480	* UI/SOGoUI/UIxComponent.m (-applicationPath): new method that
11481	really returns the name of the WO application.
11482	(-modulePath): renamed the old applicationPath method to be more
11483	accurate about its purpose.
11484
114852009-11-07  Ludovic Marcotte <lmarcotte@inverse.ca>
11486
11487	* SoObjects/SOGo/SOGoCache.m - if we get a JSON
11488	error when trying to convert our string coming
11489	from memcached, we don't store it to the cache
11490	and we log the error.
11491	* Modified the code so we always use lower-case
11492	headers prior to sending mails. This is to avoid
11493	an uber-lameness in SOPE. Also added warnings
11494	around that code so we can get rid of SOPE-mime,
11495	we'll do things cleanly.
11496
114972009-11-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11498
11499	* UI/WebServerResources/UIxPreferences.js (_setupEvents): we check
11500	whether "categoriesValue" resolves properly before assigning it
11501	a new value.
11502
115032009-11-05  Francis Lachapelle  <flachapelle@inverse.ca>
11504
11505	* Scripts/updates.php: Minor changes to support when PHP short_open_tag
11506	parameter is set to Off.
11507
11508	* UI/WebServerResources/ContactsUI.js (getMenus): activated the
11509	list creation option of the addresbooks contextual menu.
11510
11511	* UI/WebServerResources/SOGoRootPage.js (onFieldKeyDown): don't
11512	submit the form if no password is typed.
11513
115142009-11-04  Francis Lachapelle  <flachapelle@inverse.ca>
11515
11516	* Major refresh of CSS stylesheets.
11517	* UI/WebServerResources/SOGoAutoCompletion.js
11518	(performSearchCallback): fixed position of popup menu when used in
11519	the contacts list editor.
11520
115212009-11-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11522
11523	* SoObjects/SOGo/NSDictionary+Utilities.m
11524	(+dictionaryFromStringsFile:): instantiate autoreleased objects.
11525
11526	* SoObjects/SOGo/NSArray+Utilities.m (-jsonRepresentation):
11527	instantiate autoreleased objects.
11528
115292009-10-30  Francis Lachapelle  <flachapelle@inverse.ca>
11530
11531	* UI/WebServerResources/SchedulerUI.js: the events list is now
11532	refreshed in the AJAX callback. This avoid seeing an empty table
11533	while refreshing the events list.
11534
11535	* UI/WebServerResources/UIxPreferences.js
11536	(addDefaultEmailAddresses): fixed issue in vacation tab when
11537	adding the defaults values to a empty list.
11538
11539	* UI/WebServerResources/UIxComponentEditor.js
11540	(onComponentEditorClose): new method that closes definition popup
11541	windows associated to the event (attendees/recurrence/reminder).
11542
115432009-10-28  Francis Lachapelle  <flachapelle@inverse.ca>
11544
11545	* UI/Contacts/UIxContactView.m (-primaryEmail, -secondaryEmail):
11546	remove double-quotes from FN attribute to avoid JavaScript errors.
11547
11548	* UI/WebServerResources/UIxMailToSelection.js: removed duplicated
11549	functionality in addressFieldLostFocus. Removed the ability to set
11550	an auto-completion text field to read-only.
11551
11552	* UI/WebServerResources/UIxListEditor.js: refactoring.
11553
11554	* UI/WebServerResources/ContactsUI.js: Improved text of import
11555	cards dialog.
11556
11557	* UI/WebServerResources/SchedulerUI.js: Improved text of import
11558	events dialog.
11559
11560	* UI/Contacts/UIxListEditor.m (-setReferencesValue:): rewrote
11561	method since only the contacts IDs are received from the web
11562	interface. The names and emails are retrieve from the addressbook.
11563
11564	* SoObjects/Contacts/SOGoContactGCSFolder.m
11565	(-lookupContactWithName): new method that returns a dictionary
11566	with the attributes of a contact.
11567
11568	* SoObjects/Appointments/SOGoAppointmentObject.m
11569	(-changeParticipationStatus:withDelegate:forRecurrenceId:): added
11570	exception when delegated user is the organizer.
11571
115722009-10-28  Ludovic Marcotte  <lmarcotte@inverse.ca>
11573
11574        * UI/MailPartViewers/UIxMailPartICalActions.m
11575	(_setupChosenEventAndEventObject:) - we now
11576	correctly save the event contained in the mail
11577	when clicking on Accept/Decline/Delegate into
11578	the user's calendar if it's not in there already.
11579
115802009-10-27  Cyril Robert <crobert@inverse.ca>
11581
11582	* UI/Common/UIxPageFrame.m (userEmail): Added to display the user's email
11583	address in the linkBanner.
11584	* UI/Contacts/UIxListView.m
11585	(itemHref, itemName, itemEmail): Added to allow clickable email addresses in
11586	UIxListView.
11587	(itemText): Removed, no longer needed.
11588
115892009-10-27  Ludovic Marcotte  <lmarcotte@inverse.ca>
11590
11591        * SoObjects/SOGo/SOGoGCSFolder.m (create)
11592	We send the advisory to the owner of the newly
11593	created collection, not the currently logged on
11594	user (which might be different). The sender will
11595	nevertheless be the currently logged on user, as
11596	it's this particular user that triggered the
11597	creation of the collection.
11598	* Documentation/SOGo Installation Guide.odt
11599	Updated to set WOUseRelativeURLs to YES instead
11600	of NO by default.
11601	* We now correctly lowercase the SOGoLDAPContactInfoAttribute
11602	attribute everywhere.
11603
116042009-10-26  Francis Lachapelle  <flachapelle@inverse.ca>
11605
11606	* UI/WebServerResources/ContactsUI.js
11607	(onContactDeleteEventCallback): fixed retrieval of card name when
11608	deletion is not possible (caused by a possible bug in prototype.js).
11609	(setEventsOnAddressBook): don't observe the double-click event on
11610	addressbooks not owned by the user.
11611
116122009-10-25  Ludovic Marcotte  <lmarcotte@inverse.ca>
11613
11614        * Fixed many compilation warnings
11615	* Updated the Mobile Device Configuration Guide
11616	in order to document the iPhone OS 3.x configuration
11617	settings (iPhone / iPod)
11618	* UI/Scheduler/UIxComponentEditor.m (_handleCustomRRule:)
11619	Improved the robustness of the code.
11620
116212009-10-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
11622
11623        * Updated the Czech translation - patch from
11624	Milos Wimmer <wimmer@zcu.cz>
11625	* Added a French translation of the new Vacation
11626	and Forward preference tabs.
11627	* Updated the French translation in the
11628	Administration module.
11629	* Updated the French translation of the Calendar
11630	properties window.
11631	* Updated the French translation with regard to
11632	event delegation support.
11633	* UI/Scheduler/UIxCalListingActions.m
11634	We now handle BOOL as real BOOL when storing them
11635	in the prefs instead of going with NSNumber. No
11636	need to do that and our JSON generator/parser
11637	will handle this properly. This avoid a dump
11638	crash when toying with the "Show completed tasks"
11639	toggle in the calendar module.
11640
116412009-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11642
11643	* SoObjects/Contacts/SOGoContactSourceFolder.m
11644	(-initWithName:andDisplayName:inContainer:): use the source name
11645	when the displayname is nil.
11646
11647	* SoObjects/SOGo/SOGoUserManager.m (_registerSource:): added
11648	sanity checks and warnings to the user.
11649
116502009-10-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
11651
11652        * SoObjects/SOGo/SOGoUserFolder.m (-subFoldersFromFolder:)
11653	Addded a check to NOT return web calendars in this query.
11654
116552009-10-23  Francis Lachapelle  <flachapelle@inverse.ca>
11656
11657	* UI/MailerUI/UIxMailMainFrame.m (-formattedMailtoString:): fixed
11658	the case when dealing with a NGVCardReference (from a list) with
11659	no FN attribute and no N attribute.
11660	(-composeAction): fixed the case when dealing with a contact with
11661	no email address.
11662	(-composeAction): fixed the case when dealing with a contact from
11663	an LDAP source.
11664
11665	* UI/Scheduler/UIxComponentEditor.m (-calendarList): added proper
11666	verification of deletion rights on the current calendar and
11667	creation rights on other calendars.
11668
116692009-10-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
11670
11671	* SoObjects/SOGo/SOGoUserManager.m
11672	Modified so that we throw a warning when there are
11673	no authentication sources defined.
11674
11675	* Updated all guides in preparation for the release.
11676
116772009-10-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11678
11679	* SoObjects/Appointments/SOGoAppointmentFolder.m
11680	(-davCalendarTimeZone): new DAV accessor that returns the
11681	user's timezone.
11682
11683	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
11684	(-davCalendarScheduleInboxURL, davCalendarScheduleOutboxURL):
11685	return nil if used with iCal 4.
11686
11687	* SoObjects/SOGo/SOGoContentObject.m (-davResourceType): removed
11688	useless method.
11689
11690	* SoObjects/SOGo/SOGoObject.m (-davURLAsString): new method that
11691	returns the resource url as a string, by taking WOUseRelativeURLs
11692	into account.
11693
11694	* SoObjects/SOGo/WORequest+SOGo.m (-isICal4): new method that
11695	determines whether to work-around iCal4 calamities.
11696
116972009-10-21  Francis Lachapelle  <flachapelle@inverse.ca>
11698
11699	* UI/Scheduler/UIxCalListingActions.m
11700	(-_loadScheduleLimitsForUsers:): we must not consider users not
11701	part of the system (no uid).
11702
11703	* UI/WebServerResources/UIxAttendeesEditor.js
11704	(redisplayFreeBusyZone): removed logic around start/end
11705	minutes. It was breaking the display of an event spanning multiple days.
11706
117072009-10-20  Ludovic Marcotte  <lmarcotte@inverse.ca>
11708
11709	* Added missing timezones
11710	* SoObjects/SOGo/SOGoParentFolder.m:
11711	-davCreateCollection:inContext:
11712	We check, prior to creating the resource, if
11713	where we create it is a supported target.
11714	* SOPE/NGCards/iCalTimeZonePeriod.m
11715	-_occurenceForDate:byRRule:
11716	We correctly compute the number of shifting days
11717	during DST changes.
11718
117192009-10-19  Francis Lachapelle  <flachapelle@inverse.ca>
11720
11721	* SoObjects/SOGo/NSCalendarDate+SOGo.m: lower the values of
11722	secondsOfDistantFuture and secondsOfDistantPast to solve a problem
11723	with 64bit environment.
11724
11725	* UI/Scheduler/UIxAppointmentEditor.m
11726	(-startDateIsEqualToEndDate): new method that returns whether or
11727	not the start date is identical to the end date (used for all-day events).
11728
117292009-10-19  Ludovic Marcotte  <lmarcotte@inverse.ca>
11730
11731	* SoObjects/Appointments/SOGoAppointmentObject.m
11732	(saveComponent:) - in case of an update, we check
11733	if no organizer was specified when handling
11734	attendees addition to the event.
11735
117362009-10-17  Ludovic Marcotte  <lmarcotte@inverse.ca>
11737
11738	* UI/WebServerResources/UIxListEditor.js (endEditable):
11739	We use "uname" instead of "name" when reading back the
11740	values from the autocompletion code.
11741
117422009-10-16  Francis Lachapelle  <flachapelle@inverse.ca>
11743
11744	* UI/WebServerResources/SchedulerUI.js (eventsListCallback): don't
11745	set the hour attribute for all-day events.
11746	(changeCalendarDisplay): enable auto-scroll when scrolling
11747	to an event (!).
11748	(refreshCalendarEventsCallback): idem.
11749	(scrollDayView): don't scroll when selecting an all-day event.
11750
11751	* UI/Scheduler/UIxComponentEditor.m (-_loadRRules): the repeat
11752	rule interval can be set unconditionally for weekly rules. When an
11753	end date or repeat count is defined, the rule must be considered
11754	"custom" in the web interface.
11755	(_handleCustomRRule:): fixed a bug that would set a day mask even
11756	when it was not defined. The day mask is optional in the RRULE definition.
11757
117582009-10-15  Cyril Robert <crobert@inverse.ca>
11759
11760	* SoObjects/Appointments/SOGoAppointmentFolders.m
11761	(+webdavAclManager): Added to fix issues with iPhones (3.1.2)
11762	* SoObjects/Appointments/SOGoAppointmentFolder.m
11763	(+webdavAclManager): Changed write-properties and write-content to
11764	non-abstract, and set the equivalent for write-content to
11765	SoPerm_AddDocumentsImagesAndFiles
11766	* SoObjects/SOGo/SOGoWebDAVAclManager.m (-copyWithZone:): Added to allow
11767	object copy (useful for SOGoAppointmentFolders)
11768
117692009-10-15  Ludovic Marcotte  <lmarcotte@inverse.ca>
11770
11771        * Added SOPE/NGCards/TimeZones/* - generated from
11772	the official Olson databases. This is to allow SOGo
11773	to include VTIMEZONE components on _new_ events or
11774	tasks, which fix the problem we had with
11775	recurring events over DST changes.
11776	* SOPE/NGCards/iCalTimeZone.m
11777	Introduced a cache for timezone files and added
11778	a method to get it based on its name
11779	* UI/Scheduler/UIxAppointmentEditor.m
11780	UI/Scheduler/UIxTaskEditor.m
11781	Modified the event/task editor to properly
11782	add the timezone component for new events/tasks
11783	* Updated the sogo.spec file to include the
11784	new timezone files.
11785
117862009-10-15  Francis Lachapelle  <flachapelle@inverse.ca>
11787
11788	* UI/WebServerResources/AdministrationUI.js (help): new function
11789	to display the help from the toolbar instead of the module title.
11790
117912009-10-15  Ludovic Marcotte  <lmarcotte@inverse.ca>
11792
11793	* UI/MailerUI/UIxMailAccountActions.m
11794	We check if the server supports quota prior to asking for
11795	the value. The patchset has also been updated for faster
11796	access of the server's capabilities.
11797
117982009-10-14  Francis Lachapelle  <flachapelle@inverse.ca>
11799
11800	* UI/PreferencesUI/UIxPreferences.m (-defaultEmailAddresses): new
11801	method that returns a string representation of all the user's
11802	email addresses.
11803
11804	* UI/WebServerResources/UIxPreferences.js
11805	(addDefaultEmailAddresses): new function that make sure all of the
11806	user's default email addresses appear in the addresses textarea of
11807	the vacation tab.
11808
11809	* UI/WebServerResources/SchedulerUI.js (changeCalendarDisplay):
11810	don't highlight the day selection when in the day view.
11811	(eventsListCallback): don't popup event window when
11812	double-clicking on D&T events in the top list of the calendar module.
11813
11814	* UI/Scheduler/UIxCalListingActions.m (_fixDates:): start/end
11815	dates must be adjust for DST only when dealing with the day based
11816	view. No change is required for the month view, except for the
11817	recurrence IDs.
11818
11819	* UI/Scheduler/UIxComponentEditor.m (-getEventRWType): the user
11820	is not an attendee when dealing with web calendars.
11821	(-_toolbarForOwner:andClientObject:): no toolbar should appear
11822	when dealing with web calendars.
11823
118242009-10-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
11825
11826	* UI/Scheduler/UIxCalMainActions.m
11827	We store the string value of the URL in our
11828	prefs, not the NSURL instance.
11829
118302009-10-13  Ludovic Marcotte  <lmarcotte@inverse.ca>
11831
11832	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.m
11833        Fixed the objCType comparison on GNUstep for boolean
11834        values - we must consider 'c' and 'C'.
11835        * SoObjects/SOGo/SOGoCache.m
11836        Introduce a localCache static variable to avoid going
11837        to memcached all the time. We'll cache values during
11838        the request and flush them after.
11839        * SoObjects/SOGo/SOGoUser.m
11840        Modified -userDefaults to set the timezone when prefs
11841        have first been set.
11842        * SoObjects/SOGo/SOGoUserDefaults.m
11843        Reworked the logic in order to use the correct UPDATE/INSERT
11844        statement when prefs exist or not. Also cleaned up the
11845        types definition.
11846        * UI/PreferencesUI/UIxPreferences.m
11847        Removed worthless NSLog() call.
11848
118492009-10-13  Francis Lachapelle  <flachapelle@inverse.ca>
11850
11851	* UI/WebServerResources/MailerUI.js (-ICalendarButtonCallback):
11852	delegate the execution of this method to the parent when called
11853	from a popup window. This way, popups are properly reloaded when necessary.
11854
11855	* SoObjects/Appointments/SOGoAppointmentObject.m (-
11856	_handleAttendee:withDelegate:ownerUser:statusChange:inEvent:):
11857	added proper initialization of variable.
11858
118592009-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11860
11861	* UI/Scheduler/UIxComponentEditor.m (-setComponent:): we invoke
11862	_loadAttendee only when "jsonAttendees" is not set, even though
11863	that condition should always be true.
11864
11865	* UI/PreferencesUI/UIxPreferences.m (-setCategoriesValue): we use
11866	[self errorWithFormat:] rather than NSLog to output
11867	deserialization errors.
11868
11869	* UI/Scheduler/UIxAppointmentEditor.m (-delegateAction): same as
11870	below.
11871
11872	* UI/MailPartViewers/UIxMailPartICalActions.m (-delegateAction):
11873	delegatedAttendee is autoreleased to avoid a leak.
11874
11875	* SoObjects/SOGo/LDAPSource.m (-dealloc): we release the
11876	"searchAttributes" ivar, even though LDAPSource instances are
11877	never deallocated.
11878
11879	* SoObjects/Mailer/SOGoMailObject+Draft.m (-contentForEditing):
11880	"keys" must be autoreleased to avoid a leak.
11881
11882	* UI/Common/UIxAclEditor.m (-setUserUIDs): we need to retain the
11883	array of user ids to avoid a zombie.
11884
11885	* UI/Common/UIxPageFrame.m (-dealloc): we release
11886	additionalCSSFiles to avoid a leak.
11887
118882009-10-12  Ludovic Marcotte  <lmarcotte@inverse.ca>
11889
11890	* Updated patchset to support properly windows-1250
11891	charset instead of fallbacking stupidly to iso-8859-1
11892	* Updated version number to 1.1.0
11893	* Fixed type for the "Administration" module
11894
118952009-10-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11896
11897	* UI/MailPartViewers/UIxMailPartICalActions.m (-_emailEvent):
11898	"eventString" is now released to avoid a leak.
11899
11900	* UI/MailPartViewers/UIxMailPartHTMLViewer.m (-dealloc): ignoreTag
11901	is released, to avoid a leak if the HTML content was not compliant.
11902
11903	* UI/Contacts/UIxListView.m (-checkListReferences): the copy of
11904	"card" must be released once put in the "invalid" array, in order
11905	to avoid a leak.
11906
11907	* Main/SOGo.m (-init): released "rm" when no longer needed.
11908	(-dispatchRequest:): simplified leak catching code.
11909
119102009-10-09  Francis Lachapelle  <flachapelle@inverse.ca>
11911
11912	* UI/PreferencesUI/UIxPreferences.m (+initialize, -init,
11913	-isVacationEnabled, -setEnableVacation:, -enableVacation,
11914	-setAutoReplyText:, -autoReplyText, -setAutoReplyEmailAddresses:,
11915	-autoReplyEmailAddresses, -daysBetweenResponsesList,
11916	-setDaysBetweenResponses:, -daysBetweenResponses,
11917	-setIgnoreLists:. -ignoreLists, -isForwardEnabled,
11918	-setEnableForward:, -enableForward, -setForwardAddress:,
11919	-forwardAddress, -setForwardKeepCopy:, -forwardKeepCopy): added
11920	web elements to set an auto-reply message and forward address in
11921	the preferences window.
11922	(-inTheOffice, setInTheOffice:): removed useless methods.
11923
119242009-10-08  Ludovic Marcotte  <lmarcotte@inverse.ca>
11925
11926	* Added filters support (Vacation and Forward) which
11927	can be enabled using the SOGoVacationEnabled and
11928	SOGoForwardEnabled defaults. One Sieve right now is
11929	support and we assume the Sieve server is the same
11930	as the IMAP server, running on port 2000.
11931	* Cleaned up everything related to the old Sieve stuff
11932	which was now useless with our new implementation.
11933
119342009-10-08  Francis Lachapelle  <flachapelle@inverse.ca>
11935
11936	* UI/PreferencesUI/UIxPreferences.m (-shortDateFormatsList): added
11937	"default" option.
11938	(-itemShortDateFormatText): added formatting for "default" option.
11939	(-userShortDateFormat): falls back to "default" if not set for the user.
11940	(-setUserShortDateFormat): removes user default if set to
11941	"default".
11942	(-longDateFormatsList, -itemLongDateFormatText,
11943	-userLongDateFormat, -setUserLongDateFormat): new "default" option
11944	support, like for the short date format.
11945	(- timeFormatsList, -itemTimeFormatText, -setUserTimeFormat): new
11946	"default" option support, like for the short date format.
11947
119482009-10-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
11949
11950	* SoObjects/SOGo/LDAPSource.m (-_searchAttributes): we already
11951	have knowledge of the LDAPContactInfoAttribute so we no longer
11952	need to fetch it from the user defaults.
11953
11954	* SoObjects/Contacts/SOGoContactLDIFEntry.m
11955	(-initWithName:withLDIFEntry:inContainer:): we no longer retain
11956	"container" in order to avoid a leak.
11957	(-vCard): we now use the "VCARD" profile, all in upper case. We
11958	first resolve the full name using "c_cn", which is the special key
11959	used by the LDAP sources to access the fullname attribute.
11960
11961	* Tests/webdavlib.py (MailDAVMailQuery._initSort): now handles the
11962	"order" attribute from the "ascending" parameter.
11963
11964	* Tests/test-maildav.py (DAVMailCollectionTest._testSort): added a
11965	boolean "ascending" parameter that defaults to True.
11966	(DAVMailCollectionTest.testREPORTMailQueryFilters): method
11967	replacing the filter part of testREPORTMailQuery.
11968	(DAVMailCollectionTest.testREPORTMailQuerySort): method
11969	replacing the sort part of testREPORTMailQuery.
11970
11971	* SoObjects/Mailer/SOGoMailFolder.m (_sortElementIsAscending:):
11972	new method that determines whether the sort ordering is ascending
11973	or not.
11974	(_sortOrderingsFromSortElement:): new method relacing
11975	"_mailSortingFromSortElement:", that returns an array of
11976	EOSortOrdering instances based on the "sort" element passed as
11977	parameter.
11978
119792009-10-07  Cyril Robert <crobert@inverse.ca>
11980
11981	* SoObjects/Mailer/EOQualifier+MailDAV.m
11982	(buildQualifierFromFilters:): Now returns an EOQualifier, fixed
11983	qualifier formats and constructor, refactored to regroup code.
11984	* Tests/test-maildav.py (testREPORTMailQuery): Disabled a few
11985	tests that don't pass for now.
11986	* SoObjects/Mailer/EOQualifier+MailDAV.m (buildQualifierFromFilters:):
11987	Removed, everything is now done in (qualifierFromMailDAVMailFilters:).
11988	(qualifierFromMailDAVMailFilters:): Removed all parentheses in
11989	qualifier.
11990	* SoObjects/Mailer/EOQualifier+MailDAV.m
11991	(qualifierFromMailDAVMailFilters:): Fixed segfault when there are
11992	no filters.
11993
119942009-10-07  Francis Lachapelle  <flachapelle@inverse.ca>
11995
11996	* UI/Scheduler/UIxCalListingActions.m
11997	(-_fetchFields:forComponentOfType:): the _fixDate method must not
11998	be called when in the month view.
11999
120002009-10-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12001
12002	* Tests/webdavlib.py (MailDAVMailQuery._initSort): we now accept
12003	multiple sort parameters.
12004
12005	* Tests/test-maildav.py (DAVMailCollectionTest._testSort): new
12006	method to test sorting messages.
12007	(DAVMailCollectionTest.testREPORTMailQuery): added some tests for
12008	"SORT".
12009
12010	* SoObjects/SOGo/SOGoParentFolder.m (-hasLocalSubfolderNamed):
12011	rewritten parts of the method to better fit our coding standards.
12012	Exported method in the SOGoParentFolder.h to avoid warnings where
12013	it's used.
12014
12015	* SoObjects/Appointments/SOGoAppointmentFolders.m
12016	(_fetchPersonalFolders:withChannel:): we now skip unexisting
12017	folders declared in the list of web folder ids to avoid problems.
12018	When such id is found, it is also reported in the logs to inform
12019	the administrator of this inconsistency.
12020
120212009-10-06  Cyril Robert <crobert@inverse.ca>
12022
12023	* SoObjects/Mailer/EOQualifier+MailDAV.m (_formattedDate:): New method to
12024	format a date correctly for imap search qualifiers.
12025	(buildQualifierFromFilters:): Fixed selectors in qualifier strings, and
12026	fixed date formatting.
12027	* SoObjects/Mailer/SOGoMailFolder.m
12028	(_fetchMessageProperties:matchingQualifier:andSorting:): Implementation.
12029	(_davPropstatsWithProperties:andMethodSelectors:fromMessage:): Implementation.
12030	(_appendProperties:fromMessages:toResponse:): Implementation.
12031
120322009-10-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12033
12034	* SoObjects/Mailer/SOGoMailFolder.m (_appendMessageData:usingId):
12035	we no longer need to unselect the folder where the "append"
12036	happens since it worked around a deeper bug in sope-mime which has
12037	been fixed in the patchset.
12038
12039	* SoObjects/SOGo/SOGoGCSFolder.m
12040	(-createChildComponentWithRecord:): made method public.
12041	(-createChildComponentWithName:andContent:): made method public.
12042
12043	* SoObjects/SOGo/NSArray+DAV.m (-asDAVPropstatWithStatus:): new
12044	method that creates a "PROPSTAT" element with the specified
12045	status.
12046
120472009-10-06  Francis Lachapelle  <flachapelle@inverse.ca>
12048
12049	* SoObjects/SOGo/SOGoUser.m (_timeValue): improved parsing to
12050	support single integers (not only the XY:00 form).
12051	(-timeFormat): returns the user's time format or system
12052	(SOGoTimeFormat) default if not defined.
12053	(-replyPlacement): honor the system defaults (SOGoMailReplyPlacement).
12054	(-signaturePlacement): honor the system defaults
12055	(SOGoMailSignaturePlacement).
12056	(-messageForwarding): honor the system defaults (SOGoMailMessageForwarding).
12057
12058	* SoObjects/Mailer/SOGoMailObject+Draft.m (-contentForReply):
12059	reply and signature placement properly honors system defaults
12060	(SOGoMailReplyPlacement and SOGoMailSignaturePlacement).
12061
12062	* UI/PreferencesUI/UIxPreferences.m (-userTimeFormat): honor the
12063	system defaults through the SOGoUser class.
12064	(-userDayStartTime): idem.
12065	(-userDayEndTime): idem.
12066	(-userMessageForwarding): idem.
12067	(-repyPlacement): idem.
12068	(-signaturePlacement): idem.
12069
12070	* UI/Scheduler/UIxCalDayTable.m (-hoursToDisplay): honor the
12071	system defaults through the SOGoUser class.
12072
12073	* UI/WebServerResources/UIxPreferences.js (-initPreferences): fix
12074	to properly set the initial status of the signature placement
12075	select field.
12076
120772009-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12078
12079	* Tests/test-maildav.py (DAVMailCollectionTest._testFilter): fixed
12080	to use the "test-dav-mail" folder name as collection during the
12081	tests.
12082
12083	* SoObjects/Mailer/SOGoMailFolder.m (-davMailQuery): new method
12084	implementing the "mail-query" REPORT for Inverse's maildav
12085	protocol.
12086	(-parseDAVRequestedProperties:): new method making use of the
12087	"davIMAPFieldsTable" method below for parsing fields in the
12088	mail-query request.
12089	(-_mailSortingFromSortElement:): new method to parse the "sort"
12090	element of mail-query requests.
12091	(-_fetchMessageProperties:matchingQualifier:andSorting:): new
12092	stub for a method that will fetch the IMAP messages based on the
12093	criteria found above.
12094	(-_appendProperties:fromMessages:toResponse:) new stub for a
12095	method that will add the content of the resulting set of message
12096	properties to the DAV response.
12097
120982009-10-05  Cyril Robert <crobert@inverse.ca>
12099
12100	* SoObjects/Mailer/SOGoMailFolder.m (-davIMAPFieldsTable): new
12101	method designed to match maildav properties on mail objects with
12102	IMAP fields, for PROPFIND and REPORT methods.
12103
12104	* Tests/test-webdavlib.py: Added new tests for the URL parser / regexp.
12105
12106	* Tests/webdavlib.py: Fixed errors in the URL regexp.
12107
12108	* SoObjects/Mailer/EOQualifier+MailDAV.m: New category to generate IMAP
12109	qualifiers from DAV filters. (REPORT)
12110	(buildQualifierFromFilters:): Formatted dates using [NSCalendarDate
12111	rfc822DateString]. Added NOT and extra fields.
12112
121132009-10-04  Ludovic Marcotte  <lmarcotte@inverse.ca>
12114
12115        * Adjusted the Welsh and Dutch templates for
12116	mail invitations - we were missing classes resulting
12117	in crashers.
12118
121192009-10-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12120
12121	* Tests/webdavlib.py (MailDAVMailQuery): new class that implements
12122	the "mail-query" DAV REPORT.
12123	(WebDAVQuery._initProperties): new helper methods invoked by
12124	PROPFIND and REPORT classes at initialization to format the "prop"
12125	part of their query.
12126	(HTTPUnparsedURL._parse): accept more valid URL characters.
12127
12128	* Tests/test-maildav.py
12129	(DAVMailCollectionTest.testREPORTMailQuery): new method with
12130	initial tests for "mail-query" report.
12131
121322009-10-01  Cyril Robert <crobert@inverse.ca>
12133
12134	* SoObjects/Mailer/SOGoMailObject.m: Added methods required for PROPFIND /
12135	REPORT: _fetchProperty:, _hasFlag:, _emailAddressesFrom:, davDate,
12136	hasAttachment, read, textDescription, cc, from, inReplyTo, messageId,
12137	received, references, davDisplayName, to
12138	* Tests/test-maildav.py (testPROPFIND): Added tests for the new MailDAV
12139	PROPFIND.
12140	* UI/PreferencesUI/UIxPreferences.m (languages, language, setLanguage:,
12141	languageText): Added to support changing the language from the Preferences
12142	dialog.
12143
121442009-10-01  Cyril Robert  <crobert@inverse.ca>
12145
12146	* SoObjects/Mailer/SOGoMailFolder.m
12147	(-appendMessage:inContext:usingId:): we no longer instantiate the
12148	message to check whether it exists since we trust the fact that we
12149	would receive an error from NGImap if the creation failed.
12150
121512009-10-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12152
12153	* Tests/test-webdavlib.py: new test script for testing the
12154	webdavlib library itself.
12155	(HTTPUnparsedURLTest.testURLParse): new test case for the new
12156	HTTPUnparsedURL class.
12157
12158	* Tests/webdavlib.py (HTTPUnparsedURL): new utility class for
12159	consistently parsing url strings
12160
12161	* Tests/test-maildav.py (DAVMailCollectionTest.testPUT): fixed to
12162	delete the test collection prior to the test
12163
12164	* SoObjects/Appointments/SOGoAppointmentFolders.m
12165	(-proxyFoldersWithWriteAccess:): return an autoreleased
12166	"proxyFolders" to avoid a leak.
12167
12168	* Tests/test-maildav.py (DAVMailCollectionTest._putMessage):
12169	messages have "message/rfc822" mime-type.
12170	(DAVMailCollectionTest.setUp): use servername
12171
121722009-09-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12173
12174	* SoObjects/SOGo/LDAPSource.m (-init): removed "ldapConnection"
12175	ivar, since we now always use it as an autoreleased local value.
12176	(-_ldapConnection): modified implementation of
12177	"_initLDAPConnection" that now returns an autoreleased instance of
12178	NGLdapConnection or nil.
12179
12180	* UI/MailerUI/UIxMailMainFrame.m (-_setupContext): if
12181	"moduleSettings" is non-nil, we don't reset it in the user
12182	defaults.
12183	(-composeAction): autorelease "addresses" to avoid a leak.
12184
121852009-09-29  Cyril Robert <crobert@inverse.ca>
12186
12187	* SoObjects/Mailer/SOGoMailFolder.m (PUTAction:, _appendMessageData:usingId:):
12188	Added new methods to enable MailDAV PUT on a collection.
12189	* SoObjects/Mailer/SOGoMailBaseObject.m (IMAP4IDFromAppendResult:): Moved
12190	here, since SOGoDraftObject and SOGoMailFolder need it.
12191	* SoObjects/Mailer/SOGoDraftObject.m (_IMAP4IDFromAppendResult): Removed,
12192	replaced by [SOGoMailBaseObject IMAP4IDFromAppendResult:].
12193	* SoObjects/SOGo/SOGoObject.m: Changed file extension from "mail" to "eml".
12194	* SoObjects/Mailer/SOGoMailAccount.m: Added accountName to fix errors in MailDAV.
12195	* SoObjects/Mailer/SOGoMailAccounts.m: Added management for account names
12196	to fix errors in MailDAV.
12197	* SoObjects/Mailer/SOGoMailFolder.m (appendMessage:): Added this method to
12198	facilitate the PUT from a SOGoMailObject.
12199	* SoObjects/Mailer/SOGoMailObject.m (PUTAction:): Added to enable MailDAV
12200	PUT on a non-existing object.
12201	* UI/MailerUI/UIxMailMainFrame.m (mailAccounts): Changed the return value to
12202	include both the account name and display name.
12203	* UI/MailerUI/UIxMailMainFrame.m: Fixed an error when composing from the
12204	Address Book module.
12205
122062009-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12207
12208	* SoObjects/SOGo/SOGoObject.m (SOGoSelectorForPropertyGetter)
12209	(SOGoSelectorForPropertySetter): fixed a case where propSel should
12210	be initialized to NULL.
12211
12212	* SoObjects/SOGo/SOGoGroup.m (-members): we now cache the array of
12213	members as an ivar.
12214	(-hasMemberWithUID): new self-explicit method.
12215
12216	* SoObjects/SOGo/SOGoGCSFolder.m
12217	(_fetchAclsForUser:forObjectAtPath:): refactored method to make it
12218	actually work for group searches, without unitialized data and to
12219	clarify code.
12220
12221	* SoObjects/SOGo/SOGoObject.m
12222	(_urlPreferringParticle:overThisOne:): instead of risking
12223	confusion between SOPE, NSURL and friends, we revert this change
12224	(see below) and choose other ways to avoid escaping of "@", "%",
12225	etc...
12226
12227	* SoObjects/SOGo/NSString+Utilities.m (-stringByEscapingURLPart):
12228	(revert) removed useless method.
12229
122302009-09-28  Cyril Robert <crobert@inverse.ca>
12231
12232	* SoObjects/Appointments/SOGoAptMailInvitation.m: Added Spanish definition.
12233	* SoObjects/Appointments/SOGoAptMailICalReply.m: Added Spanish definition.
12234	* SoObjects/Appointments/SOGoAptMailDeletion.m: Added Spanish definition.
12235	* SoObjects/Appointments/SOGoAptMailUpdate.m: Added Spanish definition.
12236	* SoObjects/SOGo/NSString+Utilities.m (stringByEscapingURLPart): Added to
12237	fix the URL parts for MailDAV
12238	* SoObjects/Mailer/SOGoMailAccount.m (toManyRelationshipKeys): Added the
12239	"folder" prefix for MailDAV compatibility.
12240	* SoObjects/SOGo/SOGoObject.m (_urlPreferringParticle:): Fixed URL escaping
12241	to make paths work in MailDAV.
12242
122432009-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12244
12245	* SoObjects/SOGo/SOGoUser.m (+initialize): avoid a crash when
12246	SOGoProfileURL is not set.
12247
122482009-09-27  Ludovic Marcotte  <lmarcotte@inverse.ca>
12249
12250	* Reworked the UIxMailPartSignedViewer to inherit
12251	from UIxMailPartMixedViewer.
12252	* UI/WebServerResources/SchedulerUI.js
12253	We allow empty calendar imports.
12254	* Avoid assumptions for .ics presence on URL
12255	subscriptions.
12256
122572009-09-25  Ludovic Marcotte  <lmarcotte@inverse.ca>
12258
12259	* Renamed SoObjects/Contacts/SOGoContactLDAPFolder to
12260	SoObjects/Contacts/SOGoContactSourceFolder
12261	* Renamed SoObjects/SOGo/LDAPUserManager to
12262	SoObjects/SOGo/SOGoserManager.m
12263	* Added SoObjects/SOGo/SOGoSource.h and
12264	SoObjects/SOGo/SQLSource.{h,m}
12265	We now support authentication and address book sources
12266	coming from a SQL database. This can be used concurrently
12267	with LDAP sources. Modified many classes to reflect this
12268	change.
12269	* SoObjects/SOGo/LDAPSource.m
12270	We trim the bind field value prior to adding it to our
12271	LDAP search filter.
12272	* UI/MailPartViewers/UIxMailPartSignedViewer.m and friends:
12273	We now show more information on the S/MIME encoded messages.
12274	We also handle correctly multipart/alternative messages.
12275
122762009-09-24  Cyril Robert <crobert@inverse.ca>
12277
12278	* SoObjects/Appointments/SOGoAppointmentFolder.m (bareFetchFields:): Handled
12279	the Exception when all conditions are nil.
12280	* SoObjects/Contacts/NGVCard+SOGo.m (ldifString): Made corrections
12281	reflecting from the fixes in NGVCard to properly format an address.
12282
122832009-09-23  Cyril Robert <crobert@inverse.ca>
12284
12285	* SoObjects/Appointments/SOGoAppointmentFolder.m (importComponent:): Fixed
12286	addition of BEGIN/END block.
12287	* SoObjects/Appointments/SOGoWebAppointmentFolder.m (deleteAllContent):
12288	Created deleteAllContent to be able to change it in the store bundle.
12289	* UI/Scheduler/UIxCalMainActions.m (addWebCalendarAction): Small improvement.
12290
122912009-09-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12292
12293	* UI/WebServerResources/SOGoAutoCompletion.js
12294	(SOGoAutoCompletionInterface.onKeyDown): (needs review) we don't
12295	overwrite the input's name attributes with the "uname". Otherwise
12296	the form will not have the correct data when submitted and the
12297	to/cc/bcc fields will be ignored.
12298
122992009-09-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
12300
12301	* UI/PreferencesUI/UIxPreferences.m
12302	We now fallback to the default system selected day.
12303
123042009-09-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
12305
12306        * Updated the documentation for the Invisible -> Flagged
12307	mail column change.
12308	* SoObjects/Contacts/NGVCard+SOGo.m - better error-handling.
12309
123102009-09-22  Cyril Robert <crobert@inverse.ca>
12311
12312	* UI/Scheduler/UIxCalFolderActions.m (exportAction): Used
12313	bareFetchFields from SOGoAppointmentFolder instead of fetchFields
12314	from SOGoGCSFolder.
12315
123162009-09-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12317
12318	* SoObjects/Mailer/SOGoMailObject.m (-fetchPlainTextParts:):
12319	handle the fact that the "fetch" key in a RawResponse (NGHashMap)
12320	may not be the only response. Since [NGHashMap objectForKey:]
12321	returns only the first one, we use the new "flattenedDictionaries"
12322	to make sure we can retrieve all requested keys.
12323
12324	* SoObjects/SOGo/NSArray+Utilities.m (-flattenedDictionaries): new
12325	method that merges the keys and values of all contained
12326	dictionaries into one single dictionary.
12327
12328	* Tests/webdavlib.py (_WD_XMLTreeElement.__init__): added a new
12329	optional parameter "attributes" that enables the setting of
12330	element attributes during the rendering of the element.
12331
12332	* Tests/webdavlib.py (CalDAVCalendarQuery): new subclass of
12333	WebDAVReport that handles "calendar-query" reports.
12334
12335	* UI/MailerUI/UIxMailListView.m (+initialize): new method
12336	initialized the two new global NSArray: defaultColumnOrder
12337	(hardcoded values), udColumnOrder (system default values).
12338	(-columnsDisplayOrder): we now cache the resulting set of keys.
12339	We also test for the presence of invalid keys by comparing the
12340	configured array with the hardcoded one above.
12341	(-setCurrentColumn:, currentColumn): new accessors.
12342
123432009-09-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
12344
12345	*  SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m
12346	Avoid lameness when handling QP-encoded content.
12347
123482009-09-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12349
12350	* UI/WebServerResources/MailerUI.js (updateMailboxTreeInPage):
12351	we assign the "quotaIndicator" to the quota DIV and when replacing
12352	it, we ensure the DIV doesn't already exists.
12353
123542009-09-21  Cyril Robert <crobert@inverse.ca>
12355
12356	* UI/Scheduler/UIxCalMainActions.m (displayNameForUrl:): The calendar's
12357	display name is extracted from the URL for web calendars.
12358	* UI/Scheduler/UIxCalendarProperties.m (webCalendarURL, isWebCalendar):
12359	Added new methods to display a web calendar's url in the properties dialog.
12360
123612009-09-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
12362
12363        * Updated the contact import text to be more
12364	precise with regard to support input formats.
12365
123662009-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12367
12368	* SoObjects/SOGo/SOGoUserDefaults.m
12369	(-initWithTableURL:uid:fieldName:): removed the "shouldPropagete"
12370	parameter.
12371	(-primaryStoreProfile): we now propagate the values in the cache
12372	unconditionally.
12373
12374	* SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:):
12375	the trust no longer prevent user settings and defaults to
12376	propagate in the cache, since we no longer use gdnc for it.
12377
123782009-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12379
12380	* UI/WebServerResources/generic.js (onLoadHandler): don't trigger
12381	the alarm refresh if the "calendarBannerLink" link is not
12382	available (when calendar is disabled).
12383
12384	* UI/WebServerResources/UIxPreferences.js (initPreferences)
12385	(savePreferences): don't bother with the categoriesList if it's
12386	not accessible (when calendar is disabled).
12387
123882009-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12389
12390	* Tests/test-config.py: new functional test to validate the test
12391	configuration file.
12392
12393	* UI/PreferencesUI/UIxPreferences.m (-userComposeMessagesType):
12394	return a default value of @"text" if the default compose type has
12395	never been changed by the user. Otherwise, saving the preferences
12396	will never enable the window to be closed since the new value will
12397	always be different from nil.
12398
123992009-09-17  Cyril Robert <crobert@inverse.ca>
12400
12401	* UI/Contacts/UIxListEditor.m: Renamed "name" to "listName"
12402
124032009-09-16  Ludovic Marcotte  <lmarcotte@inverse.ca>
12404
12405	* Updated the ICS import text to be more specific
12406	* We now warn for no SSL bundle in GNUstep when
12407	trying to load a remote ICS file and it's failing
12408	over SSL. It's a guess but it's better than nothing.
12409
124102009-09-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12411
12412	* SoObjects/SOGo/SOGoGCSFolder.m (-lookupName:inContext:acquire:):
12413	instanciated objects may be queried twice during the same session,
12414	before being saved into the database. Therefore we cache them to
12415	avoid losing their version number.
12416
12417	* UI/WebServerResources/AdministrationUI.js,
12418	UI/WebServerResources/ContactsUI.js,
12419	UI/WebServerResources/MailerUI.js,
12420	UI/WebServerResources/MailerUIdTree.js,
12421	UI/WebServerResources/SchedulerUI.js,
12422	UI/WebServerResources/UIxAclEditor.js,
12423	UI/WebServerResources/UIxCalendarProperties.js,
12424	UI/WebServerResources/UIxComponentEditor.js,
12425	UI/WebServerResources/UIxContactsUserFolders.js,
12426	UI/WebServerResources/UIxMailEditor.js,
12427	UI/WebServerResources/UIxPreferences.js,
12428	UI/WebServerResources/UIxTaskEditor.js,
12429	UI/WebServerResources/generic.js: renamed the function "label" to
12430	"getLabel" to avoid overriding local function variables.
12431
124322009-09-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12433
12434	* UI/WebServerResources/MailerUI.js (configureLoadImagesButton):
12435	retrieve all "img" elements with an "unsafe-src" attribute and
12436	remember them in an array attached to $("messageContent"). We also
12437	void using "delete" on the stored array because IE 7 is too dumb.
12438
12439	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
12440	(-startElement:namespace:rawName:attributes:): treat tag names as
12441	lowercase (xhtml compliance). Replace all "src" tagnames with
12442	"unsafe-src" for distant images. No longer take an "unsafe" url
12443	parameter into account.
12444
12445	* UI/MailPartViewers/UIxMailPartSignedViewer.[hm]: new module
12446	class that implements the viewer for multipart/signed messages.
12447
12448	* UI/WebServerResources/MailerUI.js (configureSignatureFlagImage):
12449	new method that check whether the message being displayed is
12450	signed and if so, displays the proper image depending on the
12451	validation status.
12452
124532009-09-14  Cyril Robert <crobert@inverse.ca>
12454
12455	* UI/Common/UIxPageFrame.m (commonLocalizableStrings): clabels are no longer
12456	necessary in popup windows.
12457
124582009-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12459
12460	* UI/WebServerResources/SOGoRootPage.js (onLoginClick): avoid
12461	setting an empty string as value to "document.cookie" since this
12462	will actually create a cookie.
12463
12464	* UI/MainUI/SOGoUserHomePage.m (-logoffAction): fixed a typo in
12465	the "cache-control" header.
12466
12467	* Main/SOGo.m (-sessionIDFromRequest:): overriden method that
12468	returns nil to avoid any session cookie to be set by SOPE.
12469
124702009-09-11  Cyril Robert <crobert@inverse.ca>
12471
12472	* UI/Contacts/UIxContactFoldersView.m (allContactSearchAction): Added
12473	support for excludeLists, to prevent listing vList entries.
12474
124752009-09-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12476
12477	* UI/MainUI/SOGoUserHomePage.m (-logoffAction): adjusted to handle
12478	the case where then authenticator doesn't handle authentication
12479	cookies. In such cases, this method should theorically never be
12480	invoked though.
12481
12482	* UI/Common/UIxPageFrame.m (-canLogoff): new bool accessor that
12483	returns whether the current authenticator handles user
12484	disconnection or not, in which case we hide the "logoff" link in
12485	the UIxPageFrame.
12486
12487	* SoObjects/SOGo/SOGoCache.m (-registerUser:withName:): adjusted
12488	method to take an additional "userName" parameter in order to
12489	store users with the username used at login time rather than their
12490	user id. This is especially useful when using indirect binds.
12491
12492	* SoObjects/SOGo/LDAPSource.m (-_qualifierForUIDFilter:): we
12493	include the bindFields in the request if they are specified in the
12494	configuration.
12495
12496	* Main/SOGo.m (-authenticatorInContext:): we no return an instance
12497	of SOGoProxyAuthenticator if "SOGoTrustProxyAuthentication" is
12498	set in the configuration.
12499
12500	* SoObjects/SOGo/SOGoProxyAuthenticator.[mh]: new class module
12501	that defines an authenticator that unconditionnaly trusts and
12502	handle authentication done proxy-side. SOGo uses that
12503	authenticator when the "SOGoTrustProxyAuthentication" user default
12504	is set. The username is taken from the "x-webobjects-remote-user"
12505	http header, you may have to adapt your proxy configuration
12506	accordingly.
12507
125082009-09-10  Francis Lachapelle  <flachapelle@inverse.ca>
12509
12510	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
12511	-_handleAttendeesEdition]): the attendees list is now submited as
12512	a JSON string.
12513	([UIxComponentEditor -_loadAttendees]): constructs a dictionary
12514	with the attendees' information that will be passed as a JSON
12515	string to the template.
12516
12517	* UI/MailPartViewers/UIxMailPartICalViewer.m
12518	([UIxMailPartICalViewer -currentAttendeeClass]): new method that
12519	returns the attendee's partstat as the CSS class and adds
12520	"attendeeUser" if the attendee is the active user.
12521
12522	* UI/MailPartViewers/UIxMailPartICalActions.m (-): added delegateAction.
12523
12524	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
12525	-allContactSearchAction]): added the possibility to pass the form
12526	parameter "excludeLists" in order to avoid returning groups.
12527
12528	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
12529	_convertLDAPEntryToContact:]): added a key named "isList" to the
12530	data representation of the LDAP entry if it matches specific objectClasses.
12531
12532	* SoObjects/Appointments/SOGoAptMailICalReply.m
12533	([SOGoAptMailICalReply -getBody]): trim spaces before returning
12534	the body.
12535
12536	* SoObjects/Appointments/SOGoAppointmentObject.m
12537	([SOGoAppointmentObject
12538	-_handleAttendee:withDelegate:ownerUser:statusChange:inEvent:]):
12539	added support for invitation delegation.
12540	([SOGoAppointementObject
12541	-_updateAttendee:withDelegate:ownerUser:forEventUID:withRecurrenceId:withSequence:forUID:shouldAddSentBy:]):
12542	fixed the case of chained delegates.
12543	([SOGoAppointmentObject
12544	-changeParticipationStatus:withDelegate:forRecurrenceId:]): when
12545	delegating an invitation, verify that the delegated is not already
12546	a participant nor a group of users.
12547
125482009-09-10  Cyril Robert <crobert@inverse.ca>
12549
12550	* SoObjects/Appointments/SOGoWebAppointmentFolder.m: New
12551	SOGoAppointmentFolder subclass to manage iCal subscriptions.
12552	* UI/Scheduler/UIxCalMainActions.m: New action class to handle actions on
12553	the main calendar.
12554	* SoObjects/Appointments/SOGoAppointmentFolder.m (importCalendar:): New
12555	method to import everything from an iCalCalendar. (Refactoring from
12556	UIxCalFolderActions)
12557	* SoObjects/Appointments/SOGoAppointmentFolders.m (webCalendarIds): New
12558	method to get uids of web calendar folders.
12559	(_fetchPersonalFolders: withChannel:): Wrap the parent method to replace web
12560	calendar folders with the correct class: SOGoWebAppointmentFolder. It also
12561	removes invalid references in the WebCalendars setting.
12562	* UI/Scheduler/UIxCalFolderActions.m (importAction): Moved a big part of the
12563	method to [SOGoAppointmentFolder importCalendar:].
12564	* SoObjects/Appointments/SOGoWebAppointmentFolder.m (delete): Wrap the
12565	parent method to remove the calendar for the user's settings.
12566	* SoObjects/Appointments/SOGoWebAppointmentFolder.m: Added some error
12567	management, for when the url is invalid / not ical / etc.
12568	* SoObjects/SOGo/SOGoGCSFolder.m (_fetchAclsForUser: forObjectAtPath:):
12569	Ignore group acls if we found acls for the user.
12570	* UI/Contacts/UIxListView.m (propertiesAction): Added to list references
12571	from a vList.
12572
125732009-09-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12574
12575	* UI/Scheduler/UIxComponentEditor.m (-setComment,comment):
12576	properly substitute the form-provided "\r\n" sequences with "\n"
12577	sequences and vice-versa.
12578
125792009-09-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12580
12581	* SoObjects/Appointments/SOGoAppointmentFolder.m
12582	(-_getMaxStartDate): do not compute the start date if the active
12583	user is a super user.
12584	(_enforceTimeLimitOnFilter:withStartDate:andEndDate:): same as
12585	above.
12586
12587	* SoObjects/SOGo/SOGoUser.m (-rolesForObject:inContext:): directly
12588	invoke [self isSuperUser]
12589
125902009-09-09  Cyril Robert <crobert@inverse.ca>
12591
12592	* Tools/NSDictionary+SOGoTool.m: Removed, all methods were moved to
12593	SoObjects/NSDictionary+Utilities.m, or SoObjects/NSString+Utilities.m
12594	* UI/Contacts/UIxContactFolderActions.m: New class to handle actions on a
12595	single contacts folder. (import/export)
12596	* UI/Scheduler/UIxCalFolderActions.m: New class to handle actions on a
12597	single agenda folder. (import/export)
12598	* SoObjects/SOGo/NSDictionary+Utilities.m: Added userRecordAsLDIFEntry.
12599	* SoObjects/SOGo/NSString+Utilities.m: Added methods useful for
12600	userRecordAsLDIFEntry.
12601	* UI/Contacts/UIxContactsListView.m: Removed import/export actions
12602	* UI/Scheduler/UIxCalView.m: Removed import/export actions
12603	* SoObjects/Contacts/NGVCard+SOGo.m: Added a new category to remove a
12604	circular dependency issue.
12605	* SoObjects/Contacts/NGVList+SOGo.m: Added a new category to remove a
12606	circular dependency issue.
12607	* UI/Contacts/UIxContactFolderActions.m: Changed import instructions to use
12608	the new category.
12609
126102009-09-03  Cyril Robert <crobert@inverse.ca>
12611
12612	* UI/Contacts/UIxContactsListView.m: Added ldif / vcard import
12613	* UI/Contacts/UIxContactsListView.m: Changed return types to know how many
12614	cards were imported.
12615
126162009-09-02  Cyril Robert <crobert@inverse.ca>
12617
12618	* UI/Contacts/UIxContactsListView.m (exportAction): Added to support export.
12619	* UI/Scheduler/UIxCalView.m (exportAction): Added to support export.
12620	* SoObjects/Appointments/SOGoAppointmentFolder.m (importComponent): Added to
12621	support import.
12622	* UI/Scheduler/UIxCalView.m (importAction): Added to support import.
12623
126242009-08-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12625
12626	* SoObjects/Appointments/SOGoCalendarProxy.[hm]: new class module
12627	implementing the caldav proxy collections mentionned below. This
12628	is a subclass of SOGoFolder.
12629
12630	* SoObjects/SOGo/WORequest+SOGo.m (-isAppleDAVWithSubstring:): new
12631	method.
12632	(-isICal): new method.
12633
12634	* SoObjects/SOGo/SOGoUserFolder.m
12635	(-calendarProxy:withWriteAccess:): new method that instantiate a
12636	proxy collections for read and write delegations.
12637
12638	* SoObjects/SOGo/SOGoParentFolder.m (-initSubscribedFolders): we
12639	now make use of appendSubcribedSources with which we shared code.
12640
12641	* SoObjects/SOGo/SOGoGCSFolder.m (-subscribeUser:reallyDo:): new
12642	simplified and published version of
12643	subscribe:inTheNamesOf:fromMailInvitation:inContext:.
12644
12645	* SoObjects/SOGo/SOGoFolder.m (-davGroupMemberSet)
12646	(davGroupMembership): new DAV accessors that return an empty
12647	array.
12648
12649	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
12650	(-davGroupMembership): new DAV accessor.
12651
12652	* SoObjects/Appointments/SOGoAppointmentFolders.m
12653	(-toManyRelationshipKeys): overriden method for iCal: we don't
12654	list the folders to which the current user is subscribed to
12655	(because the iCal paradigm now requires calendar proxying), we
12656	don't list the folders to which a delegator has subscribed to
12657	either nor any of his/her secondary calendars.
12658	(-proxyFoldersWithWriteAccess:): new methods that returns the list
12659	of personal folder on which we are allowed to act as a proxy.
12660
12661	* SoObjects/Appointments/SOGoAppointmentFolder.m
12662	(-requiredProxyRolesWithWriteAccess:):  new method that returnes
12663	the roles required for read/write proxying of users.
12664	(-proxySubscribersWithWriteAccess:)
12665	(setProxySubscribers:withWriteAccess:): new accessors making use
12666	of the new method above.
12667
12668	* Tests/test-caldav-scheduling.py: new set of tests for CalDAV
12669	scheduling (iTIP-over-DAV) operations. Implemented 9 scenarios for
12670	invitation delegation.
12671
12672	* SoObjects/Appointments/SOGoAppointmentObject.m
12673	(_updateAttendee:withDelegate:ownerUser:forEventUID:withRecurrenceId:):
12674	added "withDelegate:" parameter in order to be able to add or
12675	remove the delegate corresponding to the attendee delegation. We
12676	also adjust the "delegated-to:" and "delegated-from:" in the
12677	corresponding attendee element from the event copy.
12678	(-postCalDAVReplyTo:from:): deduce the delegate from the matching
12679	attendee and pass it as parameter to subsequent method calls.
12680	(-takeAttendeeStatus:withDelegate:from:withRecurrenceId:)
12681	(changeParticipationStatus:withDelegate:forRecurrenceId:): take a
12682	new "withDelegate:" parameter.
12683
12684	* Tests/webdavlib.py (HTTPQuery.__init__): the content-type is no
12685	longer passed as parameter and should be directly set by the
12686	client as an attribute.
12687	(HTTPSimpleQuery.prepare_headers): new method to enable
12688	query-specific headers.
12689	(CalDAVPOST.__init__): new query type
12690
126912009-08-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12692
12693	* UI/MainUI/SOGoUserHomePage.m (-defaultAction): when the user has
12694	never logged in or switched module, the SOGoUIxLastModule
12695	preference would never be set, causing a crash when the moduleURL
12696	was created, because of a nil parameter. Also, the "defaultModule"
12697	global variable was set to the userDefinedModule, which is
12698	simply wrong as the global variable impacts all the users and need
12699	to be kept intact.
12700
12701	* SoObjects/Appointments/SOGoAptMailReceipt.[hm]: new module
12702	containing the template code for sending event receipts.
12703
127042009-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12705
12706	* SoObjects/SOGo/SOGoUser.m (+userWithLogin:): new constructor
12707	designed to avoid the need to pass a nil role parameter.
12708
12709	* SoObjects/Appointments/SOGoCalendarComponent.m
12710	(-sendReceiptEmailUsingTemplateNamed:forObject:to:) new method
12711	that enables the sending of receipts to an event modifier in case
12712	of an invitation, modification or deletion.
12713
127142009-08-25  Cyril Robert <crobert@inverse.ca>
12715
12716	* SoObjects/Contacts/SOGoContactGCSList.m (copyToFolder): Implementation to
12717	support copying lists.
12718	* UI/Scheduler/UIxCalDayTable.m: Added support for TimeFormat default.
12719
127202009-08-24  Cyril Robert <crobert@inverse.ca>
12721
12722	* UI/MailerUI/UIxMailMainFrame.m: Refactoring + added vLists support.
12723	* UI/Contacts/UIxListEditor.m: Implementation.
12724	* UI/Contacts/UIxContactsListView.m (contactSearchAction): added to support
12725	search in a single folder.
12726
127272009-08-21  Cyril Robert <crobert@inverse.ca>
12728
12729	* UI/Contacts/UIxListView.m: Implementation, allows VLISTs to be displayed.
12730	* UI/Contacts/UIxListView.m (checkListReferences): Added list integrity
12731	verification (make sure all references are valid).
12732
127332009-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12734
12735	* Tests/webdavlib.py (WebDAVQuery.xpath_evaluate): new method to
12736	facilitate xpath evaluation from tests.
12737
127382009-08-20  Cyril Robert <crobert@inverse.ca>
12739
12740	* UI/Common/UIxParentFolderActions.m (createFolderAction): Mantis 2040:
12741	return a 409 code when a folder with the same name exists.
12742	* SoObjects/SOGo/SOGoParentFolder.m (hasLocalSubFolderNamed): Added for
12743	Mantis 2040.
12744	* UI/Scheduler/UIxDatePicker.m: Fix to use user-defined format, if any.
12745	Mantis 1911.
12746	* UI/Scheduler/UIxDatePicker.m: Removed changes from 1911: too many issues.
12747	* UI/Scheduler/UIxCalFilterPanel.m (selectedFilter): Added support for
12748	CalendarDefaultFilter user default. Mantis 112
12749	* UI/Scheduler/UIxCalListingActions.m (checkFilterValue): Added to support
12750	CalendarDefaultFilter user default. Mantis 112
12751	* SoObjects/SOGo/SOGoUser.m: Changed "signature" setting's place: MailSignature
12752	Mantis 113.
12753	* UI/PreferencesUI/UIxPreferences.m: Support for MailSignature setting.
12754	Mantis 113.
12755	* SoObjects/SOGo/SOGoUser.m (migrateSignature): Added. Mantis 113.
12756	* SoObjects/SOGo/LDAPUserManager.m: Changed addObjectUniquely to addObject.
12757	Mantis 113.
12758
127592009-08-19  Cyril Robert <crobert@inverse.ca>
12760
12761	* UI/MainUI/SOGoUserHomePage.m (defaultAction): Added support for SOGoUIxDefaultModule
12762	* UI/PreferencesUI/UIxPreferences.m: Added: availableModules,
12763	itemModuleText, userDefaultModule, setUserDefaultModule to support
12764	SOGoUIxDefaultModule in the preferences UI.
12765	* UI/Contacts/UIxContactFoldersView.m (checkDefaultModulePreference): Added
12766	to support "Last" SOGoUIxDefaultModule value.
12767	* UI/MailerUI/UIxMailListView.m (checkDefaultModulePreference): Added to
12768	support "Last" SOGoUIxDefaultModule value.
12769	* UI/Scheduler/UIxCalMainView.m (checkDefaultModulePreference): Added to
12770	support "Last" SOGoUIxDefaultModule value.
12771	* UI/MailerUI/UIxMailListView.m (isMessageFlagged): Added for Mantis 1428
12772	* UI/MailerUI/UIxMailActions.m (markMessageFlaggedAction,
12773	markMessageUnflaggedAction): Added to support flagging
12774	* UI/MailerUI/UIxMailListView.m: Renamed Invisible to Flagged
12775	* UI/MailerUI/UIxMailMainFrame.m: Renamed Invisible to Flagged
12776
127772009-08-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12778
12779	* SoObjects/SOGo/SOGoObject.m (-parseETagList:): greatly
12780	simplified method by using the "trimmedComponents" utility method.
12781
12782	* SoObjects/SOGo/SOGoContentObject.m (-PUTAction:): removed "new"
12783	hack. Sanitized var names.
12784
127852009-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12786
12787	* SoObjects/SOGo/SOGoGCSFolder.m
12788	(-initializeQuickTablesAclsInContext:): don't give the right to
12789	view everything to users who can delete objects. This may cause
12790	deletion from working from a web method, but everyone who uses
12791	such as configuration will probably use DAV instead.
12792
127932009-08-18  Francis Lachapelle  <flachapelle@inverse.ca>
12794
12795	* UI/Scheduler/UIxCalendarProperties.m ([UIxCalendarProperties
12796	-allCalendarSyncTags]): new method that returns a concatenated
12797	string of all the sync tags of the other calendars.
12798	([UIxCalendarProperties -mustSynchronize]): new method that
12799	returns true if the calendar must be synchronized, ie if it's the
12800	personal calendar.
12801	([UIxCalendarProperties -synchronizeCalendar]): new method that
12802	returns true if the calendar must be synchronized or is set to be synchronized.
12803
12804	* SoObjects/Appointments/SOGoAppointmentFolder.m
12805	([SOGoAppointmentFolder -_setCalendarProperty:forKey:]): new
12806	common method for all methods that need to set a property in the
12807	user's settings.
12808
128092009-08-17  Cyril Robert <crobert@inverse.ca>
12810
12811	* UI/Scheduler/UIxCalListingActions.m: Added support for new user default:
12812	ShowCompletedTasks.
12813
128142009-08-17  Ludovic Marcotte  <lmarcotte@inverse.ca>
12815
12816	* SoObjects/SOGo/LDAPSource.m
12817	Safety check in case no objectClass attribute is returned
12818	from the LDAP server
12819	* Updated NEWS file
12820
128212009-08-14  Francis Lachapelle  <flachapelle@inverse.ca>
12822
12823	* UI/AdministrationUI/UIxAdministration.m: new administration
12824	module. Initial functionalities are limited to ACLs management.
12825
128262009-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12827
12828	* Tools/SOGoToolBackup.m (-parseArguments): modified to either
12829	accept "ALL" or a list of identifiers as arguments.
12830
12831	* Tools/SOGoToolRestore.m: new "sogo-tool" utility that restores
12832	the specified user data previously created by the "backup"
12833	command.
12834	(+initialize): load the "Appointments.SOGo" and "Contacts.SOGo"
12835	bundle in order to access some categories found therein that are
12836	used by OGoContentStore.
12837	(-parseModeArguments) mode arguments are now put at the beginning
12838	of the command parameter string. Added "-F" mode that acts
12839	"destructivelly". Added "-l" mode that enables the listing of
12840	folders previously backed up.
12841	(-createFolder:withFM:): new method that enables the restoration
12842	of folders that were previously deleted.
12843
12844	* Tools/SOGoToolBackup.m (-extractUserPreferences:intoRecord:): we
12845	must extract the values of the user defaults in order to put them
12846	in the record dictionary. Putting the defaults themselves will
12847	only produce serialized strings.
12848
128492009-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12850
12851	* SoObjects/SOGo/LDAPSource.m: the objectClass are now all added
12852	to the return user records.
12853
12854	* Tools/NSDictionary+SOGoTool.m (-userRecordAsLDIFEntry): new
12855	method that converts a user record as returned by LDAPSource to a
12856	compliant LDIF entry.
12857
12858	* Tools/NSDictionary+SOGoTool.[hm]: new category module.
12859
12860	* Tools/SOGoToolBackup.m: new "sogo-tool" utility that backs up
12861	user data following the file-format specified in README.backup
12862
12863	* Tools/SOGoToolRemoveDoubles.m: new "sogo-tool" utility method
12864	implementing the old "sogo-contacts-removedoubles" utility.
12865
12866	* Tools/SOGoToolCheckDoubles.m: new "sogo-tool" utility method
12867	implementing the old "sogo-contacts-checkdoubles" utility.
12868
12869	* Tools/SOGoTool.m: new class module implementing the base class
12870	for all management modules for "sogo-tool".
12871
12872	* Tools/sogo-tool.m: new command-line tool that offers a generic
12873	utility for SOGo administration.
12874
128752009-08-12  Francis Lachapelle  <flachapelle@inverse.ca>
12876
12877	* UI/MainUI/Version (SUBMINOR_VERSION): 1.0.4 release.
12878
128792009-08-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12880
12881	* UI/Scheduler/UIxComponentEditor.m
12882	(-takeValuesFromRequest:inContext:): same as below, for the organizer.
12883
12884	* SoObjects/Appointments/SOGoAppointmentObject.m
12885	(-changeParticipationStatus:forRecurrenceId): when setting the
12886	"SENT-BY" attribute value, we need to use "setValue:0.." instead
12887	"addValue:" to avoid invalid accumulation of values.
12888
128892009-08-11  Francis Lachapelle  <flachapelle@inverse.ca>
12890
12891	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
12892	-_handleOrganizer]): remove organizer when the event has no attendee.
12893	([UIxComponentEditor -_toolbarForOwner:andClientObject:]): return
12894	the proper toolbar when editing the occurrence of a repeating event.
12895
12896	* SoObjects/Appointments/SOGoAppointmentObject.m
12897	([SOGoAppointmentObject -saveComponent:]): when removing a single
12898	attendee from an event, the organizer is no longer defined;
12899	therefore, we must check if the owner is the organizer of the
12900	previous version of the event, not the new event.
12901
129022009-08-10  Ludovic Marcotte  <lmarcotte@inverse.ca>
12903
12904	* SoObjects/SOGo/LDAPUserManager.m
12905	Fixed an issue where the LDAP entries wouldn't be
12906	cached properly in memcached.
12907
129082009-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12909
12910	* SoObjects/Appointments/SOGoAppointmentObject.m (-PUTAction):
12911	modified to handle the case where the active user has the "respond
12912	to" permission, in which case we grab the copy of the iCalendar
12913	which is already in the DB and modify the partstats thereof based
12914	on the entries found in the uploaded iCalendar. The latter is
12915	discarded silently to avoid any further change.
12916
12917	* SoObjects/Appointments/iCalEntityObject+SOGo.m
12918	(-userAsParticipant): new method that returns the "PARTICIPANT"
12919	entity of the SOGoUser passed as parameter, if found.
12920
12921	* Tests/webdavlib.py (WebDAVClient._prepare_headers): fixed a typo
12922	causing the "depth" parameter to never be issued in query heades.
12923
12924	* SoObjects/Appointments/SOGoAppointmentObject.m
12925	(+webdavAclManager): don't register "respond-to-component" as
12926	abstract, otherwise it won't appear in the returned list.
12927
129282009-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12929
12930	* Tests/test-davacl.py: added tests for the Contacts module.
12931
12932	* Tests/all.py: modified to load and run all the test modules
12933	found in the current directory, as long as they are prefixed by
12934	"test-".
12935
129362009-08-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12937
12938	* Tests/davacl.py: new functional testsuite for DAV acls on
12939	Calendar collections, most rights and featured are covered.
12940	Possible improvements are mentionned in the "TODO" section.
12941
12942	* SoObjects/Appointments/SOGoCalendarComponent.m (-aclsForUser:):
12943	don't adjust roles based on the component access class if the
12944	component is new.
12945
12946	* Tests/webdavlib.py (WebDAVClient._prepare_headers): we don't set
12947	the "content-length" header if the body is None.
12948	(HTTPSimpleQuery.render): method must take a "self" parameter.
12949	(WebDAVCalendarMultiget.__init__): added transaction class.
12950
129512009-08-06  Francis Lachapelle  <flachapelle@inverse.ca>
12952
12953	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
12954	-defaultAction]): if the compose message type (HTML or plain text)
12955	has changed, reload the page (don't close it). This is a fix for a
12956	bug with disabling or enabling the CKEDITOR dynamically (in JavaScript).
12957
129582009-08-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
12959
12960	* SoObjects/SOGo/SOGoGCSFolder.m (-davSyncCollection): enhanced to
12961	return a DAV error with the "valid-sync-token" condition tag when
12962	a token is provided while the collection is empty.
12963
12964	* SoObjects/SOGo/WOResponse+SOGo.m: new class module.
12965	(-appendDAVError:): utility method that adds and formats the XML
12966	body of a DAV error, with the error condition passed as argument.
12967
129682009-08-05  Ludovic Marcotte  <lmarcotte@inverse.ca>
12969
12970        * Added missing files for Hungarian translation
12971	* Fixed the reply / forward ops for many translations
12972
129732009-08-03  Ludovic Marcotte  <lmarcotte@inverse.ca>
12974
12975	* Dropped the current caching subsystem based on
12976	GNUstep's DO and replaced it with memcached. This
12977	is much more efficient and scalable than DO and will
12978	also prevent obscure libffi/libffcall crashes on
12979	various platforms.
12980
129812009-08-03  Francis Lachapelle  <flachapelle@inverse.ca>
12982
12983	* UI/Scheduler/UIxCalView.m ([UIxCalView -setCurrentView:]): avoid
12984	writing the user defaults if the current view hasn't change.
12985
129862009-07-29  Francis Lachapelle  <flachapelle@inverse.ca>
12987
12988	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
12989	-hasAttendees]): new method used to show organizer only if the event
12990	has attenddes (read-only view).
12991
12992	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
12993	-taskStartDateTimeText]): new method to return a localized
12994	description of the start date and time.
12995	([UIxTasEditor -taskDueDateTimeText]): idem for the due date and
12996	time.
12997	([UIxTaskEditor -statusDateText]): idem for the status (task
12998	completed) date.
12999
13000	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -reply]):
13001	the participation status of the calendar's owner is now returned
13002	instead of the participation status of the active user.
13003	([UIxComponentEditor -getDateFor:]): deleted, no longer needed.
13004
13005	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
13006	-aptStartDateText]): new method to return a localized description
13007	of the start date.
13008	([UIxAppointmentEditor -aptStartDateTimeText]): idem for the start
13009	date and time.
13010	([UIxAppointmentEditor -aptEndDateTimeText]): idem for the end
13011	date and time.
13012
130132009-07-29  Cyril Robert <crobert@inverse.ca>
13014
13015	* SoObjects/Contacts/SOGoContactGCSFolder.m: Added c_o as a search field.
13016
130172009-07-27  Francis Lachapelle  <flachapelle@inverse.ca>
13018
13019	* SoObjects/Appointments/SOGoAppointmentFolder.m
13020	([SOGoAppointmentFolder
13021	-roleForComponentsWithAccessClass:forUser:]): now returns an empty
13022	string when user is owner of the calendar.
13023
130242009-07-23  Cyril Robert <crobert@inverse.ca>
13025
13026	* UI/Scheduler/UIxComponentEditor.m (repeatLabel), (ownerIsAttendee),
13027	(delegateIsAttendee), (eventIsReadOnly), (startDateString), (endDateString):
13028	Added for Mantis 78.
13029
130302009-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13031
13032	* SoObjects/Appointments/SOGoAppointmentFolder.m
13033	(-davPOSTRequest:withContentType:inContext:) we use a simple comma
13034	as recipient separator but with trim the resulting elements.
13035
13036	* SoObjects/SOGo/NSArray+Utilities.m (-trimmedComponents): new
13037	method that returns a trimmed/stripped version of the strings
13038	contained in the array.
13039
130402009-07-22  Cyril Robert <crobert@inverse.ca>
13041
13042	* UI/Scheduler/UIxCalListingActions.m: Added "editable" field to tasks, so
13043	that the UI can disable the checkboxes next to them.
13044
130452009-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13046
13047	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
13048	(-davCalendarScheduleInboxURL, -davCalendarScheduleOutboxURL)
13049	(-davDropboxHomeURL, -davNotificationsURL): proxied methods to a
13050	common accessor.
13051
130522009-07-21  Cyril Robert <crobert@inverse.ca>
13053
13054	* UI/Scheduler/UIxCalendarProperties.m: Prevent doing anything when not
13055	executing @"saveProperties". Added wrapper methods for
13056	showCalendarTasks/Alarms. Added reloadTasks var.
13057	* SoObjects/Appointments/SOGoAppointmentFolder.m: Added
13058	(set/showCalendarTasks), (set/showCalendarAlarms)
13059	* SoObjects/SOGo/SOGoGCSFolder.m: Added dicts to cleanup on unsubscribe.
13060	* UI/Scheduler/UIxCalListingActions.m: Added support for
13061	showCalendarAlarms/Tasks.
13062
130632009-07-21  Francis Lachapelle  <flachapelle@inverse.ca>
13064
13065	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
13066	-stringByEscapingURL]): the UTF-8 encoding is now specified for the
13067	filename of an attachment.
13068
130692009-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13070
13071	* SoObjects/Appointments/SOGoAppointmentFolder.m
13072	(-caldavFreeBusyRequest:): the list of recipients is now deduced
13073	from the list of attendees specified in the VFREEBUSY.
13074
130752009-07-20  Cyril Robert <crobert@inverse.ca>
13076
13077	* SoObjects/Appointments/SOGoAppointmentFolder.m (davResourceType): Removed
13078	a few things for the iPhone calDAV sync (schedule-inbox, schedule-outbox,
13079	vevent-collection, vtodo-collection).
13080	* SoObjects/SOGo/WORequest+SOGo.m (isIPhone): Added new method to detect
13081	iPhone's DAV client.
13082
130832009-07-20  Francis Lachapelle  <flachapelle@inverse.ca>
13084
13085	* SoObjects/Appointments/SOGoAppointmentFolder.m
13086	([SOGoAppointmentFolder
13087	-fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:):
13088	avoid returning repeating events when no end date is
13089	defined. Ultimately, we should return the first occurrence of
13090	repeating events when no end date is defined and therefore, move
13091	the logic into iCalRecurrenceCalculators.
13092
130932009-07-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13094
13095	* UI/SOGoUI/UIxComponent.m (-responseWithStatus:): revert the
13096	default content-type to text/plain; charset=utf-8.
13097
13098	* UI/WebServerResources/SchedulerUI.js: initialize the
13099	"listFilter" global var depending on the value of the filter
13100	popup.
13101
13102	* UI/Scheduler/UIxCalFilterPanel.m (-selectedFilter): return
13103	"view_today" as default filter.
13104
131052009-07-17  Francis Lachapelle  <flachapelle@inverse.ca>
13106
13107	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
13108	-mailerContactsAction]): restored method lost with
13109	UIxContactsListViewContainer.
13110
131112009-07-17  Cyril Robert <crobert@inverse.ca>
13112
13113	* SoObjects/Appointments/SOGoAppointmentFolder.m
13114	(freebusyResponseForRecipient): Removed CDATA tag
13115	* SoObjects/Appointments/SOGoFreeBusyObject.m (iCalPersonWithUID): Removed
13116	setCn, since iCal fails when present.
13117
131182009-07-16  Francis Lachapelle  <flachapelle@inverse.ca>
13119
13120	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:]): update
13121	ivar activeUserIsOwner when changing owner.
13122
131232009-07-16  Cyril Robert <crobert@inverse.ca>
13124
13125	* UI/PreferencesUI/UIxPreferences.m: Added categories, categoriesValue,
13126	setCategoriesValue to allow editing of calendar categories.
13127	* UI/Scheduler/UIxComponentEditor.m: Made modifications to fetch categories
13128	from user defaults, if they exist.
13129
131302009-07-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13131
13132	* UI/Scheduler/UIxComponentEditor.m (-categoryList): insert the
13133	category of the current component in the list, don't convert it
13134	to upper case and sort the resulting list alphabetically.
13135
131362009-07-14  Cyril Robert <crobert@inverse.ca>
13137
13138	* UI/Scheduler/UIxComponentEditor.m: Added a default title for
13139	vevents and vtodos
13140
131412009-07-14  Francis Lachapelle  <flachapelle@inverse.ca>
13142
13143	* UI/SOGoUI/UIxComponent.m ([UIxComponent -buildDate]): moved
13144	method from UIxPageFrame.
13145
13146	* SoObjects/Appointments/SOGoCalendarComponent.m
13147	([SOGoCalendarComponent _updateRecurrenceIDsWithEvent:]): fixed a
13148	crash that occurs when saving a recurrent task with
13149	originalCalendar not initialized.
13150
131512009-07-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13152
13153	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
13154	(-davCalendarUserAddressSet): we return the "MAILTO:" prefix in
13155	lower case instead.
13156
13157	* SoObjects/Appointments/SOGoAppointmentFolders.m
13158	(-davCalendarComponentSet): new method, copied from
13159	SOGoAppointmentFolder.
13160
131612009-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13162
13163	* SoObjects/SOGo/SOGoContentObject.m (-davResourceType): new
13164	resource that returns an empty string for DAV compliance.
13165
131662009-07-09  Cyril Robert <crobert@inverse.ca>
13167
13168	* UI/MailPartViewers/UIxMailRenderingContext.m: Display .tiff as
13169	attachments, some browsers don't support tiff.
13170	* SoObjects/Mailer/SOGoDraftObject.m: Fixed content type for multipart
13171	messages.
13172
131732009-07-07  Francis Lachapelle  <flachapelle@inverse.ca>
13174
13175	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
13176	-attach:]): new method to return the ATTACH property of the
13177	component.
13178	([UIxComponentEditor -setAttach:]): associated setter method.
13179
13180	* iCalEntityObject.m ([iCalEntityObject -attach]): new method to return the
13181	ATTACH property of the component as a URL.
13182	([iCalEntityObject -setAttach:]): new method to set the ATTACH property.
13183
131842009-07-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13185
13186	* SoObjects/Appointments/SOGoAppointmentFolder.m
13187	(-additionalWebdavSyncFilters): overriden method for returning a
13188	clause that takes the DAV time limit into account.
13189
13190	* SoObjects/SOGo/SOGoGCSFolder.m (-davSyncCollection:): added the
13191	ability to specify additional filters for elements that must be
13192	returned.
13193	(-additionalWebdavSyncFilters): new method that returns a
13194	parametrable where clause for reset queries.
13195
131962009-07-07  Cyril Robert <crobert@inverse.ca>
13197
13198	* UI/WebServerResources/MailerUI.js: Fixed Drag&Drop issue (header was
13199	draggable)
13200	* UI/WebServerResources/ContactsUI.js: Fixed Drag&Drop issue (header was
13201	draggable)
13202	* UI/WebServerResources/MailerUI.js: Revert
13203	* UI/WebServerResources/ContactsUI.js: Revert
13204	* UI/WebServerResources/MailerUI.js: Fixed Mantis #45
13205	* UI/WebServerResources/ContactsUI.js: Fixed Mantis #45
13206	* UI/MailerUI/UIxMailListView.m: Made "Size" column sortable
13207	* SoObjects/SOGo/SOGoGCSFolder.m: Fixed Mantis #48
13208
132092009-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13210
13211	* UI/Scheduler/UIxCalListingActions.m (-eventsBlocksAction): added
13212	sanity checks to avoid crashes when quick fields were wrongly
13213	parsed.
13214
13215	* SoObjects/SOGo/LDAPUserManager.m (_fillContactMailRecords:): if
13216	the user uid contains a "@", we set it directly as system email
13217	rather than suffixing it with the default mail domain.
13218
132192009-07-02  Francis Lachapelle  <flachapelle@inverse.ca>
13220
13221	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
13222	-columnsDisplayOrder]): added the size column to the default columns.
13223
132242009-07-02  Cyril Robert <crobert@inverse.ca>
13225
13226	* UI/MailerUI/UIxMailFolderActions.m: Added auto-subscribe on imap folder
13227	creation.
13228
132292009-07-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13230
13231	* SoObjects/Appointments/SOGoAppointmentFolder.m
13232	(-lookupName:inContext:acquire:): handle "AsTask" and
13233	"AsAppointment" url suffix only for the default "so" handler.
13234
132352009-07-01  Cyril Robert <crobert@inverse.ca>
13236
13237	* SoObjects/SOGo/SOGoGCSFolder.m: Remove color from user settings on
13238	unsubscribe.
13239	* SoObjects/SOGo/SOGoGCSFolder.m: Re-fixed to also remove from InactiveFolders
13240	and FolderSyncTags.
13241	* UI/MailerUI/UIxMailFolderActions.m (_trashedURLOfFolder:withCO:): Fixed
13242	issue when deleting a folder with the same name as one already in the Trash.
13243
132442009-06-30  Francis Lachapelle  <flachapelle@inverse.ca>
13245
13246	* UI/MailPartViewers/UIxMailPartICalActions.m
13247	([UIxMailPartICalActions -addToCalendarAction]): new method to add
13248	a calendar from an invitation (used to work?!).
13249
13250	* SoObjects/SOGo/NSString+Utilities.m ([NSString
13251	-_handleURLs:textToMatch:prefix:inRanges:]): fixed offset
13252	of range after replacement.
13253
13254	* SoObjects/SOGo/NSArray+Utilities.m ([NSArray
13255	-hasRangeIntersection:]): fixed error in range comparison.
13256
132572009-06-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13258
13259	* SoObjects/Appointments/SOGoAppointmentFolder.m
13260	(-davCalendarMultiget, -davCalendarQuery): certain dav attribute
13261	methods do not necessitate additional fields, we declare their
13262	corresponding fields to "". Also, we make sure those fake fields
13263	are not specified in the SQL query and we ensure all the fields
13264	are only requested once each.
13265	(-davCalendarComponentSet): we need to retain the returned
13266	array to avoid a crash during the next access to the attribute.
13267
132682009-06-30  Cyril Robert <crobert@inverse.ca>
13269
13270	* UI/WebServerResources/MailerUI.js: Added drag & drop support!
13271	* UI/MailPartViewers/UIxMailPartHTMLViewer.m: Removed an extra NSLog
13272	* UI/MailerUI/UIxMailListView.m: Added support for "Size" column, fixed a
13273	bug when number of columns != 7.
13274
132752009-06-29  Cyril Robert <crobert@inverse.ca>
13276
13277	* UI/WebServerResources/ContactsUI.js: Added drag & drop support
13278	* UI/WebServerResources/ContactsUI.js: Disabled drag & drop for lists
13279
132802009-06-29  Francis Lachapelle  <flachapelle@inverse.ca>
13281
13282	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
13283	-initSubFolders]): system folders (LDAP sources) are now loaded
13284	unconditionally.
13285	([SOGoFolderParent -initSubscribedSubFolders]): new method to load
13286	only subscribed folders.
13287	([SOGoParent -lookupName:inContext:acquire:]): we now properly
13288	lookup in subscribed folders.
13289	([SOGoParentFolder -subFolders]): since the subscribed folders are
13290	now stored in its own dictionary, we must return keys from both
13291	dictionaries.
13292
132932009-06-26  Francis Lachapelle  <flachapelle@inverse.ca>
13294
13295	* UI/Contacts/UIxContactsListViewContainer.[hm]: this class was
13296	removed along with the template and moved to UIxContactFoldersView.
13297
132982009-06-26  Cyril Robert <crobert@inverse.ca>
13299
13300	* UI/WebServerResources/UIxPreferences.js: Fixed a bug when
13301	ComposeMessagesType isn't set, removed an "alert"
13302
133032009-06-25  Cyril Robert <crobert@inverse.ca>
13304
13305	* SoObjects/Mailer/SOGoMailReply.m: Added proper blockquote
13306	* UI/WebServerResources/UIxMailEditor.js: Use CKeditor
13307	* SoObjects/Mailer/SOGoMailForward.m: Added htmlComposition property,
13308	changed almost all methods to escape what needsto be escaped.
13309	* UI/WebServerResources/UIxPreferences.js: Fixed CKeditor toggle issue
13310
133112009-06-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13312
13313	* SoObjects/SOGo/SOGoGCSFolder.m (-davSyncCollection:): certain
13314	dav attribute methods do not necessitate additional fields, we
13315	declare their corresponding fields to "". Also, we make sure those
13316	fake fields are not specified in the SQL query and we ensure all
13317	the fields are only requested once each.
13318
13319	* SoObjects/Appointments/SOGoAppointmentFolder.m
13320	(+initialize): we no longer need reportQueryFields nor
13321	reducedReportQueryFields.
13322	(-davCalendarQuery:,-davCalendarMultiget:): automatically include
13323	"c_component" in the requested fields, so that items can be
13324	instantiated properly.
13325
133262009-06-23  Cyril Robert <crobert@inverse.ca>
13327
13328	* SoObjects/Mailer/NSString+Mail.m (stringByConvertingCRLNToHTML): Added
13329	* UI/MailPartViewers/UIxMailPartTextViewer.m (stringByConvertingCRLNToHTML):
13330		Removed
13331	* SoObjects/Mailer/SOGoDraftObject.m: Added support for html content type
13332	* SoObjects/Mailer/SOGoMailObject+Draft.m: Added support for html content
13333	type in mail reply
13334	* SoObjects/Mailer/SOGoMailReply.m: Added support for html in mail editor
13335	* UI/PreferencesUI/UIxPreferences.m: Added option to se content type for
13336	 mail editing
13337	* UI/WebServerResources/GNUmakefile: Added fckeditor entry
13338	* UI/WebServerResources/UIxMailEditor.js: Plugged-in FCKEditor
13339	* UI/WebServerResources/UIxPreferences.js: Plugged-in FCKEditor, handle html
13340	 toggle for signature box
13341
133422009-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13343
13344	* SoObjects/SOGo/SOGoGCSFolder.m (-davSyncCollection:): deleted
13345	records are always ignored when fetching fields from the quick
13346	table, we thus need to make two separate queries.
13347
13348	* SoObjects/Appointments/SOGoAppointmentFolder.m
13349	(-davResourceType): return the "schedule-inbox" and
13350	"schedule-inbox" caldav types when the user is the owner and the
13351	collection is its personal calendar.
13352	(-davCalendarComponentSet): new method that returns VEVENT and
13353	VTODO.
13354
13355	* SoObjects/SOGo/SOGoGCSFolder.m (davSyncCollection:): new method
13356	that implements the draft webdav sync specification
13357	(http://ietfreport.isoc.org/idref/draft-daboo-webdav-sync/).
13358
13359	* SoObjects/SOGo/NSString+DAV.m (asWebDAVTupleWithContent:): new
13360	method that returns a DAV dictionary from a flat DAV element (self)
13361	string and a content.
13362
13363	* SoObjects/SOGo/NSArray+DAV.m (asWebDavStringWithNamespaces:): we
13364	no longer use an NSEnumerator in order to be a bit faster.
13365
133662009-06-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13367
13368	* SoObjects/SOGo/DOMNode+SOGo.m
13369	(-flatPropertyNameOfSubElements): new method that returns
13370	flattened ({namespace}tag) names of the first direct child
13371	elements.
13372
13373	* SoObjects/SOGo/SOGoGCSFolder.m (-davSQLFieldsTable): new method
13374	that returns a correspondance table between requested dav
13375	properties and SQL fields required to answer them.
13376	(-parseDAVRequestedProperties:): new method derived from a similar
13377	one in SOGoAppointmentFolder which will return a dictionary of DAV
13378	properties that are requested as well as their corresponding SQL
13379	fields.
13380
13381	* SoObjects/SOGo/DOMNode+SOGo.[hm]: new category module that
13382	implement helper methods for DOM processing.
13383
13384	* SoObjects/Appointments/SOGoAppointmentFolder.m
13385	(davCalendarQuery:): specify default values for "start" and "end"
13386	whenever one of them is missing.
13387
133882009-06-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13389
13390	* SoObjects/Appointments/SOGoAppointmentFolder.m
13391	(-fetchFields:...): don't use the privacySqlString twice.
13392	The component parameter MUST be a NSString from now on. Fixed a
13393	syntax problem in the where clause occuring when vtodo components
13394	were requested.
13395
13396	* UI/MailPartViewers/UIxMailPartICalViewer.m (-storedEventObject):
13397	use the new "storedEventFetched" bool ivar to specify whether we
13398	already attempted to fetch the event from the user calendars.
13399
13400	* SoObjects/SOGo/SOGoUser.m (-rolesForObject:inContext:): do not
13401	query the acls for the object if the current user is its owner.
13402
13403	* SoObjects/SOGo/SOGoParentFolder.m (-initSubFoldersMatching:):
13404	renamed from "initSubFolders". Take a string argument that, if
13405	specified, will stop the search of folders when the name can be
13406	found in the folders list.
13407
134082009-06-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13409
13410	* SoObjects/Appointments/SOGoAppointmentFolder.m
13411	(-davCalendarQuery:, davCalendarMultiget:): we now fetch the only
13412	fields that are required by the DAV query from the database
13413	tables.
13414	(-bareFetchFields:from:to:title:component:additionalFilters:,fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:):
13415	optimized the privacy SQL string to a single where clause based on
13416	the tables computed in initializeQuickTablesAclsInContext:.
13417
13418	* SoObjects/Appointments/SOGoCalendarComponent.m (-valuesForKeys:)
13419	overriden method to speed up PROPFIND requests.
13420
134212009-06-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13422
13423	* SoObjects/SOGo/NSArray+Utilities.m (-hasRangeIntersection):
13424	modified to use the range pointers rather than serialized
13425	representations.
13426
134272009-06-15  Francis Lachapelle  <flachapelle@inverse.ca>
13428
13429	* SoObjects/Appointments/SOGoAppointmentFolder.m
13430	([SOGoAppointmentFolder
13431	-_appendCycleException:firstInstanceCalendarDateRange:fromRow:forRange:toArray:]):
13432	for exceptions in the date range, add the boolean key
13433	"isException" to the dictionary.
13434	(-_flattenCycleRecords:fetchRange:): renamed method (was
13435	-fixupCyclicRecords:fetchRange:).
13436
134372009-06-12  Francis Lachapelle  <flachapelle@inverse.ca>
13438
13439	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
13440	-addressBooksList]): LDAP-based addressbooks must not be
13441	editable, even for super users.
13442
134432009-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13444
13445	* SoObjects/SOGo/SOGoUserFolder.m (-davUserQuery:): do not return
13446	the user information for the current user.
13447
13448	* UI/MainUI/SOGoUserHomePage.m (-usersSearchAction): do not return
13449	the user information for the current user.
13450	(-foldersSearchAction): the method only search folders for the
13451	owner of the current folder. The "user" parameter has thus been
13452	removed.
13453
134542009-06-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13455
13456	* SoObjects/SOGo/NSString+Utilities.m (-stringByDetectingURLs):
13457	fixed a leak. Fixed a crash on GNUstep by using arrays of pointers
13458	to NSRange instead of converting/parsing them to/from NSString.
13459
13460	* SoObjects/SOGo/NSArray+Utilities.m (-addRange): removed method.
13461	(-addNonNSObject:withSize:copy:): new helper method to add object
13462	pointers to arrays.
13463	(-freeNonNSObjects): new helper method to release the above object
13464	pointers.
13465
13466	* UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed rendering of
13467	CSS content containing comment characters. Ignore certain HTML
13468	tags that can alter the appearance of the SOGo display altogether
13469	(SCRIPT, LINK, BASE, META, TITLE).
13470
134712009-06-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13472
13473	* SoObjects/Appointments/SOGoFreeBusyObject.m
13474	(-iCalStringForFreeBusyInfos:withMethod:andUID:andOrganizer:from:to:):
13475	accept additional "UID" and "organizer" parameters that will be set as
13476	attributes on the reported freebusy object.
13477
13478	* SoObjects/Appointments/SOGoAppointmentFolder.m
13479	(-freebusyResponseForRecipient:withUser:andCalendarData:): expose
13480	the calendar-data as as !CDATA element.
13481
13482	* SoObjects/SOGo/SOGoWebDAVValue.m
13483	(-asWebDavStringWithNamespaces): new overriden method to enable
13484	the passing of unescapable strings.
13485
134862009-06-09  Francis Lachapelle  <flachapelle@inverse.ca>
13487
13488	* UI/Scheduler/UIxCalView.m ([UIxCalView -setCurrentView:]): new
13489	method to save the user's current view in her/his settings.
13490
13491	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -currentView]):
13492	returns the active user's last calendar view.
13493
13494	* SoObjects/Appointments/SOGoAppointmentFolder.m
13495	([SOGoAppointmentFolder -_sqlStringRangeFromto:]): dates are not
13496	necessarily defined in case of vTODOs; don't apply the range
13497	constraint when dates are null so the SQL query return tasks.
13498	([SOGoAppointmentFolder
13499	-fetchFields:from:to:title:component:additionalFilters:includeProtectedInformation:]):
13500	recurrent tasks are now returned as normal components and are
13501	shown in the web interface. They are not flatten as recurrent
13502	events are.
13503
135042009-06-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13505
13506	* SoObjects/SOGo/SOGoGCSFolder.m (-davCollectionTag): moved method
13507	from SOGoAppointmentFolder since we will need it for contacts
13508	folders as well.
13509
135102009-06-08  Cyril Robert <crobert@inverse.ca>
13511
13512	* SoObjects/Appointments/SOGoAppointmentFolder.m: Added c_cycleenddate in
13513	dav date limitation. Added c_cycleenddate = NULL
13514
135152009-06-05  Cyril Robert <crobert@inverse.ca>
13516
13517	* UI/Scheduler/UIxCalListingActions.m: Added support to ignore
13518	office hours.
13519	* UI/Templates/SchedulerUI/UIxAttendeesEditor.wox: Removed old commented-out
13520	buttons, added text as a proper string.
13521	* UI/WebServerResources/UIxAttendeesEditor.js: Fixed scrolling issues,
13522	added support for "onlyOfficeHours" checkbox
13523
135242009-06-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13525
13526	* SoObjects/Mailer/SOGoMailObject+Draft.m: add a default
13527	attachment path of "1" when path is nil and thus unique.
13528
13529	* UI/SOGoUI/UIxComponent.m (-_parseQueryString:): fixed handling
13530	of bad charsets in the parameters encoding. Invalid values will be
13531	discarded.
13532
13533	* SoObjects/Contacts/SOGoContactGCSFolder.m
13534	(-lookupContactsWithFilter:sortBy:ordering:): same as below.
13535
13536	* SoObjects/SOGo/LDAPSource.m: properly escaped user-entered
13537	strings which may contain quotes and thereby mess up the LDAP
13538	queries.
13539
135402009-06-04  Cyril Robert <crobert@inverse.ca>
13541
13542	* UI/Scheduler/UIxCalListingActions.m: Added everything needed for the
13543	findSlot action. Fixes for allday & multiday events.
13544
13545	* UI/WebServerResources/UIxAttendeesEditor.js: Added everything needed for
13546	the findSlot action. Fixes for allday events. Fixed scrolling issues
13547
13548	* UI/Scheduler/UIxCalListingActions.h (findPossibleSlotAction): Added header.
13549
135502009-06-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13551
13552	* SoObjects/SOGo/SOGoGCSFolder.m
13553	(-initializeQuickTablesAclsInContext:): new method that
13554	initializes the new "userCanAccessAllObjects" ivar.
13555
13556	* SoObjects/Appointments/SOGoAppointmentFolder.m
13557	(-initWithName:inContainer:): added new
13558	"userCanAccessObjectsClassifiedAs" ivar (array of bools) to
13559	quickly determine whether a user can access a component
13560	informations.
13561	(-initializeQuickTablesAclsInContext:): new method that
13562	initializes the new ivar above.
13563	(-davCalendarQuery:, -davCalendarMultiget:): invoke the new method
13564	above.
13565
13566	* Main/NSException+Stacktrace.m, SOPE/NGCards/NGCardsSaxHandler.m,
13567	SOPE/NGCards/NSString+NGCards.m,
13568	SOPE/NGCards/versitCardsSaxDriver/VSSaxDriver.m,
13569	SoObjects/Appointments/SOGoAppointmentFolder.m,
13570	SoObjects/SOGo/NSArray+Utilities.m,
13571	SoObjects/SOGo/SOGoGCSFolder.m,
13572	SoObjects/SOGo/SOGoLDAPUserDefaults.m,
13573	UI/MailPartViewers/UIxMailPartTextViewer.m,
13574	UI/MainUI/SOGoUserHomePage.m, UI/Scheduler/UIxCalListingActions.m:
13575	replaced all invocations of "malloc", "realloc", "free" by similar
13576	invocations to NSZoneMalloc, NSZoneRealloc and NSZoneFree.
13577
13578	* SoObjects/Appointments/SOGoAppointmentFolder.m (+initialize):
13579	removed obsolete security declarations.
13580	(-davCalendarQuery, -davCalendarMultiget): delegate conversion of
13581	"properties" NSArray to C array to submethods. Those submethods
13582	now pass a count parameter to properly evaluate the amount of
13583	responses instead of the static 100 value. Make use of
13584	NSZoneMalloc instead of malloc.
13585
13586	* Tools/sogo-contacts-removedoubles.m: added code to avoid
13587	removing cards referenced in vlists.
13588
135892009-06-02  Francis Lachapelle  <flachapelle@inverse.ca>
13590
13591	* SoObjects/Appointments/SOGoAppointmentObject.m
13592	([SOGoAppointmentObject -postCalDAVEventRequestTo:from:]): remove
13593	alarms from invitation and set organizer of master event when
13594	dealing with a recurrent event.
13595
135962009-06-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13597
13598	* Tools/sogo-contacts-removedoubles.m: new maintenance utility
13599	that removes double records in specified addressbooks.
13600
13601	* Tools/sogo-contacts-checkdoubles.m: new maintenance utility that
13602	helps determine which contact folders need cleanup.
13603
136042009-06-02  Cyril Robert <crobert@inverse.ca>
13605
13606	* SoObjects/Appointments/SOGoAppointmentFolder.m (_enforceTimeLimitOnFilter):
13607	Rewrote algorithm, fixed cyclic events issue.
13608	* UI/WebServerResources/UIxAttendeesEditor.js: Fixed update bug on "enter"
13609	* UI/Templates/SchedulerUI/UIxAttendeesEditor.wox: Removed next/prev hour
13610	and zoom buttons
13611
136122009-06-02  Ludovic Marcotte <lmarcotte@inverse.ca>
13613
13614	* Updated the documentation (version change, Russian
13615	language addition and documentation of the WOApplicationRedirectURL
13616	parameter)
13617
136182009-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13619
13620	* UI/MailerUI/UIxMailFolderActions.m (-deleteFolderAction):
13621	renamed to deleteAction to match the methods in UI/Common/*Actions.m
13622
13623	* UI/Common/UIxFolderActions.m (-): removed useless method since
13624	SOGoFolders can use the "delete" web method to achieve the same result.
13625
13626	* SoObjects/SOGo/SOGoPermissions.m: declared new "Delete Object"
13627	permission.
13628
136292009-06-01  Cyril Robert <crobert@inverse.ca>
13630
13631	* UI/WebServerResources/UIxContactsUserFolders.js (onSearchFormSubmit):
13632	Fixed encoding issue/crash.
13633	* SoObjects/Appointments/SOGoAppointmentFolder.m (_parseCalendarFilter):
13634	Added support for default SOGoDAVCalendarStartTimeLimit, which is the
13635	maximum number of days for dav queries.
13636	Added: _enforceTimeLimitOnFilter, _getMaxStartDate and _getStartTimeLimit
13637
136382009-05-30  Ludovic Marcotte <lmarcotte@inverse.ca>
13639
13640	* Modified SOGoCalendarComponent.m so that we
13641	explicitely add the MIME-Version header when
13642	sending out invitation messages.
13643
136442009-05-23  Ludovic Marcotte <lmarcotte@inverse.ca>
13645
13646	* Added Russian tranlation - patch from
13647	Alex Kabakaev <lists@kas.tomsk.ru>
13648
136492009-05-22  Francis Lachapelle  <flachapelle@inverse.ca>
13650
13651	* Main/sogod.m (main): verify if the default parameter
13652	WOApplicationRedirectURL is defined and if so, removed any
13653	trailing slash.
13654
13655	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
13656	-_toolbarForOwner:andClientObject:]): ignore the participation
13657	status for tasks so the usual edition toolbar appears.
13658
136592009-05-21  Ludovic Marcotte <lmarcotte@inverse.ca>
13660
13661	* Regenerated the SOPE patchset so we now correctly
13662	support the windows-1251 charset
13663	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
13664	We now correctly support the koi8-r and windows-1251
13665	encodings when decoding HTML mails.
13666
136672009-05-19  Francis Lachapelle  <flachapelle@inverse.ca>
13668
13669	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
13670	-allFolderPaths]): if the user default "showSubscribedFoldersOnly"
13671	is not defined for the user, use the application default
13672	"SOGoMailShowSubscribedFoldersOnly".
13673
13674	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
13675	-showSubscribedFoldersOnly]): return the user default or the
13676	application default if not defined.
13677	([UIxPreferences-setShowSubscribedFoldersOnly]): when false, set
13678	the user default parameter "showSubscribedFoldersOnly" to NO
13679	instead of removing the entry. This will ensure user defaults are
13680	taking precedence over application defaults.
13681
136822009-05-15  Francis Lachapelle  <flachapelle@inverse.ca>
13683
13684	* SOPE/sope-ldap/NGLdap/NGLdapConnection.m: added methods
13685	primaryFetchMailboxHierarchyForURL:onlySubscribedFolders: and
13686	allFoldersForURL:onlySubscribedFolders: to offer the possibility
13687	to use the IMAP command LSUB instead of LIST.
13688
13689	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
13690	-allFolderPaths]): return only subscribed folders if user default
13691	"showSubscribedFoldersOnly" is true.
13692
13693	* SoObjects/SOGo/SOGoUserDefaults.m ([SOGoUserDefaults
13694	-setObject:forKey:]): fix an issue when calling removeObjectForKey
13695	and value is nil.
13696
13697	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
13698	-setShowSubscribedFoldersOnly:]): setter for the user default
13699	"showSubscribedFoldersOnly".
13700
137012009-05-12  Francis Lachapelle  <flachapelle@inverse.ca>
13702
13703	* SoObjects/SOGo/LDAPSource.m ([LDAPSource -initFromSource:]):
13704	retrieves the user default attribute "IMAPHostFieldName" so the
13705	IMAP server name can be fetched from the LDAP directory.
13706	([LDAPSource -_fillEmailsOfEntry:intoContactEntry:]): if a IMAP
13707	hostname field is specified for the source, retrieve the LDAP
13708	attribute and set the value to the key "c_imaphostname".
13709
13710	* SoObjects/Mailer/SOGoMailAccount.m (SOGoMailAccount
13711	-_urlHostString]): the IMAP server name is now retrieved from the
13712	SOGoUser object and no longer hardcoded to the fallbackIMAP4Server
13713	user default.
13714
13715	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
13716	-_fillContactInfosForUser:withUIDorEmail:]): now fills the user
13717	attributes dictionary with the IMAP hostname if specified and defined.
13718
137192009-05-06  Francis Lachapelle  <flachapelle@inverse.ca>
13720
13721	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
13722	-removeAclsForUsers:atObjectPath:]): verify if user is a group and
13723	prefix the UID with "@" if so.
13724
13725	* SoObjects/Appointments/SOGoCalendarComponent.m
13726	([SOGoCalendarComponent -expandGroupsInEvent:]): new method from
13727	the code that was in [SOGoAppointmentObject -_handleAddedUsers:]
13728	and [SOGoAppointmentObject -_PUTAction:] that expands the groups
13729	among the attendees of the passed event.
13730
137312009-05-05  Francis Lachapelle  <flachapelle@inverse.ca>
13732
13733	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
13734	+userWithLogin:roles:trust:]): don't set the roles if the passed
13735	roles are not defined.
13736
137372009-05-03  Francis Lachapelle  <flachapelle@inverse.ca>
13738
13739	* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
13740	-_initRights:]): add the "@" prefix to groups UID.
13741
13742	* SoObjects/SOGo/SOGoGroup.m ([SOGoGroup +groupWithIdentifier:]):
13743	returns a SOGoGroup instance matching the specified UID value or
13744	nil if no group is found.
13745	([+groupWithEmail:]): idem for the specified email address.
13746	([-members]): now properly search among all LDAP sources for the
13747	members of the group.
13748
13749	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
13750	-_fetchAclsForUser:forObjectAtPath:]): also search for entries
13751	prefixed by a "@" corresponding to group entries. For those
13752	entries, find the members and add the ACLs if the user if part of
13753	the group.
13754	([-setRoles:forUser:forObjectAtPath:]): prefix the UID with the
13755	"@" character when dealing with a group.
13756
13757	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
13758	-getLoginForDN:]): searches among all defined LDAP sources and
13759	returns the UIDFieldName value for the requested DN.
13760	([-contactInfosForUserWithUIDorEmail:]): prior to perform the
13761	search, removes the "@" prefix used to identified groups in the
13762	ACL tables.
13763
13764	* SoObjects/SOGo/LDAPSource.m ([LDAPSource -lookupLoginByDN:]):
13765	returns the UIDFieldName value for the requested DN.
13766	([-lookupGroupEntryByUID:]): returns the LDAP entry corresponding
13767	to a group (ie with an objectClass of member, uniqueMember,
13768	memberUid, or memberOf) for the requested UID.
13769	([-lookupGroupEntryByEmail]): idem for the requested email address.
13770	([-lookupGroupEntryByAttribute:andValue:]): idem for the specified
13771	value for the specified attribute.
13772	([-baseDN]): accessor for the base DN.
13773
13774	* UI/Common/UIxAclEditor.m ([UIxAclEditor -_displayNameForUID:]):
13775	removes the "@" prefix before looking up for the CN and email address.
13776
137772009-05-01  Ludovic Marcotte <lmarcotte@inverse.ca>
13778
13779         * SoObjects/Appointments/SOGoAppointmentObject.m
13780	 ([SOGoAppointmentObject -PUTAction:]): Slightly optimized
13781	 and we now consider the "X-SOGo: NoGroupsDecomposition"
13782	 special header.
13783
137842009-04-30  Ludovic Marcotte <lmarcotte@inverse.ca>
13785
13786         * Added SoObjects/SOGo/SOGoGroup.{h.m} and
13787	 modified the LDAPSource, LDAPUserManager, SOGoAppoinmentObject
13788	 in order to add initial groups support which decomposes
13789	 groups to members when events are saved.
13790
137912009-04-27  Francis Lachapelle  <flachapelle@inverse.ca>
13792
13793	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
13794	-_fillBlocks:withEvent:withNumber:]:): fixed index of recurrence
13795	ID.
13796
137972009-04-22  Francis Lachapelle  <flachapelle@inverse.ca>
13798
13799	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
13800	-alarmsListAction]): only return the alarms active for the next 48
13801	hours and exclude any recurring event (for now).
13802
13803	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
13804	-viewAction]): if the form parameter "resetAlarm" is true, set the
13805	property X-WebStatus to "triggered" in the event's alarm.
13806
13807	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -viewAction]): new
13808	method that returns some of the task properties. Currently only
13809	used for the alarms. Behavior is similar to UIxAppointmentEditor.
13810
13811	* SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
13812	-quickRecord]): don't update the c_nextalarm field if the event is
13813	recurrent or if the property X-WebStatus is set to "triggered" in
13814	the alarm's trigger definition.
13815
13816	* SoObjects/Appointments/iCalToDo+SOGo.m ([iCalToDo
13817	-quickRecord]): idem.
13818
13819	* SoObjects/Appointments/SOGoAppointmentFolder.m
13820	([SOGoAppointmentFolder -fetchAlarmInfosFrom:to:]): new method
13821	that returns attributes of events and todos for which there's an
13822	active alarm within the next 48 hours.
13823
138242009-04-21  Ludovic Marcotte <lmarcotte@inverse.ca>
13825
13826        * Added Welsh translation - patches from the
13827	National Library of Wales.
13828	* Regenerated the SOPE patchset so that we correctly
13829	handle Oracle's reconnection problems on RAC. We now
13830	try by default 3 times before giving up when there
13831	is a failover to an other node part of the RAC.
13832	* Dropped old ChangeLog files and combined them
13833	in ChangeLog.old
13834	* Dropped old NOTES files
13835	* Added Scripts/sql-update-101_to_102.sh to update
13836	the database schema for the 1.0.2 release
13837	* Scripts/sogod-wrapper - updted this script to
13838	handle the TNS_NAMES environment variable for
13839	Oracle RAC.
13840	* Added the possibility to disable cache propagation
13841	in SOGoCache (together with SOGoUser and SOGoUserDefaults)
13842	in order to greatly reduce gdnc contention when a massive
13843	amount of operations are performed by the SOGo super-usernames
13844	* SoObjects/SOGo/SOGoGCSFolder.m: We avoid cache
13845	propagation when subscribing users to resources as
13846	a superuser.
13847	* UI/Scheduler/UIxCalListingActions.{h,m}: Added
13848	-alarmsListAction so that we correctly return the upcoming
13849	alarms. It does NOT yet handle correctly recurring components.
13850
138512009-04-21  Francis Lachapelle  <flachapelle@inverse.ca>
13852
13853	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
13854	-takeValuesFromRequest:inContext:]): removes any alarm if the
13855	vTodo doesn't have a due date.
13856
13857	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
13858	-_loadAlarms]): new method to extract the first alarm of the component.
13859
13860	* SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
13861	-quickRecord]): added support for an event's alarm. The database
13862	field "c_nextalarm" must first be added to all tables.
13863
138642009-04-13  Ludovic Marcotte <lmarcotte@inverse.ca>
13865
13866	* SoObjects/SOGo/LDAPSource.m: cleaned up and
13867	also correctly implemented -lookupContactEntry.
13868	* SoObjects/Contacts/SOGoContactLDAPFolder.m:
13869	we now use the correctly implemented -lookupContactEntry
13870	method instead of -lookupContactEntryWithUIDorEmail
13871	* Regenerated the SOPE patchset to include a fix
13872	for Oracle RAC.
13873
138742009-04-09  Ludovic Marcotte <lmarcotte@inverse.ca>
13875
13876        * Reverted previous patch and provided the correct
13877	fix in SOGoMailFolder: -postData:flags:
13878	* Fixed the compilation of unit tests for NGCards.
13879	* SoObjects/Mailer/SOGoMailFolder.m: Added -displayName
13880	which returns -nameInContainer to avoid crashes when
13881	sending ACL changes notifications for email folders.
13882
138832009-04-09  Francis Lachapelle  <flachapelle@inverse.ca>
13884
13885	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
13886	-sendMail]): create the Sent folder if it doesn't exist.
13887
138882009-04-07  Cyril Robert <crobert@inverse.ca>
13889
13890	* UI/Common/UIxPageFrame.m (isCompatibleBrowser): Fixed Safari 3 issue,
13891	was only accepting 4+
13892
138932009-04-06  Ludovic Marcotte <lmarcotte@inverse.ca>
13894
13895	* Improved the sogod-wrapper script in order to
13896	consider the IP address that can be specified
13897	in the WOPort user default. Patch from
13898	Romain LE DISEZ <romain.ledisez@netensia.fr>
13899	* SoObjects/SOGo/LDAPSource.{h.m}: Now possible to
13900	specify a scope for LDAP operations. Patch from
13901	Yann Cezard <yann.cezard@univ-pau.fr>
13902
139032009-04-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13904
13905	* SoObjects/SOGo/LDAPSource.m: we now support an "encryption"
13906	parameter, having either a value of "ssl" or "starttls" to define
13907	the type of encryption to be used, if any.
13908
139092009-04-01  Ludovic Marcotte <lmarcotte@inverse.ca>
13910
13911	* Dropped worthless tools
13912	* Fixed tons of compiler warnings
13913	* SoObjects/Contacts/SOGoContactLDAPFolder.m
13914	([SOGoContactLDAPFolder appendObject:withBaseURL:
13915	toREPORTResponse:]): We now check if we've got
13916	an exception when looking up contacts and the LDAP-part
13917	of SOGo is misconfigured and warn the admin (by adding
13918	a log entry) about it.
13919
139202009-03-31  Francis Lachapelle  <flachapelle@inverse.ca>
13921
13922	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
13923	_fetchFieldsforComponentOfType:]): the method _fixDates must be
13924	called even for the month view.
13925
139262009-03-25  Francis Lachapelle  <flachapelle@inverse.ca>
13927
13928	* UI/Common/UIxPageFrame.m ([UIxPageFrame -siteFavicon]): new
13929	method to allow the customization of the site favicon through the
13930	user defaults SOGoFaviconRelativeURL.
13931
13932	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): must retain
13933	the ivar language to avoid a crash if the language is retrieved
13934	from the user agent header returned by the browser.
13935
139362009-03-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13937
13938	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
13939	-takeValuesFromRequest:_rqinContext:_ctx]): ensure the values
13940	meant to construct the custom recurrence rule are consistent.
13941
13942	* UI/Scheduler/UIxCalMainView.m: if the module settings key
13943	exists, do not reset it.
13944
139452009-03-24  Ludovic Marcotte <lmarcotte@inverse.ca>
13946
13947	* UI/MailerUI/UIxMailListView.m
13948	([UIxMailListView messages)]:
13949	Adjusted the sort so it's a little bit faster
13950	and correctly work in case the server returns us
13951	the FETCH response in an order different that what
13952	we asked for.
13953
139542009-03-24  Francis Lachapelle  <flachapelle@inverse.ca>
13955
13956	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -invalidateLanguage]):
13957	new method to invalidate the language ivar.
13958
13959	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): must
13960	invalidate user's language ivar when it changes.
13961
13962	* SoObjects/SOGo/SOGoCache.m ([SOGoCache
13963	-_userDefaultsHaveChanged:]): must invalidate the user's language
13964	ivar when the defaults change.
13965
13966	* SoObjects/Appointments/SOGoCalendarComponent.m
13967	([SOGoCalendarComponent
13968	-sendEMailUsingTemplateNamed:forObject:previousObject:toAttendees:]):
13969	no longer send a deletion notification to an attendee who already
13970	declined the meeting.
13971
13972	* UI/MailPartViewers/UIxMailPartICalActions.m
13973	([UIxMailPartICalActions -_eventObjectWithUID:forUser:]): when
13974	looking for an event for a specific user, we now search into all
13975	the user's calendar folders.
13976
13977	* UI/MailPartViewers/UIxMailPartICalViewer.m
13978	([UIxMailPartICalViewer -startCalendarDate]): new method that returns
13979	the start date with the proper timezone.
13980	([-endCalendarDate]): idem for the end date.
13981	([-startDate]): new method that returns a formatted string of the
13982	start date.
13983	([-endDate]): idem for the end date. Also take care of all-day events.
13984	([-startTime]): new method that returns a formatted string ot the
13985	start time.
13986	([-endTime]): idem for the end time.
13987	([-isEndDateOnSameDay]): must subtract 1 second from end date when
13988	it's a all-day event.
13989
139902009-03-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
13991
13992	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
13993	-_loadAttendees]): make use of autoreleased strings to avoid a leak.
13994	([UIxComponentEditor -dealloc]): release componentCalendar.
13995
13996	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
13997	-_prepareDefaultMailAccounts]): return an autoreleased array to
13998	avoid a leak.
13999
14000	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
14001	-initWithRequest:newRequest]): retain dateFormatter, since it is
14002	released in -dealloc.
14003	([UIxCalListingActions -dealloc]): do not release startDate and
14004	endDate since they are not retained.
14005
140062009-03-23  Francis Lachapelle  <flachapelle@inverse.ca>
14007
14008	* SoObjects/Appointments/SOGoAppointmentObject.m
14009	([SOGoAppointmentObject -_lookupEvent:forUID:]): when looking for
14010	an event for a specific user, we now search into all the user's
14011	calendar folders.
14012
14013	* SoObjects/Appointments/SOGoAppointmentFolder.m
14014	([SOGoAppointmentFolder -lookupCalendarFoldersForUID:]): new
14015	method that returns an array of a user's calendar folders
14016	excluding the subscriptions.
14017
140182009-03-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14019
14020	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14021	-subscribe:reallyDoinTheNamesOf:delegatedUsersfromMailInvitation:isMailInvitationinContext:localContext]):
14022	when the user preferences didn't already contain a key matching
14023	the current module name, the subscriptions would not work. We thus
14024	create one if none exists yet.
14025
14026	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
14027	-appendSystemSources]): modified the return type and returns nil,
14028	to match the new SOGoParentFolder definition of the method.
14029	Otherwise, a confusion is created on the stack.
14030
140312009-03-23  Ludovic Marcotte <lmarcotte@inverse.ca>
14032
14033        * SoObjects/SOGo/SOGoUser.m:
14034	Don't retain/release the language ivar.
14035
140362009-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14037
14038	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): cache the
14039	language in an ivar again, that is reset when the user settings or
14040	defaults have been loaded successfully.
14041	([SOGoUser -userDefaults]): invoke "fetchProfile" on the defaults
14042	instance, in order to validate the DB connection.
14043
140442009-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14045
14046	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
14047	-initWithLogin:newLoginroles:newRoles]): removed "mailAccounts" ivar.
14048	([-mailAccounts]): no longer cache the mailAccounts info in an ivar.
14049
140502009-03-20  Ludovic Marcotte <lmarcotte@inverse.ca>
14051
14052        * SoObjects/SOGo/SOGoUserDefaults.{h,m}
14053	We are now way quicker to react when the database
14054	is down.
14055
140562009-03-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14057
14058	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
14059	-allContactSearchAction]): trap @"SOGoDBException" and return nil
14060	in that case.
14061
14062	* SoObjects/SOGo/SOGoUserDefaults.m ([SOGoUserDefaults
14063	-jsonRepresentation]): return "{}" if values is nil (due to a DB
14064	connection error).
14065
14066	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -userDefaults]): ensure the
14067	values are not nil before putting them in the cache. This fixes an
14068	exception occuring for setting a nil key in a dictionary.
14069	([SOGoUser -userSettings]): same as above.
14070	([SOGoUser -userDefaults]): if "value" is null, meaning that
14071	database connectivity has failed, don't try to set default values,
14072	which would trigger other connection tries.
14073
140742009-03-19  Francis Lachapelle  <flachapelle@inverse.ca>
14075
14076	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
14077	-_fetchFields:forComponentOfType:]): the _fixDates method doesn't
14078	have to be called for the month view.
14079
140802009-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14081
14082	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
14083	-foldersOfType:folderTypeforUID:uid]): now also returns the owner
14084	of the folders in the folder dictionary.
14085	([SOGoUserFolder -davCollectionQuery:queryContext]): works again
14086	for multiple users if the DAV:owner property is specified in the
14087	query. The response is formatted in a way that is compatible with
14088	both the 0.8x and 0.9x SOGo extensions.
14089
14090	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
14091	-homeFolderInContext:context]): no longer put the home folder in
14092	cache, since it uses an context that is freed and invalidated
14093	afterwards, which can cause crashes.
14094
140952009-03-19  Ludovic Marcotte <lmarcotte@inverse.ca>
14096
14097        * Updated the sope.spec file wrt to changes
14098	related to 0.9 -> 1.0
14099	* Updated the SOGo documentation to also reflect
14100	the version change.
14101
141022009-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14103
14104	* SoObjects/SOGo/SOGoUserFolder.m: initialize max to the correct value.
14105
141062009-03-18  Francis Lachapelle  <flachapelle@inverse.ca>
14107
14108	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -version]): new method
14109	that returns the application version.
14110
14111	* SOPE/NGCards/iCalDateTime.m ([iCalDateTime -dateTime]): when not
14112	defined, the timezone is now guessed from the date of the current object.
14113
141142009-03-18  Ludovic Marcotte <lmarcotte@inverse.ca>
14115
14116        * Updated the documentation for the SOGo
14117	update server.
14118	* Enabled support for Konqueror. We use the
14119	Safari 'exceptions' in the JavaScript code.
14120	* Main/SOGo.m: Corrected a small mistake in previous
14121	commit wrt sogod-0.9 > sogod change
14122	* Updated the NEWS file for the release
14123
141242009-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14125
14126	* SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
14127	-vCard]): same as below.
14128
14129	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
14130	-iCalStringForFreeBusyInfos:_infoswithMethod:methodfrom:_startDateto:_endDate]):
14131	same as below.
14132
14133	* SoObjects/Appointments/SOGoCalendarComponent.m
14134	([SOGoCalendarComponent -calendar:create:secure]): specify
14135	"-//Inverse inc./SOGo 1.0//EN" as PRODID.
14136
14137	* Main/sogod.m (convertOldSOGoDomain): new function that convert
14138	the old "sogod-0.9" NSUserDefaults domain to "sogod".
14139
14140	* Main/SOGoProductLoader.m ([SOGoProductLoader
14141	+sogoMajorVersion]): removed useless method.
14142	([SOGoProductLoader +sogoMinorVersion]): removed useless method.
14143	([SOGoProductLoader -init]): productDirectoryName is no longer an
14144	ivar but a static string.
14145	([SOGoProductLoader -productSearchPathes]): removed FHS paths from
14146	search paths.
14147
14148	* Main/SOGo.m ([SOGo -name]): returns "SOGo".
14149
14150	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
14151	-appendPersonalSources]): returns an NSException.
14152	([SOGoParentFolder -appendSystemSources]): same as above.
14153	([SOGoParentFolder -appendSubscribedSources]): same as above.
14154	([SOGoParentFolder
14155	-lookupName:nameinContext:lookupContextacquire:acquire]): if
14156	initSubfolders returns an exception, this probably means a db
14157	error occured, so we log the exception reason and return a 503.
14158	([SOGoParentFolder -subFolders]): this method is invoked when a
14159	PROPFIND is made on the current collection. If a DB error occurs,
14160	we raise it to prevent SOPE from returning a 207 status code.
14161
14162	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
14163	-lookupName:_keyinContext:_ctxacquire:_flag]): no longer invoke
14164	the _accessDeniedPage when accessing the module is forbidden to
14165	the current user. Instead, returns an HTTP exception with code
14166	404.
14167
141682009-03-17  Ludovic Marcotte <lmarcotte@inverse.ca>
14169
14170	* Documentation/SOGo Installation Guide.odt
14171	Updated to mention MySQL and to refer as 1.0
14172	as the version number
14173	* Scripts/sogo-init.d-debian and
14174	Scripts/sogo-init.d-redhat
14175	We now kill gdnc (only processes belonging to
14176	the sogo user) when stopping sogod.
14177
141782009-03-16  Ludovic Marcotte <lmarcotte@inverse.ca>
14179
14180        * SoObjects/SOGo/LDAPSource.m: We now support
14181	the specification of a filter. Also updated
14182	the installation guide to document this new parameter
14183	* sogo.spec: Modified so that we use our tmpwatch
14184	script from /etc/cron.daily
14185
141862009-03-16  Francis Lachapelle  <flachapelle@inverse.ca>
14187
14188	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
14189	-_fixDates:]): moved corrections for daylight saving time in this
14190	new method.
14191
14192	* SoObjects/Appointments/SOGoAppointmentFolder.m
14193	([SOGoAppointmentFolder
14194	-fixupCycleRecord:_recordcycleRange:_rfirstInstanceCalendarDateRange:_firforViewRange:_viewRange]):
14195	propagate the start date of the cycle so it can be used later to
14196	adjust the timezone.
14197	* ([SOGoAppointmentFolder
14198	-_appendCycleException:firstInstanceCalendarDateRange:fromRow:forRange:toArray:]): idem	.
14199
142002009-03-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14201
14202	* SoObjects/Appointments/SOGoAppointmentObject.m
14203	([SOGoAppointmentObject -occurence:occ]): create the occurence
14204	with the first calendar event as master.
14205
14206	* SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
14207	-occurence:occ]): create the occurence with the first calendar
14208	task as master.
14209
14210	* SoObjects/Appointments/SOGoCalendarComponent.m
14211	([SOGoCalendarComponent
14212	-lookupName:lookupNameinContext:localContextacquire:acquire]):
14213	initialize "isNewComponent" to NO if it's not, to avoid problems
14214	with unitialized memory.
14215
14216	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
14217	-setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
14218	bug setting the CN and UID field only if they were set before,
14219	rather than checking their value passed as parameter.
14220
142212009-03-13  Ludovic Marcotte <lmarcotte@inverse.ca>
14222
14223        * Optimized the IMAP client code to avoid
14224	unnecessary STATUS calls.
14225
142262009-03-12  Ludovic Marcotte <lmarcotte@inverse.ca>
14227
14228        * Updated the SOPE patchset in order to
14229	fix a bug in NGMimeBodyParser.
14230	* Updated again the SOPE patchset to enable
14231	MySQL support.
14232
142332009-03-11  Francis Lachapelle  <flachapelle@inverse.ca>
14234
14235	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
14236	-readFreeBusyAction]): we now set the content-type to "text/plain"
14237	to fix issues with nginx.
14238
14239	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
14240	-contactSearchAction]): idem.
14241
142422009-03-11  Ludovic Marcotte <lmarcotte@inverse.ca>
14243
14244        * SoObjects/Appointments/SOGoAppointmentFolder.m
14245	We now correctly escape caracters that can be
14246	present in the filename prior to initalizing
14247	the NSURL instance.
14248	* UI/MailerUI/UIxMailAccountActions.m
14249	We correctly intialize the "unseen" variable
14250	to nil in _statusFolders.
14251
142522009-03-09  Ludovic Marcotte <lmarcotte@inverse.ca>
14253
14254	* Documentation/SOGo Installation Guide.odt
14255	Added two examples for default ACL.
14256	* Updated the SOPE patchset
14257
142582009-03-08  Ludovic Marcotte <lmarcotte@inverse.ca>
14259
14260	* Updated the SOGo Mozilla Thunderbird Configuration
14261	guide to add a note that WOApplicationRedirectURL
14262	MUST match the updateURL in extensions.rdf from
14263	SOGo Integrator
14264
142652009-03-05  Ludovic Marcotte <lmarcotte@inverse.ca>
14266
14267	* Updated prototype to the latest development version
14268	in order to fix an IE7 bug related to the DOM load event
14269	* Improved the mod_proxy/mod_proxy_balancer configuration
14270
142712009-03-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14272
14273	* SoObjects/SOGo/SOGoLDAPUserDefaultsBootstrap.m: new module for
14274	the libSOGoNSUserDefaults.so.1 library built when enabling
14275	ldap-based configuration.
14276
14277	* Main/sogod.m (BootstrapNSUserDefaults): added function to load a
14278	library named "libSOGoNSUserDefaults.so.1" which would bootstrap
14279	the NSUserDefaults class with an arbitrary "pose class".
14280
142812009-03-04  Ludovic Marcotte <lmarcotte@inverse.ca>
14282
14283        * Fixed a small issue when fetching parts where
14284	the encoding could be nil and subsequently, the
14285	path couldn't be set.
14286
142872009-03-03  Ludovic Marcotte <lmarcotte@inverse.ca>
14288
14289        * Fixed various small issues with the SOGo
14290	cache subsystem.
14291
142922009-03-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14293
14294	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -dayClasses]):
14295	fixed the way the number of the current day is deduced,
14296	independently from the timezone (d. saving time or not).
14297
142982009-03-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14299
14300	* SoObjects/Appointments/SOGoComponentOccurence.m
14301	([SOGoComponentOccurence -setComponent:newComponent]): retain the
14302	component's parent instead of the component itself, which is
14303	already retain by its parent anyway. See 2009-02-06 from me below.
14304	([SOGoComponentOccurence -setMasterComponent:newMaster]): no
14305	longer retain the "master" occurence since its parent is already
14306	retained.
14307
143082009-03-02  Ludovic Marcotte <lmarcotte@inverse.ca>
14309
14310	* SoObjects/SOGo/SOGoObject.m
14311	([SOGoObject -davRecordForUser:parameters:]):
14312	Don't initialize the SOGoUser variable of
14313	nocn AND noemail are passed.
14314	* Dropped Protocols/* from the repository.
14315	* Added missing Dutch wox templates
14316
143172009-02-23  Ludovic Marcotte <lmarcotte@inverse.ca>
14318
14319	* Updated German translation. Patch from
14320	Alexander Greiner-Baer <sogo-algb@freenet.de>
14321	* Added Italian translation. Patch from
14322	Marco Lertora <marco.lertora@infoporto.it>
14323	* Combined the various caches and moved the logic
14324	towards the SOGoCache class. Deprecated the
14325	SOGoLDAPUserManagerCleanupInterval defaults.
14326	Now only SOGoCacheCleanupInterval should be used.
14327
143282009-02-19  Francis Lachapelle  <flachapelle@inverse.ca>
14329
14330	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
14331	-defaultSortKey]): replaced "displayName" by "c_cn", following
14332	changes made on 2009-02-06.
14333
14334	* UI/Common/WODirectAction+SOGo.m ([WODirectAction
14335	-responseWithStatus:]): set the default type so Firefox doesn't
14336	complain when using nginx with SOGo.
14337
143382009-02-17  Ludovic Marcotte <lmarcotte@inverse.ca>
14339
14340        * SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
14341	-vCard]): We now correctly handle most address fields coming from
14342	an LDAP server during the generation of the vCard.
14343
143442009-02-17  Francis Lachapelle  <flachapelle@inverse.ca>
14345
14346	* UI/MailerUI/UIxMailListView.m ([UIxMailListView -messages]):
14347	forced ordering of messages based on sorted UIDs.
14348
14349	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
14350	-allContactSearchAction]): replaced references to "displayName" by
14351	"c_cn", following changes made on 2009-02-06.
14352
14353	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
14354	-_qualifierForFilter:]): changed search in email address to match
14355	search behavior of Thunderbird.
14356
14357	* SoObjects/SOGo/LDAPSource.m ([LDAPSource -_qualifierForFilter:]): idem.
14358
143592009-02-16  Ludovic Marcotte <lmarcotte@inverse.ca>
14360
14361        * Updated Dutch translation - patch from
14362	Robert-Jan van Baal
14363
143642009-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14365
14366	* SoObjects/Contacts/SOGoContactLDAPFolder.m
14367	([SOGoContactLDAPFolder
14368	-appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): don't
14369	lookup the returned object if its c_name has no length.
14370
143712009-02-06  Francis Lachapelle  <flachapelle@inverse.ca>
14372
14373	* SoObjects/Contacts/SOGoUserFolder+Contacts.[hm]: new class to
14374	add CardDAV stuff. Currently only implements the
14375	addressbook-home-set report from the principal URL.
14376
143772009-02-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14378
14379	* SoObjects/Appointments/SOGoAppointmentFolder.m
14380	([SOGoAppointmentFolder
14381	-fetchFields:_fieldsfrom:_startDateto:_endDatetitle:titlecomponent:_componentadditionalFilters:filtersincludeProtectedInformation:_includeProtectedInformation]):
14382	added the "c_cycleinfo" and "c_cycleenddate" fields to the list of
14383	fields that should not be stripped when removing protected informations.
14384
14385	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -dealloc])
14386	([UIxTaskEditor -todo]): same as below (apts).
14387
14388	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
14389	-event]): retain the event parent calendar object instead of the
14390	event itself.
14391	([UIxAppointmentEditor -dealloc]): release the above calendar.
14392
14393	* UI/MailPartViewers/UIxMailPartICalViewer.m
14394	([UIxMailPartICalViewer -dealloc]): no longer release "inEvent"
14395	since it does not need to be retained.
14396
14397	* Main/SOGo.m ([SOGo +initialize]): added handling of the
14398	"SOGoDebugLeaks" configuration variable.
14399	([SOGo -dispatchRequest:_request]): log the classes of instances
14400	that were leaked between the handling of the request, if
14401	SOGoDebugLeaks is set.
14402
14403	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14404	-aclsForUser:uidforObjectAtPath:objectPathArray]): cache an empty
14405	array if not acl have been returned for the specified user.
14406
14407	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
14408	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
14409	same as below.
14410	([SOGoContactGCSFolder -fixupContactRecord:contactRecord]): new
14411	method that initializes c_mail, c_screenname, c_o,
14412	c_telephonenumber to empty strings if not found.
14413
14414	* SoObjects/Contacts/SOGoContactLDAPFolder.m
14415	([SOGoContactLDAPFolder
14416	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
14417	no longer make use of the displayName, mail, screenName, phone and
14418	org intermediary keys.
14419
14420	* UI/Contacts/UIxContactsListView.m ([-currentCName]): removed
14421	useless method.
14422
144232009-02-05  Francis Lachapelle  <flachapelle@inverse.ca>
14424
14425	* UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:):
14426	we now set the content-type to "text/plain" to fix issues with nginx.
14427
14428	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
14429	([UIxMailPartHTMLViewer
14430	-startElement:namespace:rawName:attributes:]): the base tag must be ignored.
14431
144322009-01-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
14433
14434        * Updated the Apache section in the installation
14435	and configuration guide
14436	* Apache/SOGo.conf
14437	Updated to use mod_proxy and mod_proxy_balancer
14438	instead of mod_ngobjweb. We now also distribute
14439	requests across three sogod processes.
14440	* sogo.spec
14441	Removed mod_ngobjweb from the build dependancies
14442
144432009-01-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14444
14445	* SoObjects/Appointments/SOGoAppointmentFolder.m
14446	([SOGoAppointmentFolder -fixupRecord:_record]): removed the unused
14447	isAllDay local variable.
14448	([SOGoAppointmentFolder -fixupRecords:records]): removed the
14449	unused "fetchRange:" argument.
14450
14451	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14452	+folderWithSubscriptionReference:referenceinContainer:aContainer]):
14453	same as below.
14454
14455	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -realNameInContainer]):
14456	escape the owner name as a potential CSS identifier.
14457
14458	* SoObjects/SOGo/NSString+Utilities.m ([NSString
14459	-asCSSIdentifier]): escape the "_" character first.
14460
14461	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14462	-subscribe:reallyDoinTheNamesOf:delegatedUsersfromMailInvitation:isMailInvitationinContext:localContext]):
14463	explicitly set the content-type of the response to text/plain with
14464	charset='utf-8' to work-around a bug in Firefox, complaining about
14465	a hypothetical text/xml content he does not receive.
14466	* UI/Common/WODirectAction+SOGo.m ([WODirectAction
14467	-responseWith204]):
14468	same as above.
14469
144702009-01-19  Ludovic Marcotte  <lmarcotte@inverse.ca>
14471
14472	* Main/SOGo.m
14473	We check if we have an empty configuration upon startup
14474	and warn the user about this.
14475
144762009-01-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14477
14478	* SoObjects/SOGo/NSString+Utilities.m ([NSString
14479	-asCSSIdentifier]): new method returning a "safe" CSS identifier
14480	based on the original string.
14481
144822009-01-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14483
14484	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -userDefaults]): make use
14485	of more explicit names for the variables used. Invoke a new [self
14486	primaryUserDefaults] that fetches the defaults from the database,
14487	so as to separate that mechanism from the caching mechanisme.
14488	([SOGoUser -userSettings]): same as above.
14489
144902009-01-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14491
14492	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
14493	-aclUsers]): fixed method to invoke [container
14494	aclUsersForObjectAtPath:] with the resulting path as argument
14495	instead of the path itself.
14496
14497	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14498	-sendFolderAdvisoryTemplate:template]): the condition check for
14499	sending folder advisories has been moved here.
14500	([SOGoGCSFolder -sendFolderAdvisoryTemplate:template]): now a
14501	public method.
14502
145032009-01-07  Ludovic Marcotte  <lmarcotte@inverse.ca>
14504
14505	* Added Documentation/SOGo Mobile Devices Configuration.odt
14506	* Fixed typos in the Intallation & Configuration guide
14507	* Added Documentation/SOGo Mozilla Thunderbird Configuration.odt
14508
145092009-01-07  Francis Lachapelle  <flachapelle@inverse.ca>
14510
14511	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
14512	-_handleCustomRRule:]): set the proper timezone for the end date.
14513	([UIxComponentEditor -_loadRRules]): idem.
14514	([UIxComponentEditor -init): instantiates an UIxDatePicker object
14515	to retrieve the proper date format.
14516
14517	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
14518	-saveAction]): for recurrent events with an end date, the method
14519	_adjustRecurrentRules must be called unconditionally. This fixes
14520	the missing occurence on the last day.
14521	([UIxAppointmentEditor -_adjustRecurrentRules]): fixed adjustment
14522	of end date by using the proper timezone.
14523
145242009-01-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14525
14526	* SoObjects/SOGo/NSString+Utilities.m ([NSString
14527	-doubleQuotedString]): new method that returns a double-quoted and
14528	properly escaped version of the string. Since it's the same
14529	algorithm used in jsonRepresentation, the latter is now calling
14530	this new method.
14531
145322009-01-06  Ludovic Marcotte  <lmarcotte@inverse.ca>
14533
14534	* SoObjects/Appointments/SOGoCalendarComponent.m
14535	([SOGoCalendarComponent -_filterComponent:]):
14536	We now set the proper component summary just like
14537	we do in the Web UI when 'securing' the
14538	returned component. Also adjusted the Localizable.strings
14539	files accordingly.
14540
145412008-12-30  Ludovic Marcotte  <lmarcotte@inverse.ca>
14542
14543	* Dropped the following files:
14544	UI/Scheduler/UIxAppointmentProposal.m
14545	UI/Scheduler/UIxTaskProposal.m
14546	* SoObjects/Appointments/SOGoAppointmentFolder.m
14547	SoObjects/Contacts/SOGoContactGCSFolder.m
14548	UI/WebServerResources/SchedulerUI.js
14549	Fixed the escaping of characters and associated
14550	search methods.
14551	* SoObjects/SOGo/SOGoGCSFolder.m
14552	([SOGoGCSFolder aclsForUser:forObjectAtPath:]):
14553	Added two new defaults to control the default
14554	ACLs when none are specified:
14555	SOGoCalendarDefaultRoles and SOGoContactsDefaultRoles
14556	They are both arrays in which we set strings,
14557	for example :
14558	SOGoCalendarDefaultRoles = ("ObjectCreator", "PublicViewer");
14559	SOGoContactsDefaultRoles = ("ObjectEditor");
14560
145612008-12-30  Francis Lachapelle  <flachapelle@inverse.ca>
14562
14563	* SoObjects/Appointments/SOGoAppointmentObject.m
14564	([SOGoAppointmentObject -newOccurenceWithID:]): fixed the start
14565	date when returning an occurrence of an all-day event.
14566
14567	* SoObjects/Appointments/SOGoAppointmentFolder.m
14568	([SOGoAppointmentFolder
14569	-fixupCycleRecord:cycleRange:firstInstanceCalendarDateRange:forViewRange:]):
14570	Fixed the start/end dates and recurrence id of events that span a
14571	time period where the daylight saving time changes.
14572	([SOGoAppointmentFolder
14573	-_appendCycleException:firstInstanceCalendarDateRange:fromRow:forRange:toArray:]):
14574	idem.
14575
14576	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
14577	-defaultAction]): idem.
14578	([UIxAppointmentEditor -viewAction]): idem.
14579
145802008-12-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14581
14582	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
14583	-eventsBlocksAction]): fixed a crash occuring in the rare
14584	situation where an event end date would be inferior than its start
14585	date.
14586
145872008-12-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
14588
14589	* SoObjects/Appointments/SOGoAppointmentFolder.{h,m}
14590	Added an additional parameter to fetchFields:...
14591	so that we can avoid stripping relevant information.
14592	This is useful when verifying the freebusy of
14593	meeting participants as we must not strip the
14594	c_partstates/c_partmails fields.
14595	* SoObjects/SOGo/SOGoObject.{h,m}
14596	We now permit two parameters during the user-list
14597	REPORT in order to avoid LDAP lookups.
14598
145992008-12-23  Francis Lachapelle  <flachapelle@inverse.ca>
14600
14601	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
14602	-_adjustRecurrentRules]): new method to adjust the until date of a
14603	recurrent rule using the start time of the event.
14604
146052008-12-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
14606
14607        * Added the "sent-by" field to all invitation
14608	update templates.
14609
146102008-12-19  Francis Lachapelle  <flachapelle@inverse.ca>
14611
14612	* iCalWeeklyRecurrenceCalculator.m ([iCalDailyRecurrenceCalculator
14613	-recurrenceRangesWithinCalendarDateRange:_r]): rewrote method to
14614	handle timezones. Removed usage of julian numbers.
14615
14616	* iCalDailyRecurrenceCalculator.m ([iCalWeeklyRecurrenceCalculator
14617	-recurrenceRangesWithinCalendarDateRange:_r]): idem. Also fixed
14618	the handling of intervals.
14619
146202008-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14621
14622	* UI/Common/UIxPageFrame.m ([UIxPageFrame -userSettings]): new
14623	accessor method to avoid loading the user settings with an
14624	additional json request.
14625	([UIxPageFrame -userDefaults]): same as above for user defaults.
14626
146272008-12-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14628
14629	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
14630	-lookupName:nameinContext:lookupContextacquire:acquire]): we avoid
14631	getting subscribed sources if not needed, which reduces the amount
14632	of requests to the database.
14633
14634	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
14635	-dealloc]): we release componentCalendar here to avoid a leak
14636	(since if set, it was through a call to ASSIGN()).
14637
14638	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
14639	-setComponent:newComponent]): since componentCalendar is released
14640	at deallocation, we need to retain it, and to release the previous
14641	value to avoid a leak...
14642
146432008-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14644
14645	* SoObjects/SOGo/SOGoObject.m ([SOGoObject +webdavAclManager]):
14646	same as below.
14647	([SOGoObject -doesRetainContainer]): return "NO" here in order to
14648	avoid leaks.
14649
14650	* SoObjects/Appointments/SOGoAppointmentFolder.m
14651	([SOGoAppointmentFolder +webdavAclManager]): same as below.
14652
14653	* SoObjects/Appointments/SOGoAppointmentObject.m
14654	([SOGoAppointmentObject +webdavAclManager]): same as below.
14655
14656	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder +webdavAclManager]):
14657	same as below.
14658
14659	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
14660	+webdavAclManager]): same as below.
14661
14662	* SoObjects/SOGo/SOGoObject.m ([SOGoObject +webdavAclManager]):
14663	same as below.
14664
14665	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
14666	+webdavAclManager]): declare singleton as static to avoid leaking.
14667
146682008-12-15  Ludovic Marcotte  <lmarcotte@inverse.ca>
14669
14670        * Updated german translations - patch from
14671	Alexander Greiner-Baer <sogo-algb@freenet.de>
14672	* SoObjects/Contacts/SOGoContactLDIFEntry.m
14673	([SOGoContactLDIFEntry -vCard]): We now force
14674	the usage of the SOGoLDAPContactInfoAttribute,
14675	if defined, over "description" when generating
14676	the "NOTE" attribute.
14677	* SoObjects/SOGo/SOGoObject.m
14678	Optimized a bit and we also now support setting
14679	roles, or adding/removing roles for multiple users
14680	at once.
14681
146822008-12-14  Ludovic Marcotte  <lmarcotte@inverse.ca>
14683
14684	* SoObjects/Appointments/SOGoAppointmentFolder.m
14685	([SOGoAppointmentFolder -_buildStripFieldsFromFields:]):
14686	Don't strip the c_isopaque for the DAndTViewer role.
14687
146882008-12-09  Francis Lachapelle  <flachapelle@inverse.ca>
14689
14690	* SoObjects/Appointments/SOGoAppointmentObject.m
14691	([SOGoAppointmentObject -_handleUpdatedEvent:fromOldEvent:]): if
14692	the sequence doesn't change, attendees will no longer receive a
14693	notification by email.
14694	([SOGoAppointmentObject
14695	-_updateAttendee:ownerUser:forEventUID:withRecurrenceId:withSequence:forUID:shouldAddSentBy:]):
14696	if an attendee accepts all events, on the master event of a
14697	repeating event will be updated; occurrences will no longer be affected.
14698	([SOGoAppointmentObject -postCalDAVEventRequestTo:from:]): when
14699	dealing with an occurrence of a repeating event, the function now
14700	proprly update each attendee's calendar.
14701	([SOGoAppointmentObject
14702	-takeAttendeeStatus:from:withRecurrenceId:]): fixed handling of an
14703	occurrence of a repeating event.
14704	([SOGoAppointmentObject -postCalDAVEventReplyTo:from:]): idem.
14705
147062008-12-08  Ludovic Marcotte  <lmarcotte@inverse.ca>
14707
14708	* SoObjects/Appointments/SOGoAppointmentFolder.m
14709	([SOGoAppointmentFolder bareFetchFields:...]): we now
14710	correctly handle the privacy SQL string w/o loosing
14711	the previously defined filters.
14712
147132008-12-05  Francis Lachapelle  <flachapelle@inverse.ca>
14714
14715	* SoObjects/Appointments/SOGoCalendarComponent.m
14716	([SOGoCalendarComponent -_updateRecurrenceIDsWithEvent:]): fixed
14717	modification of the new event and added adjustement of the
14718	exception dates.
14719
14720	* SoObjects/Appointments/SOGoAppointmentObject.m
14721	([SOGoAppointmentObject
14722	-_removeEventFromUID:owner:withRecurrenceId:]): for a repeating
14723	event, the occurrence was not properly removed.
14724
14725	* SoObjects/Appointments/SOGoComponentOccurence.m
14726	([SOGoComponentOccurence -prepareDelete]): for a repeating event,
14727	the exception date was not added and the occurence was not
14728	properly deleted.
14729
14730	* UI/MailPartViewers/UIxMailPartICalViewer.m
14731	([UIxMailPartICalViewer -isEventStoredInCalendar]): when dealing
14732	with an occurrence of a repeating event, the function now properly
14733	verify the presence of the occurence and not only the event.
14734
147352008-12-05  Ludovic Marcotte  <lmarcotte@inverse.ca>
14736
14737	* SOPE/NGCards/NSString+NGCards.m
14738	We avoid escaping the comma during content generation
14739	* SOPE/NGCards/iCalDailyRecurrenceCalculator.m
14740	Fixed RRULE lamenesses.
14741
147422008-12-04  Ludovic Marcotte  <lmarcotte@inverse.ca>
14743
14744	* Fixed a typ in SoObjects/SOGo/SOGoCache.m
14745	that would lead to a crash
14746
147472008-12-03  Francis Lachapelle  <flachapelle@inverse.ca>
14748
14749	* UI/MailPartViewers/UIxMailPartICalViewer.m
14750	([UIxMailPartICalViewer -storedEvent]): returns the occurence of
14751	the repeating event if recurrenceId is defined.
14752
14753	* UI/MailPartViewers/UIxMailPartICalActions.m
14754	([UIxMailPartICalActions -_setupChosenEventAndEventObject:]):
14755	fixed comparison of the calendar and email event when dealing with
14756	an occurence of a repeating event.
14757	([UIxMailPartICalActions -_updateAttendee:ownerUser:forEventUID:withRecurrenceId:forUID:shouldAddSentBy:]):
14758	fixed handling of status update for one occurence of a repeating event.
14759
14760	* SoObjects/Appointments/SOGoAppointmentObject.m
14761	([SOGoAppointmentObject -saveComponent:]): fixed handling of an
14762	occurence modification (resulting a properly written email sent to
14763	attendees).
14764	([SOGoAppointmentObject
14765	_removeEventFromUID:owner:withRecurrenceId]:): fixed handling of
14766	an occurrence deletion. In this case an exception date must be
14767	added to the event.
14768
147692008-12-02  Ludovic Marcotte  <lmarcotte@inverse.ca>
14770
14771        * SoObjects/Appointments/SOGoAppointmentFolder.m
14772	Modified to handle correctly the classification
14773	of events when fetching the etags in order to
14774	not return unaccessible components.
14775
147762008-12-01  Ludovic Marcotte  <lmarcotte@inverse.ca>
14777
14778        * Improved the cache sync process and added
14779	safetiness using a db transaction.
14780
147812008-12-01  Francis Lachapelle  <flachapelle@inverse.ca>
14782
14783	* SoObjects/Appointments/SOGoAppointmentObject.m
14784	([SOGoAppointmentObject -prepareDeleteOccurence:]): fixed handling
14785	of occurence deletion by an attendee.
14786	([-changeParticipationStatus: forRecurrenceId:]): fixed handling
14787	of changing the attendee's status when no occurrence was
14788	previously defined.
14789
14790	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
14791	-takeValuesFromRequest: inContext:]): replaced pulldown
14792	transparency menu by a checkbox (Show Time as Free).
14793
147942008-12-01  Ludovic Marcotte  <lmarcotte@inverse.ca>
14795
14796        * We now try to match the c_name and c_uid
14797	when creating events from the Web interface.
14798	This can avoid creating duplicate events
14799	with IMIP when calendar refreshes haven't occured
14800	before the accept/decline/tentative actions.
14801
148022008-11-29  Ludovic Marcotte  <lmarcotte@inverse.ca>
14803
14804	* Updated german translation - patch from
14805	Alexander Greiner-Baer <sogo-algb@freenet.de>
14806
148072008-11-28  Ludovic Marcotte  <lmarcotte@inverse.ca>
14808
14809        * We no longer show the previous/new location
14810	if it's empty in the invitation update templates.
14811
148122008-11-26  Ludovic Marcotte  <lmarcotte@inverse.ca>
14813
14814	* SoObjects/SOGo/SOGoGCSFolder.m
14815	We correctly wrap ACL additions around a
14816	database transaction.
14817	* Updated the code wrt acting on behalf of
14818	someone else to speed up things and also to
14819	honor the participation status of the one acting
14820	on behalf of someone else.
14821
148222008-11-26  Ludovic Marcotte  <lmarcotte@inverse.ca>
14823
14824	* SoObjects/SOGo/SOGoGCSFolder.m
14825	We escape the ' character in the folder name
14826	before trying to set it.
14827	* SoObjects/Appointments/SOGoAppointmentObject.m
14828	We now handle the originator/organizer correctly
14829	when posting CalDAV messages.
14830
148312008-11-24  Ludovic Marcotte  <lmarcotte@inverse.ca>
14832
14833        * We now sort the results in the subsription window
14834
148352008-11-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14836
14837	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
14838	-toManyRelationshipKeys]): return the subfolders in the order by
14839	which they appear in the web interface, to avoid confusing
14840	Lighting with its Inbox management and so that the folders appear
14841	in an ordered way.
14842
148432008-11-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14844
14845	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
14846	-usersSearchAction]): new method, derived from the previous
14847	version of foldersSearchAction, but that only returns username and
14848	contact info about matching users.
14849	([SOGoUserHomePage -foldersSearchAction]): new implementation that
14850	returns the folders available for subscription of the only user
14851	passed as parameter.
14852
148532008-11-23  Ludovic Marcotte  <lmarcotte@inverse.ca>
14854
14855        * UI/Scheduler/UIxComponentEditor.m - _loadAttendees
14856	We set the name to the rfc822 email address if the
14857	cn is not available. This avoid NOT showing attendees
14858	from the Web interface when only the email address
14859	was specified from the attendee list.
14860
148612008-11-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14862
14863	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
14864	-davCollectionQuery:queryContext]): simplified method by returning
14865	only the folders with the specified type that are shared by the
14866	owner of the current user folder. The folder owner is now
14867	identified correctly with his personal folder principal.
14868	([SOGoUserFolder -davUserQuery:queryContext]): when an LDAP info
14869	attribute is available for the user, we return it too.
14870
14871	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
14872	+initialize]): we need to retain the LDAPContactInfoAttribute
14873	static var, to avoid a zombie.
14874	([LDAPUserManager -fetchContactsMatching:filter])
14875	([LDAPUserManager -fetchUsersMatching:filter]): the info attribute
14876	is returned if the related entry does NOT contain it yet: the test
14877	was reverted.
14878
148792008-11-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
14880
14881        * Modified the invitation "update" templates
14882	to display the summar in the email subject.
14883	* Commented out a premature optimization in
14884	SOGoAppointmentFolder.m
14885
148862008-11-20  Ludovic Marcotte  <lmarcotte@inverse.ca>
14887
14888	* Fixed a crash issue in SOGoCache - we don't
14889	replaced the cached object.
14890	* Reworked the freebusy code to ignore c_status
14891	and rather consider the values of the particpant
14892	states (accepted/needs-action/declined)
14893
148942008-11-18  Ludovic Marcotte  <lmarcotte@inverse.ca>
14895
14896        * SoObjects/Appointments/SOGoAppointmentObject.m
14897	Modified postCalDAVEventRequestTo: from: to handle
14898	invitation updates from normal ones.
14899
149002008-11-17  Ludovic Marcotte  <lmarcotte@inverse.ca>
14901
14902        * Added back the appointment update notification
14903	templates from RC8 and updated them.
14904	* SoObjects/Appointments/SOGoAppointmentFolder.m
14905	Greatly improved the speed of getetag calls
14906	* SoObjects/SOGo/SOGoGCSFolder.m
14907	We now allow multiple users subscribe/unsubscribe
14908	requests during one DAV call.
14909
149102008-11-13  Ludovic Marcotte  <lmarcotte@inverse.ca>
14911
14912	* SoObjects/Appointments/SOGoAppointmentObject.m
14913	We now remove the SENT-BY when updating attendees
14914	if it's the attendee himself that changes his
14915	particpation status
14916	* SoObjects/SOGo/SOGoUserFolder.m
14917	Improve the comparison of strings by rather using
14918	URL objects.
14919	* SOPE/NGCards/CardVersitRenderer.m
14920	We now properly quote attribute values if they
14921	contain an ':' in them
14922	* SoObjects/Appointments/iCalPerson+SOGo.m
14923	Fixed the check for quoted SENT-BY
14924	* Updated the iCal invitation replies to take
14925	the SENT-BY into account.
14926
149272008-11-11  Ludovic Marcotte  <lmarcotte@inverse.ca>
14928
14929	* Fixed a couple of issues in the new pref caching
14930	  subsystem.
14931	* Cleaned up the caching code and activated
14932	  distributed notifications by default.
14933
149342008-10-29  Francis Lachapelle  <flachapelle@inverse.ca>
14935
14936	* SoObjects/SOGo/SOGoUser.m ([-userDefaults]): added support for
14937	system-wide defaults for ReplyPlacement, SignaturePlacement,
14938	MessageForwarding, and MessageCheck.
14939
149402008-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14941
14942	* SoObjects/SOGo/SOGoMailer.m ([SOGoMailer
14943	-sendMailData:datatoRecipients:recipientssender:sender]): don't
14944	HELO the server after connecting, since the connectToHost: method
14945	already has "EHLO"'d it after the connection was established.
14946
14947	* UI/MailerUI/UIxMailMainFrame.m ([-quotaSupport]): removed
14948	useless method.
14949
14950	* SoObjects/SOGo/NSArray+Utilities.m ([NSArray
14951	-objectsForKey:keynotFoundMarker:marker]): added a
14952	"notFoundMarker:" parameter to the "objectsForKey:" method. When
14953	the marker is nil and no match is found in the current dictionary,
14954	the entry is ignored.
14955
149562008-10-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14957
14958	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
14959	-contactSearchAction]): fixed typing of "contacts", which actually
14960	is an NSArray.
14961
149622008-10-17  Francis Lachapelle  <flachapelle@inverse.ca>
14963
14964	* UI/Common/UIxPageFrame.m ([NSString userLanguage]): returns the
14965	user's language. Used to make this information available through
14966	JavaScript.
14967
149682008-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14969
14970	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL])
14971	([SOGoObject -soURL]): adjusted last change by checking that the
14972	port returned initially is not nil before initializing the
14973	returned NSURL.
14974
149752008-10-15  Francis Lachapelle  <flachapelle@inverse.ca>
14976
14977	* UI/Contacts/UIxContactEditor.m ([_setupEmailFields]): avoid
14978	setting the work mail if only the home mail is defined.
14979
14980	* OGoContentStore/OCSContactFieldExtractor.m ([NSMutableDictionary
14981	extractQuickFieldsFromVCard:vCard]): set email address to an empty
14982	string if not defined.
14983
14984	* UI/Contacts/UIxContactFoldersView.m ([WOActionResults
14985	allContactSearchAction]): returned array is now properly
14986	initialized if no result is found.
14987
149882008-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
14989
14990	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
14991	-columnsDisplayOrder]): slightly optimized method by reducing the
14992	amount of method calls. Initialized userDefinedOrder as an
14993	NSMutableArray instead of an NSArray. Fixed indentation.
14994
14995	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL])
14996	([SOGoObject -soURL]): appended the port number to the hostname
14997	used to construct the NSURL instance.
14998
149992008-10-03  Francis Lachapelle  <flachapelle@inverse.ca>
15000
15001	* UI/MainUI/SOGoUserHomePage.m ([WOResponse
15002	_foldersResponseForResults]): include the value of the attribute value
15003	from user defaults SOGoLDAPContactInfoAttribute.
15004
15005	* UI/Contacts/UIxContactFoldersView.m ([WOActionResults
15006	allContactSearchAction]): return a dictionary with the found
15007	contacts and the original search string.
15008	([WOActionResults contactSearchAction]): idem.
15009
15010	* SoObjects/SOGo/LDAPUserManager.m ([NSArray
15011	_compactAndCompleteContacts:]): add the attribute from user
15012	defaults SOGoLDAPContactInfoAttribute for each returned contact.
15013
15014	* SoObjects/SOGo/LDAPSource.m ([EOQualifier _qualifierForFilter:
15015	]): the filter doesn't match only the beginning of the attribute's
15016	value anymore.
15017	([NSArray _searchAttributes]): add the attribute from user
15018	defaults SOGoLDAPContactInfoAttribute if not already included.
15019
15020	* SoObjects/Contacts/SOGoContactLDAPFolder.m ([NSArray
15021	_flattenedRecords]): added the key "contactInfo" with the value of
15022	the attribute from user defaults SOGoLDAPContactInfoAttribute.
15023
15024	* UI/Contacts/UIxContactFoldersView.m ([NSDictionary
15025	_responseForResults:]): returns a dictionary instead of a
15026	WOResponse. Currently only called by contactSearchAction.
15027
150282008-10-03  Cyril Robert <crobert@inverse.ca>
15029  * SoObjects/Mailer/SOGoMailFolder.m
15030    Added copyUIDs and moveUIDs
15031
15032  * UI/MailerUI/UIxMailActions.m
15033    Removed copyAction and moveAction
15034
15035  * UI/MailerUI/UIxMailFolderActions.m
15036    Added copyMessagesAction and moveMessagesAction
15037
15038  * UI/WebServerResources/MailerUI.js
15039    Removed _onMailboxMenuAction
15040    Modified onMailboxMenuCopy and onMailboxMenuMove
15041
15042  Copying/Moving messages is now done with one POST.
15043	Fixed bug #1893
15044
150452008-10-02  Cyril Robert <crobert@inverse.ca>
15046
15047  * SoObjects/Mailer/SOGoMailFolder.m
15048    Modified zip command acces path, defaults to /usr/bin/zip,
15049    overwritable by sogo defaults
15050
15051  * UI/MailPartViewers/UIxMailPartViewer.m
15052    Added - (NSString *) mimeImageUrl to get an icon path for attachments
15053
15054  * UI/MailerUI/UIxMailListView.m
15055    Added:
15056      - (NSArray *) columnsDisplayOrder
15057      Returns the current columns order, either from sogo defaults or user defaults.
15058      - (NSDictionary *) columnsMetaData
15059      Returns an array of metadata (id, class) for columns header.
15060
15061  * UI/MailerUI/UIxMailMainFrame.m
15062    Added - (NSString *) defaultColumnsOrder to get the order from a js call.
15063
15064  Summary:
15065  * Columns in UIxMailListView can now be changed
15066  * "Priority" column is smaller
15067  * Path to zip command now configurable
15068  * Fixed a js bug (loadImagesButton is null)
15069  * Attachments now have an icon according to their mimetype
15070
150712008-10-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15072
15073	* SoObjects/Appointments/SOGoCalendarComponent.m
15074	([SOGoCalendarComponent
15075	-sendEMailUsingTemplateNamed:newPageNameforObject:objecttoAttendees:attendees]):
15076	changed method to only accept one event from now on, since we
15077	actually use less information with the Lightning-inspired
15078	templates than before.
15079
15080	* SoObjects/Appointments/SOGoAptMailNotification.m ([-homePageURL])
15081	([-setHomePageURL:newhomePageURL], [-appointmentURL], [-viewTZ])
15082	([-setViewTZ:newViewTZ]): removed obsolete accessors.
15083
15084	* SoObjects/Appointments/SOGoAptMailICalReply.m
15085	([SOGoAptMailICalReply -attendeeName]): new method returning the
15086	cn of the attendee.
15087
150882008-09-30  Ludovic Marcotte  <lmarcotte@inverse.ca>
15089
15090	* Implemented external loading of images
15091	  in HTML mails the same way Thunderbird does it.
15092
150932008-09-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15094
15095	* SoObjects/SOGo/SOGoLDAPUserDefaults.m ([SOGoLDAPUserDefaults
15096	-objectForKey:key]): properly handle arrays of record references.
15097
15098	* SoObjects/SOGo/SOGoLDAPUserDefaults.m ([SOGoLDAPUserDefaults
15099	-objectForKey:key]): added support for dn+attribute lookup. The
15100	lookup syntax has been generalized by testing for "ref-dn" instead
15101	of "dict-dn". Make use of only non-deprecated LDAP functions.
15102
151032008-09-30  Cyril Robert <crobert@inverse.ca>
15104
15105	* SoObjects/Mailer/SOGoDraftsFolder.m
15106	Moved userSpoolFolderPath method to SOGoMailFolder.m
15107	* SoObjects/Mailer/SOGoMailFolder.h
15108	* SoObjects/Mailer/SOGoMailFolder.m
15109	Added userSpoolFolderPath from SOGoDraftsFolder
15110	Added archiveUIDs method to create an archive from email uids
15111	* UI/MailerUI/UIxMailFolderActions.h
15112	* UI/MailerUI/UIxMailFolderActions.m
15113	Added saveMessagesAction method to handle the /saveMessages call
15114	* UI/MailerUI/product.plist
15115	Added a definition for saveMessages
15116
151172008-09-28  Ludovic Marcotte  <lmarcotte@inverse.ca>
15118
15119	* Modified the following files:
15120	SoObjects/Mailer/SOGoDraftObject.m
15121	UI/MailerUI/Dutch.lproj/Localizable.strings
15122	UI/MailerUI/English.lproj/Localizable.strings
15123	UI/MailerUI/French.lproj/Localizable.strings
15124	UI/MailerUI/German.lproj/Localizable.strings
15125	UI/MailerUI/Italian.lproj/Localizable.strings
15126	UI/MailerUI/Spanish.lproj/Localizable.strings
15127	UI/MailerUI/Toolbars/SOGoDraftObject.toolbar
15128	UI/MailerUI/UIxMailEditor.m
15129	UI/MailerUI/UIxMailListView.m
15130	UI/Templates/MailerUI/UIxMailEditor.wox
15131	UI/Templates/MailerUI/UIxMailListView.wox
15132	UI/WebServerResources/UIxMailEditor.js
15133	in order to add support for X-Priority in emails.
15134	* Regenerated the sope-patchset in order to add
15135	capabilities to parse BODY[HEADER.FIELDS ...] responses.
15136
151372008-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15138
15139	* SoObjects/SOGo/SOGoLDAPUserDefaults.m ([SOGoLDAPUserDefaults
15140	-objectForKey:key]): implemented overriden method by using c types
15141	and methods to avoid recursive calls from objective-c methods.
15142
151432008-09-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15144
15145	* SoObjects/SOGo/SOGoLDAPUserDefaults.[hm]: new class module
15146	designed to substitute the system NSUserDefaults system with
15147	access to an LDAP directory.
15148
151492008-09-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15150
15151	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
15152	-deleteUIDs:uidsinContext:localContext]): explicitly select the
15153	current mailbox.
15154
151552008-09-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
15156
15157	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
15158	-deleteMessagesAction]): make use of the new SOGoFolder's
15159	deleteUIDs:inContext: method described below.
15160
15161	* UI/MailerUI/UIxMailActions.m ([-trashAction]): removed web method.
15162
15163	* SoObjects/Mailer/SOGoMailObject.m ([-trashInContext:_ctx]):
15164	removed method, obsoleted by the new "deletedUIDS:..." method
15165	described below.
15166
15167	* SoObjects/Mailer/SOGoMailManager.[hm]: removed all methods
15168	except -copyMailURL:srcurltoFolderURL:desturlpassword:pwd, which
15169	is the only one still used.
15170
15171	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
15172	-deleteUIDs:uidsinContext:localContext]): new method enabling the
15173	deletion of many IMAP uids in one batch.
15174
151752008-09-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15176
15177	* SoObjects/Appointments/SOGoAppointmentFolder.m
15178	([SOGoAppointmentFolder -davCollectionTag]): do not ignore deleted
15179	records when "computing" the ctag. Also, the EOSpecification
15180	instance should not be static, otherwise any subsequent queries
15181	will be based on the ctag of the first calendar ever queried.
15182
15183	* SoObjects/SOGo/NSString+Utilities.m ([NSString
15184	-asQPSubjectString:encoding]): replace spaces with underscore
15185	characters to comply with rfc 2047.
15186
151872008-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15188
15189	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
15190	-decodedFlatContent]): same as below...
15191
15192	* SoObjects/Mailer/NSData+Mail.m ([NSData
15193	-bodyDataFromEncoding:encoding]): invoke
15194	"dataByDecodingQuotedPrintableTransferEncoding" on the NSData
15195	instance to avoid decoding "_" chars.
15196
151972008-09-17  Francis Lachapelle  <flachapelle@inverse.ca>
15198
15199	* UI/MailerUI/UIxMailAccountActions.m ([WOResponse
15200	-listMailboxesAction]): also returns the inbox quota, wrapped in a
15201	new dictionary with keys "mailboxes" and "quotas". Uses the new user
15202	default "SOGoSoftQuotaRatio" to force a quota and ignore the one
15203	returned by the IMAP server.
15204
152052008-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15206
15207	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
15208	-fetchAttachmentIds]): if the parts have no filename associated
15209	with them, we still return the prefix url so that we still can
15210	access the attachment from HTML messages.
15211
152122008-09-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15213
15214	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
15215	log the username performing the logoff operation.
15216
15217	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): log
15218	success information about current attempt.
15219
15220	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
15221	-lookupName:lookupNameinContext:localContextacquire:acquire]): do
15222	not use the object returned by "bindToObject:inContext:".
15223	Otherwise the clientObject isn't set in the context.
15224
152252008-09-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15226
15227	* UI/MailPartViewers/UIxMailPartAlternativeViewer.m
15228	([UIxMailPartAlternativeViewer -selectChildInfo]): give precedence
15229	on multipart/mixed parts over text/* parts.
15230
15231	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
15232	-isValidAttachmentName:filename]): accept all filenames except
15233	".", ".." and those that contain "/". Any other is valid and will
15234	be accepted.
15235
152362008-09-08  Ludovic Marcotte  <lmarcotte@inverse.ca>
15237
15238	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
15239	-checkLogin:loginToCheckandPassword:passwordToCheck])
15240	([LDAPSource -allEntryIDs])
15241	([LDAPSource -fetchContactsMatching:match])
15242	([LDAPSource -lookupContactEntry:entryID])
15243	([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): catch any
15244	LDAP connection failure exception and return an empty result if
15245	such as situation has happened.
15246
152472008-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15248
15249	* SoObjects/Mailer/SOGoMailReply.m: made class a child of
15250	SOGoMailForward, since we need to access more or less the same
15251	fields from the original message, especially in outlook reply mode.
15252	([SOGoMailReply -setOutlookMode:newOutlookMode]): new accessor
15253	defining in which mode we are.
15254
15255	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
15256	-contentForReply]): if the reply style is outlook, then we use the
15257	content generated for inline forwarding.
15258	([SOGoMailObject -useOutlookStyleReplies]): new method that
15259	indicates whether the ud key "SOGoMailUseOutlookStyleReplies".
15260
15261	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
15262	-expungeLastMarkedFolder]): do not perform the expunge if the
15263	marked folder is the current folder.
15264
152652008-09-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15266
15267	* UI/MailPartViewers/UIxMailPartAlternativeViewer.m
15268	([UIxMailPartAlternativeViewer -selectPartIndexFromTypes:]): give
15269	precedence on multipart/related parts.
15270
15271	* UI/MailPartViewers/UIxMailRenderingContext.m
15272	([UIxMailRenderingContext -viewerForBodyInfo:_info]): add the
15273	mixed viewer as the viewer for "multipart/digest" content.
15274
15275	* UI/MailPartViewers/UIxMailPartTextViewer.m (convertChars):
15276	fixed a buffer overflow. Incremented the buffer size to 8192.
15277
152782008-09-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15279
15280	* SoObjects/Mailer/SOGoMailManager.m ([NGImap
15281	-copyMailURL:toFolderURL:password:]): do not compare the urls
15282	based on the instance that NGImap4ConnectionManager returns,
15283	because disabling the pooling will generate a bad result, even
15284	though the host:port pairs are the same.
15285
152862008-09-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15287
15288	* UI/MailerUI/UIxMailView.m ([UIxMailView
15289	-appendToResponse:_responseinContext:_ctx]): no longer invoke
15290	[NGImap4Client logout], since this is now handled by the
15291	NGImap4Connection manager (or not).
15292
15293	* UI/MailerUI/UIxMailActions.m ([UIxMailActions
15294	-markMessageUnreadAction]): no longer make use of [SOGoMailFolder
15295	unselect].
15296	([UIxMailActions -markMessageReadAction]): idem.
15297
15298	* SoObjects/Mailer/SOGoMailFolder.m ([-unselect]): removed method
15299	since we no longer need it.
15300
15301	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
15302	-dealloc]): release "imap4". If the IMAP4 connection pooling is
15303	disabled, the object will otherwise never be released.
15304
15305	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
15306	+initialize]): use the user default "SOGoFallbackIMAP4Server" to
15307	override the value of "serverName" from the actual user settings.
15308	Fallback to "localhost" if value is unset.
15309
15310	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
15311	-imap4URLString]): use the value of SOGoFallbackIMAP4Server, as
15312	mentionne above.
15313
15314	* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -from]): retain the
15315	initialized value of from, otherwise we create a future zombie.
15316
15317	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
15318	-initWithName:_nameinContainer:_container]): we no longer retain
15319	the context, to avoid making a circular reference.
15320
15321	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
15322	-initWithLogin:newLoginroles:newRoles]): moved the core from init
15323	here.
15324	([-init]): removed method.
15325
153262008-08-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15327
15328	* UI/MailerUI/UIxMailView.m ([UIxMailView
15329	-appendToResponse:_responseinContext:_ctx]): logout from the imap
15330	connectin once the response has been appended.
15331
153322008-08-29  Ludovic Marcotte  <lmarcotte@inverse.ca>
15333
15334	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
15335	-addRecipients:recipientstoArray:array]): same as below.
15336
15337	* SoObjects/Mailer/SOGoDraftObject.m:
15338	([SOGoDraftObject -addEMailsOfAddresses:_addrstoArray:_ma]): test
15339	if the returned email is nil before adding it to the array.
15340
153412008-08-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15342
15343	* UI/MailerUI/UIxMailActions.m ([UIxMailActions
15344	-markMessageUnreadAction]): unselect the mailbox after the operation.
15345	([UIxMailActions -markMessageReadAction]): same as above.
15346
15347	* UI/MailPartViewers/UIxMailPartICalViewer.m
15348	([UIxMailPartICalViewer -hasCalendarAccess]): new method that
15349	returns whether the current user has access to the calendar
15350	module, so that buttons can be hidden.
15351
153522008-08-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15353
15354	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
15355	-lookupImap4BodyPartKey:inContext:]): if the "parts" object is not
15356	found, we try "body"->"parts".
15357
153582008-08-26  Francis Lachapelle  <flachapelle@inverse.ca>
15359
15360	* UI/MailerUI/UIxMailMainFrame.m ([composeAction]): build the
15361	contact's fullname from its card's attribute "n" if "fn" is
15362	not defined.
15363
15364	* UI/Contacts/UIxContactView.m ([fullName]): idem.
15365
15366	* UI/Contacts/UIxContactEditor.m ([addressBooksList]): new
15367	method to retrieve the address books to which the user can write.
15368	([saveAction]): if the user change the destination address
15369	book, the contact is now correctly moved to it.
15370
15371	* UI/Scheduler/UIxAppointmentEditor.m ([viewAction]): new
15372	method that returns a JSON representation of an event.
15373
15374	* UI/Scheduler/UIxAppointmentEditor.m ([newAction]): removed
15375	the rights validation from the product.plist to this method so
15376	the user redirect to the proper folder if rights are insufficient.
15377
15378	* UI/Scheduler/UIxTaskEditor.m ([newAction]): idem.
15379
15380	* UI/Contacts/UIxContactEditor.m ([newAction]): idem.
15381
15382	* UI/Scheduler/UIxCalendarSelector.m ([calendars]): removed
15383	the roles as they are no longer verified through JavaScript.
15384
15385	* SoObjects/SOGo/SOGoFolder.m
15386	([_compareByNameInContainer:otherFolder]): fixed an order
15387	problem with the personal folders.
15388
15389	* SoObjects/SOGo/NSString+Utilities.m
15390	([_rangeOfURLInRange:refRange]): added some ending characters.
15391	([_handleURLs:selfCopy textToMatch:match prefix:prefix
15392	inRanges:ranges]): fixed the parsing so URLs are properly identified.
15393
15394	* UI/MailerUI/UIxMailAccountActions.m ([-composeAction]):
15395	added support to define the subject through the URL.
15396
153972008-08-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15398
15399	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -setUserName:_value])
15400	([SOGoRootPage -userName]): removed accessors, since the
15401	corresponding ivar is not used and was removed too.
15402
15403	* UI/SOGoUI/UIxComponent.m ([-shortUserNameForDisplay]): no longer
15404	make use of the "wrongusernamepassword" hack.
15405
15406	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): return
15407	HTTP code 403 if the username and the password passed in the
15408	request are not valid.
15409
15410	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
15411	-lookupName:_keyinContext:_ctxacquire:_flag]): whenever a user has
15412	no access to the specified module, a response with code 403 and
15413	the content of "UIxModuleAccessDenied" will be generated.
15414
15415	* UI/SOGoUI/UIxModuleAccessDenied.[hm]: new template module
15416	displaying an error message.
15417
154182008-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15419
15420	* UI/MailPartViewers/UIxMailRenderingContext.m
15421	([UIxMailRenderingContext -viewerForBodyInfo:_info]): display
15422	parts with a bodyId as an attachment.
15423
15424	* UI/Contacts/UIxContactView.m ([UIxContactView -workUrl])
15425	([UIxContactView -homeUrl]): the test for the presence of a
15426	protocol was inverted, causing the output of wrong urls anyway...
15427
15428	* SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
15429	-vCard]): replaced query for field "notes" with "description".
15430	Added support for Mozilla custom fields 1 to 4.
15431
15432	* SoObjects/Mailer/SOGoHTMLMailBodyPart.[hm]: new class module
15433	implementing the HTML content body parts.
15434
15435	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
15436	([UIxMailPartExternalHTMLViewer -init]): new class derived from
15437	UIxMailPartHTMLViewer but which as as a full page wrapper.
15438
154392008-08-22  Ludovic Marcotte  <lmarcotte@inverse.ca>
15440
15441	* Modified SoObjects/Mailer/NSData+Mail.m
15442	-decodedSubject so we correctly implement decoding
15443	instead of relying on the broken SOPE implementation.
15444
154452008-08-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
15446
15447	* SoObjects/SOGo/LDAPUserManager.m
15448	Renamed the SOGOLDAPUserManagerCleanupInterval defaults to
15449	SOGoLDAPUserManagerCleanupInterval.
15450	We correctly add our timer to the runloop and fixed
15451	a typo in the selector name.
15452
154532008-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15454
15455	* SoObjects/SOGo/NSString+Utilities.m ([NSString
15456	-caseInsensitiveMatches:match]): new method that helps matching
15457	strings against patterns.
15458
154592008-08-21  Ludovic Marcotte  <lmarcotte@inverse.ca>
15460
15461	* Updated the icons to use those from Thunderbird 2
15462	and from Lightning 0.9. Also added those new files :
15463
15464	UI/WebServerResources/tbtv_account_17x17.png
15465	UI/WebServerResources/tbtv_drafts_17x17.png
15466	UI/WebServerResources/tbtv_inbox_17x17.png
15467	UI/WebServerResources/tbtv_leaf_corner_17x17.png
15468	UI/WebServerResources/tbtv_sent_17x17.png
15469	UI/WebServerResources/tbtv_trash_17x17.png
15470
15471	Dropped :
15472
15473	UI/WebServerResources/tbtv_account_17x17.gif
15474	UI/WebServerResources/tbtv_drafts_17x17.gif
15475	UI/WebServerResources/tbtv_inbox_17x17.gif
15476	UI/WebServerResources/tbtv_leaf_corner_17x17.gif
15477	UI/WebServerResources/tbtv_sent_17x17.gif
15478	UI/WebServerResources/tbtv_trash_17x17.gif
15479
154802008-08-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15481
15482	* UI/PreferencesUI/UIxAdditionalPreferences.[hm]: new template
15483	class that enables the user to append links or other infos needed
15484	to change preferences not handled by SOGo. The tab will display
15485	when setting the ud key "SOGoUIxAdditionalPreferences" to YES.
15486
154872008-08-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15488
15489	* UI/MainUI/SOGoBrowsersPanel.[hm]: new template class that helps
15490	displaying a choice of browsers compatible with SOGo. The code was
15491	extracted from UIxPageFrame.
15492
15493	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
15494	-viewAction]): apply the user's timezone to the startdate before
15495	formatting it.
15496
154972008-08-18  Ludovic Marcotte  <lmarcotte@inverse.ca>
15498
15499	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
15500	-mimeHeaderMapWithHeaders:_headers]): properly quote atoms in mail
15501	addresses.
15502
15503	* UI/MailPartViewers/UIxMailPartMessageViewer.m
15504	([UIxMailPartMessageViewer -formattedComponents:components]):
15505	don't report nil components.
15506
155072008-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15508
15509	* SoObjects/Appointments/iCalEventChanges+SOGo.m
15510	([iCalEventChanges -sequenceShouldBeIncreased]): added summary and
15511	comment.
15512
15513	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
15514	-contactInfosForUserWithUIDorEmail:uid]): only use the
15515	authentication sources.
15516
155172008-08-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15518
15519	* SoObjects/Appointments/SOGoComponentOccurence.m
15520	([SOGoComponentOccurence
15521	+occurenceWithComponent:newComponentwithMasterComponent:newMasterinContainer:newContainer]):
15522	seconds is now a NSTimeInterval instead of an int, to avoid
15523	casting problems on the PowerPC architecture.
15524
155252008-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15526
15527	* UI/MailPartViewers/UIxMailPartICalViewer.m
15528	([UIxMailPartICalViewer -currentUserAttendee]): select the most
15529	recent event.
15530
15531	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -copyToFolder:newFolder])
15532	([SOGoContentObject -moveToFolder:newFolder]): new operation methods.
15533
155342008-08-10  Ludovic Marcotte  <lmarcotte@inverse.ca>
15535
15536	* UI/Contacts/UIxContactView.m ([UIxContactView -homeUrl])
15537	([UIxContactView -workUrl]): prefixes the urls with "http://" if
15538	not already prefixed.
15539
155402008-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15541
15542	* SoObjects/Appointments/SOGoComponentOccurence.m
15543	([SOGoComponentOccurence -changeParticipationStatus:newPartStat]):
15544	implemented proxy method.
15545
15546	* SoObjects/Appointments/SOGoCalendarComponent.m
15547	([SOGoCalendarComponent
15548	-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
15549	the sender email is always the one of the owner, even though the
15550	action might be done by a delegate. If the case, we setup the
15551	"SENT-BY" parameter of the organizer field.
15552	([SOGoCalendarComponent -sendResponseToOrganizer]): If needed,
15553	setup the "SENT-BY" parameter of the attendee field.
15554
15555	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
15556	-toolbar]): changed algoritm so that a delegate would really see
15557	what the owner would, depending on his/her rights.
15558
15559	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
15560	-lookupImap4BodyPartKey:inContext:]): find a class based on the
15561	mime type of the subpart described by the partInfo.
15562
15563	* SoObjects/Appointments/iCalEntityObject+SOGo.m
15564	([iCalEntityObject
15565	-quickRecordDateAsNumber:_datewithOffset:offsetforAllDay:allDay]):
15566	changed the type of "seconds" to NSTimeInterval to avoid casting
15567	errors on PPC.
15568
15569	* UI/MailPartViewers/UIxMailPartICalActions.m ([UIxMailPartICalActions -updateUserStatusAction])
15570	([UIxMailPartICalActions -acceptAction])
15571	([UIxMailPartICalActions -declineAction]): if the event doesn't
15572	exist in the user table, declare it as new.
15573
155742008-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15575
15576	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
15577	-fetchContactsMatching:filter]): fetch entries matching filter
15578	only in addressbooks.
15579	([LDAPUserManager -fetchUsersMatching:filter]): same as above for
15580	authentication sources only.
15581
15582	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
15583	([SOGoUserFolder -davCalendarUserAddressSet]): the addresses
15584	returned should be those of the owner and not of the current user.
15585
15586	* SoObjects/Appointments/SOGoAppointmentObject.m
15587	([SOGoAppointmentObject +webdavAclManager]): declare DAV:write as
15588	equivalent of ..._ModifyComponent (instead of DAV:write-content).
15589
155902008-08-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15591
15592	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor -isNew]):
15593	invoke "isNew" to the client object only if it is an instance of
15594	SOGoContentObject...
15595
155962008-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15597
15598	* SoObjects/Appointments/SOGoCalendarComponent.m
15599	([SOGoCalendarComponent -calendar:create:secure]): we now return a
15600	deep copy of the current calendar element, so that further
15601	modifications do not impact the original copy.
15602
15603	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): same as
15604	below.
15605
15606	* Main/SOGo.m ([SOGo -run]): rename AgenorProfileURL to
15607	SOGoProfileURL automagically.
15608
156092008-07-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15610
15611	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
15612	-eventsBlocksAction]): return event blocks with the serial number
15613	of the event they refer to in the events list (first array) rather
15614	than their cname, so that specific occurences can be
15615	differenciated.
15616
15617	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
15618	-davUserQuery:queryContext]): make searches only in user
15619	repositories and not in addressbooks.
15620
156212008-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15622
15623	* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
15624	-weeksToDisplay]): add one day to the computed delta, because
15625	there is always at least one week displayed.
15626
15627	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
15628	-foldersOfType:typematchingUID:uid]): make searches only in user
15629	repositories and not in addressbooks.
15630
15631	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
15632	-fetchUsersMatching:filter]): new method allowing to make searches
15633	only in user repositories.
15634
156352008-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15636
15637	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -dayStartHour]):
15638	new getter for computing the default scroll point in the day and
15639	week views.
15640
15641	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
15642	-clickableHourCellClass]): the "dayEndHour" is the hour where the
15643	outOfDay class starts.
15644
15645	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -hasChanged])
15646	([UIxPreferences -setHasChanged:newHasChanged]): new accessors
15647	method for a new hidden input field that is set to 1 if the values
15648	have changed and require a refresh of the main window.
15649
15650	* SoObjects/SOGo/AgenorUserDefaults.[hm]: renamed module class and
15651	class moduel to SOGoUserDefaults.
15652
15653	* Main/SOGo.m ([SOGo -run]): the table referred to as
15654	"AgenorProfileURL" is now referred to as "SOGoProfileURL".
15655
156562008-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15657
15658	* SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator -checkLogin:_loginpassword:_pwd]),
15659	SoObjects/SOGo/SOGoDAVAuthenticator.m ([SOGoDAVAuthenticator -checkLogin:_loginpassword:_pwd]):
15660	disable "bypass" authentification method, since it doesn't work anyway.
15661
15662	* SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator -init]),
15663	SoObjects/SOGo/SOGoDAVAuthenticator.m ([SOGoDAVAuthenticator
15664	-init]): use "SOGoAuthenticationMethod" first, since
15665	"SOGoAuthentificationMethod" was a typo. If none are specified,
15666	fallback on "LDAP".
15667
156682008-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15669
15670	* SoObjects/Appointments/SOGoCalendarComponent.m
15671	([SOGoCalendarComponent -secureContentAsString]): use a mutable
15672	copy of the calendar in order to be able to modify it, otherwise
15673	SOGo crashes.
15674	([-isFolderish]): removed method, so that the components won't be
15675	listed as DAV collections.
15676
156772008-07-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15678
15679	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
15680	-PUTAction:_ctx]): when the object is new, return 201. Otherwise,
15681	return 204 as success code.
15682
156832008-07-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15684
15685	* UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -startDate]):
15686	same as below.
15687
15688	* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
15689	-weeksToDisplay]): use the user's first day of week to chose the
15690	day to start the series.
15691	([UIxCalMonthView -dayCellClasses]): take the user's first day of
15692	week into account.
15693	([UIxCalMonthView -endDate]): same as above.
15694
15695	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
15696	-firstDayOfWeek]): new template accessor.
15697
15698	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
15699	-currentHourLineClass]): new template accessor.
15700	([UIxCalDayTable -clickableHourCellClass]): add the class
15701	'outOfDay' when the current hour is out of the user's day start
15702	and end hour ranges.
15703
15704	* UI/Scheduler/UIxCalDateSelector.m ([UIxCalDateSelector
15705	-firstDayOfWeek]): new template accessor.
15706
15707	* UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor -dayStartHour])
15708	([UIxAttendeesEditor -dayEndHour]): new template accessors.
15709
15710	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newStartDate]),
15711	UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
15712	-newStartDate]): take the user-configured day start hour into account.
15713
15714	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
15715	-firstWeekList]): no longer list the option that enables the
15716	hiding of week numbers.
15717
15718	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -firstDayOfWeek])
15719	([SOGoUser -firstDayOfWeekForDate:date])
15720	([SOGoUser -dayOfWeekForDate:date], [SOGoUser -dayStartHour])
15721	([SOGoUser -dayEndHour])
15722	([SOGoUser -firstWeekOfYearForDate:date])
15723	([SOGoUser -weekNumberForDate:date]): new methods that help take
15724	the calendar-related user preferences into account.
15725
157262008-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15727
15728	* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
15729	-weeksToDisplay]): we now display rows of weeks rather than columns
15730	of week days.
15731
15732	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
15733	-eventsBlocksAction]): event blocks now that the "c_recurrence_id"
15734	virtual field into account.
15735
15736	* UI/Common/UIxObjectActions.m ([UIxObjectActions -deleteAction]):
15737	new action method, moved from UIxContactView so that it is
15738	generalized to all SOGoObjects.
15739
15740	* SoObjects/Appointments/SOGoCalendarComponent.m
15741	([SOGoCalendarComponent -init]): we now save the calendar to avoid
15742	multiple parsing and instantiation of children components.
15743	([SOGoCalendarComponent -toOneRelationshipKeys]): declare
15744	components as children.
15745	([SOGoCalendarComponent
15746	-lookupName:lookupNameinContext:localContextacquire:acquire]):
15747	handle the search for components and their occurences.
15748	([SOGoCalendarComponent -saveComponent:newObject]): added code to
15749	update recurrence ids whenever the user saves a new version of the
15750	master component.
15751
15752	* SoObjects/Appointments/SOGoAppointmentObject.m ([SOGoAppointmentObject -occurence:occ])
15753	([SOGoAppointmentObject -newOccurenceWithID:recID])
15754	([SOGoAppointmentObject -prepareDeleteOccurence:occurence]): new
15755	methods to handle occurences.
15756
15757	* SoObjects/Appointments/SOGoAppointmentFolder.m
15758	([SOGoAppointmentFolder -fixupCycleRecord:_recordcycleRange:_r]):
15759	declare a new "c_recurrence_id" field, that will be overwritten
15760	with further exception occurences.
15761
15762	* UI/Scheduler/UIxOccurenceDialog.[hm]: new dialog asking whether
15763	to edit/delete all occurences of a recurrent event or only the one
15764	selected.
15765
15766	* SoObjects/Appointments/SOGoComponentOccurence.[hm]: super class
15767	of new classes belows.
15768
15769	* SoObjects/Appointments/SOGoAppointmentOccurence.[hm]: new class
15770	module that handle occurences within events.
15771
15772	* SoObjects/Appointments/SOGoTaskOccurence.[hm]: new class
15773	module that handle occurences within todos.
15774
157752008-07-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15776
15777	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
15778	-eventsBlocksAction]): take user participation status into account
15779	again.
15780
15781	* SoObjects/Appointments/iCalEntityObject+SOGo.m
15782	([iCalEntityObject
15783	-quickRecordDateAsNumber:_datewithOffset:offsetforAllDay:allDay]):
15784	enhanced method to do the special computations for all day events.
15785
157862008-07-16  Francis Lachapelle  <flachapelle@inverse.ca>
15787
15788	* UI/Contacts/UIxContactEditor.m ([BOOL isNew])
15789	([void setAddressBookItem:_item])
15790	([id addressBookItem])
15791	([NSArray addressBooksList])
15792	([SOGoContactFolder componentAddressBook])
15793	([NSString addressBookDisplayName]): new methods to allow the
15794	selection of the destination address book when creating a new contact.
15795
157962008-07-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15797
15798	* UI/Scheduler/NSDictionary+Scheduler.m: new category module that
15799	implement helper methods for the Scheduler module.
15800	([NSDictionary -compareEventByStart:otherEvent]): new method that
15801	compares event block dictionaries based on their value for
15802	"start".
15803
15804	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
15805	-eventsBlocksAction]): new web method that returns the list of
15806	events as well as the precomputed blocks of events, whether "all
15807	day" or not.
15808
15809	* SoObjects/Appointments/SOGoAppointmentFolder.m
15810	([SOGoAppointmentFolder
15811	-fetchCoreInfosFrom:_startDateto:_endDatetitle:titlecomponent:_componentadditionalFilters:filters]):
15812	requests "c_iscycle".
15813
158142008-07-15  Francis Lachapelle  <flachapelle@inverse.ca>
15815
15816	* UI/Contacts/UIxContactFolderActions.m: new class for actions
15817	on contacts of a specific address book.
15818
15819	* UI/Contacts/UIxContactFolderActions.m
15820	([NSException _moveContacts:toFolder:andKeepCopy:]): private method to
15821	move and optionnaly copy one or many contacts to another
15822	address book.
15823
15824	* UI/Contacts/UIxContactFolderActions.m ([WOActionResults
15825	copyAction]): copy one or many contacts to another address book.
15826
15827	* UI/Contacts/UIxContactFolderActions.m ([WOActionResults
15828	moveAction]): move one or many contacts to another address book.
15829
158302008-07-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15831
15832	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
15833	-setIsNew:newIsNew]): new setter that declares the record as new,
15834	since it is no longer so by default.
15835
15836	* SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -davCalendarOrder])
15837	([SOGoAppointmentFolder -setDavCalendarOrder:newColor]): new
15838	accessors to handle Apple's "calendar-order" property.
15839
15840	* SoObjects/Appointments/iCalRepeatableEntityObject+SOGo.m
15841	([iCalRepeatableEntityObject -cycleInfo]): exception dates are now
15842	returned as an array of strings.
15843
15844	* SoObjects/Appointments/SOGoAppointmentFolder.m
15845	([SOGoAppointmentFolder
15846	-fixupCyclicRecords:_recordsfetchRange:_r]): fix an infinite loop
15847	occuring when the exception date was not the first date in the list.
15848
158492008-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15850
15851	* SoObjects/Appointments/SOGoAppointmentFolder.m
15852	([SOGoAppointmentFolder
15853	-fetchFields:_fieldsfrom:_startDateto:_endDatetitle:titlecomponent:_componentadditionalFilters:filters]):
15854	take exceptional modifications into account.
15855
15856	* SoObjects/Appointments/iCalToDo+SOGo.m: new class module with
15857	category methods for iCalToDo.
15858	([iCalToDo -quickRecord]): same as for method below.
15859
15860	* SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
15861	-quickRecord]): new method taken from OCSiCalFieldExtractor.
15862
158632008-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15864
15865	* SoObjects/SOGo/NSString+DAV.m ([NSString -asWebDAVTuple]): new
15866	method that parses a webdav tag in the form "{ns:}tag" and returns
15867	a dictionary.
15868
15869	* SoObjects/Appointments/SOGoUserFolder+Appointments.m
15870	([SOGoUserFolder -davPrincipalPropertySearch:queryContext]): new
15871	method to answer to "principal-property-search" report.
15872
15873	* SoObjects/Appointments/SOGoAppointmentFolders.m
15874	([SOGoAppointmentFolders -davComplianceClassesInContext:]): new
15875	method that declares "calendar-access" and "calendar-schedule".
15876
15877	* SoObjects/Appointments/SOGoCalendarComponent.m
15878	([SOGoCalendarComponent
15879	-sendIMIPReplyForEvent:eventto:recipient]): new method, derived from
15880	sendResponseToOrganizer but more generic.
15881	([SOGoCalendarComponent -sendResponseToOrganizer]): make use of
15882	the new method mentionne above.
15883
158842008-07-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15885
15886	* SoObjects/Appointments/SOGoAppointmentFolders.m ([SOGoAppointmentFolders -davCreateCalendarCollection:newNameinContext:createContext]):
15887	new method that execute a "MKCALENDAR" request.
15888
15889	* SoObjects/SOGo/SOGoObject.m (SOGoSelectorForPropertyGetter): new
15890	function that returns the selector for the getter method for the
15891	specified property.
15892	(SOGoSelectorForPropertySetter): same as above for the setter
15893	method.
15894
15895	* SoObjects/SOGo/WORequest+SOGo.m ([WORequest
15896	-davPatchedPropertiesWithTopTag:topTag]): new category method to
15897	help with parsing properties modified or removed from PROPPATCH
15898	methods and alike.
15899
15900	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
15901	-PUTAction:_ctx]): increment the version number only if the record
15902	is not new.
15903
15904	* SoObjects/Appointments/SOGoAppointmentFolder.m
15905	([SOGoAppointmentFolder -davCalendarFreeBusySet]): new method that
15906	returns the HREF to the calendars involved in the user's freebusy.
15907	([SOGoAppointmentFolder
15908	-setDavCalendarFreeBusySet:newFreeBusySet]): new method that
15909	PRETENDS to modify the list of calendars mentionned above.
15910	([SOGoAppointmentFolder
15911	-caldavEventRequest:eventwithContent:iCalStringfrom:originatorto:recipients]):
15912	add support for the "CANCEL" method.
15913
15914	* SoObjects/Appointments/SOGoAppointmentObject.m
15915	([SOGoAppointmentObject -postCalDAVEventCancelTo:recipients]): new
15916	method that implements support for the CalDAV "CANCEL" method for
15917	POSTs.
15918
15919	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
15920	-PUTAction:_ctx]): the version passed to
15921	saveContentString:baseVersion: is the current value of "version".
15922	If the operation is succesful, the version is incremented from
15923	here since no refresh is done from GCS. The returned etag has thus
15924	now the correct value.
15925
159262008-07-09  Francis Lachapelle  <flachapelle@inverse.ca>
15927
15928	* UI/MailerUI/UIxMailMainFrame.m ([WOActionResults
15929	composeAction]): added support to specify an address book and
15930	one more many contact IDs.
15931
159322008-07-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15933
15934	* SoObjects/Appointments/SOGoAppointmentFolder.m
15935	([SOGoAppointmentFolder
15936	-caldavEventRequest:eventwithContent:iCalStringfrom:originatorto:recipients]):
15937	simplified method since REPLY and REQUEST posts are very similar.
15938
15939	* SoObjects/Appointments/SOGoAppointmentObject.m
15940	([SOGoAppointmentObject -postCalDAVEventReplyTo:recipients]): new
15941	method that handle CalDAV REPLY posts by updating the event in the
15942	table of the SOGo users and send the reply by email as well.
15943
15944	* SoObjects/Appointments/SOGoCalendarComponent.m
15945	([SOGoCalendarComponent
15946	-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
15947	take the current user as originator rather than the object's owner.
15948
159492008-07-07  Francis Lachapelle  <flachapelle@inverse.ca>
15950
15951	* UI/Contacts/UIxContactFoldersView.m ([WOActionResults
15952	allContactSearchAction]): new method to search contacts among
15953	all address books.
15954
159552008-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15956
15957	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
15958	-POSTAction:localContext]): take the content type as well as the
15959	request and pass them as parameter to the new method below.
15960	([SOGoObject
15961	-davPOSTRequest:requestwithContentType:cTypeinContext:localContext]):
15962	new method designed to handle POST requests on DAV objects.
15963
159642008-06-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15965
15966	* SoObjects/Appointments/SOGoAppointmentFolder.m
15967	([SOGoAppointmentFolder
15968	-caldavEventRequest:eventfrom:originatorto:recipients]): handle
15969	caldav replies.
15970	([SOGoAppointmentFolder -lookupComponentByUID:uid]): new method
15971	that returns an event search by uid.
15972
15973	* SoObjects/Appointments/SOGoUserFolder+Appointments.m ([SOGoUserFolder -davCalendarHomeSet])
15974	([SOGoUserFolder -davCalendarScheduleInboxURL])
15975	([SOGoUserFolder -davCalendarScheduleOutboxURL])
15976	([SOGoUserFolder -davDropboxHomeURL])
15977	([SOGoUserFolder -davNotificationsURL]): new methods for
15978	supporting the caldav-schedule draft extension to CalDAV.
15979
15980	* SoObjects/Appointments/SOGoAppointmentFolder.m
15981	([SOGoAppointmentFolder -davComplianceClassesInContext:]): append
15982	"calendar-schedule" to the list.
15983	([SOGoAppointmentFolder -POSTAction:localContext]): new method to
15984	handle POST CalDAV requests.
15985	([SOGoAppointmentFolder -davCollectionTag]): new method.
15986
15987	* SoObjects/Contacts/SOGoContactLDAPFolder.m
15988	([SOGoContactLDAPFolder
15989	-lookupName:objectNameinContext:lookupContextacquire:acquire]):
15990	use lookupContactentryWithUIDorEmail to make sure we use the ID
15991	field specified in the user defaults to match the username, and
15992	that the users can be found using their email.
15993
159942008-06-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
15995
15996	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
15997	-contentAsString]): add the ending interval to "today" instead of
15998	to the start date.
15999	([SOGoFreeBusyObject
16000	-contentAsStringWithMethod:methodfrom:_startDateto:_endDate]): new
16001	method that accepts a method parameter to specify in the returned
16002	iCalendar object.
16003
160042008-06-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16005
16006	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]):
16007	enhanced method to request the user language, his/her browser
16008	languages and the system language as fallback.
16009
16010	* UI/Contacts/UIxContactsListViewContainer.m
16011	([-currentContactFolderName]): no longer interprets the name of
16012	the personal folder, since the default name is now localized at
16013	creation time.
16014
160152008-06-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16016
16017	* UI/Scheduler/UIxCalendarProperties.m ([UIxCalendarProperties -calendarSyncTag])
16018	([UIxCalendarProperties -setCalendarSyncTag:newTag]): new
16019	accessors to retrieve and set the calendar tags from the template.
16020
16021	* SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -syncTag])
16022	([SOGoAppointmentFolder -setSyncTag:newSyncTag]): new accessors
16023	that retrieves and set the calendar tags.
16024
16025	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
16026	-canCreateOrModify]): new overriden method that checks whether the
16027	current clientObject is an instance of SOGoContactLDIFEntry before
16028	returning the super method. This is to avoid the case where the
16029	"save" button would appear because the user is listed as a super
16030	user, which owns everything.
16031
160322008-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16033
16034	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
16035	-readFreeBusyAction]): accelerated the process of rendering free
16036	busy information by using ptr** instead of NSArray.
16037
16038	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
16039	+initialize]): initialize the default interval based on the new
16040	"SOGoFreeBusyDefaultInterval" user default array.
16041	([SOGoFreeBusyObject
16042	-fetchFreeBusyInfosFrom:startDateto:endDate]): fetch the events
16043	from all the owner calendars.
16044
16045	* SoObjects/Appointments/SOGoAppointmentFolder.m
16046	([SOGoAppointmentFolder
16047	-fetchFields:_fieldsfrom:_startDateto:_endDatetitle:titlecomponent:_componentadditionalFilters:filters]):
16048	add processed recurrent events to the list of records.
16049	([SOGoAppointmentFolder
16050	-fetchFreeBusyInfosFrom:_startDateto:_endDate]): request the
16051	"c_cycleinfo" field in order for the recurrent events to be taken
16052	into account.
16053
160542008-06-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16055
16056	* SoObjects/Appointments/SOGoAppointmentFolder.m
16057	([-fetchContentObjectNames]): removed useless method.
16058	([-fetchAllSOGoAppointments]): removed useless method.
16059	([SOGoAppointmentFolder
16060	-fetchCoreInfosFrom:_startDateto:_endDatetitle:titlecomponent:_componentadditionalFilters:filters]):
16061	retrieve the fields required for object instantiation and cache
16062	the resulting records.
16063	([SOGoAppointmentFolder
16064	-bareFetchFields:fieldsfrom:startDateto:endDatetitle:titlecomponent:componentadditionalFilters:filters]):
16065	new method based on the non-bare part but simpler and without the
16066	handling of cyclic records.
16067	([SOGoAppointmentFolder -davCalendarQuery:queryContext])
16068	([SOGoAppointmentFolder -davCalendarMultiget:queryContext]):
16069	optimized those methods by replacing often-used NSArray instances
16070	with arrays of ptr** and by removing utility submethods when
16071	useful.
16072
16073	* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
16074	-vCard]): use the new "content" ivar.
16075
16076	* SoObjects/Contacts/SOGoContactGCSFolder.m
16077	([-deduceObjectForName:inContext:]): removed method since the
16078	object type is now deduced in the parent class.
16079	([SOGoContactGCSFolder -objectClassForResourceNamed:name]): new
16080	overriden method.
16081
16082	* SoObjects/SOGo/SOGoGCSFolder.m
16083	([-fetchContentStringsAndNamesOfAllObjects]): removed useless method.
16084	([SOGoGCSFolder
16085	-lookupName:keyinContext:localContextacquire:acquire]): added new
16086	overriden method, to fetch all the required metadata and content
16087	for basic handling of SOGoContentObjects.
16088	([SOGoGCSFolder -fetchContentObjectNames]): prefetch and cache all
16089	the metadata and content of children objects since this method is
16090	used by the PROPFIND operation, which will likely require children
16091	instantiation.
16092	([SOGoGCSFolder -objectClassForComponentName:componentName]): new
16093	mandatory method for subclasses.
16094	([SOGoGCSFolder -objectClassForContent:content]): new mandator
16095	method for subclasses.
16096	([SOGoGCSFolder
16097	-lookupName:keyinContext:localContextacquire:acquire]): fetch and
16098	cache the requested child object record.
16099
16100	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16101	-ownerInContext:localContext]): set a new ivar: activeUserIsOwner
16102	to reduce method calls.
16103
16104	* Main/SOGo.m ([SOGo -dispatchRequest:_request]): we now report
16105	the time taken by the request, if the "SOGoDebugRequests" user
16106	default is set.
16107
16108	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
16109	+objectWithRecord:objectRecordinContainer:newContainer]): new
16110	constructor that instantiate an object based on the data found in
16111	the corresponding database record.
16112	([SOGoContentObject -setOCSPath:newOCSPath]): removed this method and
16113	other OCS related ones, since we no longer fetch the record data
16114	from here. Indeed, the object is now built from within its
16115	container, so that caches can be created and queries avoided.
16116
16117	* SoObjects/SOGo/NSArray+Utilities.m ([NSArray
16118	-asPointersOfObjects]): new method that transforms an NSArray into
16119	an array of ptr**;
16120
161212008-06-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16122
16123	* UI/MailPartViewers/UIxMailPartICalViewer.m
16124	([UIxMailPartICalViewer -canOriginalEventBeUpdated]): new template
16125	accessor that return whether the use status has changed in the
16126	original reply and if its sequence number concurs.
16127
16128	* UI/MailPartViewers/UIxMailPartICalActions.m
16129	([UIxMailPartICalActions -updateUserStatusAction]): we accept the
16130	modification if the sequence number from the reply is equal or
16131	SUPERIOR (for Lightning bugs), rather than inferior, where the
16132	reply is obsolete anyway.
16133
161342008-05-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16135
16136	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
16137	+initialize]): new method where we read the three new defaults
16138	variables "SOGoIMAPAclStyle", "SOGoIMAPAclUsernamesAreQuoted",
16139	"SOGoIMAPAclConformsToIMAPExt".
16140	([SOGoMailFolder +imapAclStyle]): new method that returns the rfc
16141	number to which the imap server conforms to regarding the acl.
16142	([SOGoMailFolder -aclsForUser:uid]): added right 'c' and 'd' from
16143	rfc2086.
16144	([SOGoMailFolder -setRoles:rolesforUser:uid]): convert SOGo
16145	permissions to the acl rights conforming to the RFC configured
16146	with SOGoIMAPAclStyle.
16147	([SOGoMailFolder -aclUsers]): unquote usernames if
16148	"SOGoIMAPAclUsernamesAreQuoted" is set. Remove usernames listed as
16149	special usernames in
16150	http://www.tools.ietf.org/wg/imapext/draft-ietf-imapext-acl/ if
16151	"SOGoIMAPAclConformsToIMAPExt" is set.
16152
16153	* UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor conformsToRFC4314]): new template getter.
16154
161552008-05-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16156
16157	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
16158	-davCollectionQuery:queryContext]): fixed the owner url returned
16159	in the list so that it matches what the regular davOwner method
16160	returns.
16161
16162	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
16163	-renameFolderAction]): select the INBOX folder before renaming the
16164	target folder.
16165
16166	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -loginSuffix]): new
16167	method that returns the login suffix configured in the user
16168	defaults.
16169	([SOGoRootPage -hasLoginSuffix]): returns whether a login suffix
16170	has been configured in the user defaults.
16171
16172	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): request
16173	the user login to the imap server from the LDAP user manager.
16174
16175	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
16176	-getImapLoginForUID:uid]): new method that returns the user
16177	identifier to use when login to the imap server, in case it's not
16178	the ldap uid. This is configurable through the boolean user
16179	default "SOGoForceIMAPLoginWithEmail".
16180
16181	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
16182	-sendMail]): the email passed as parameter to sendmail is now the
16183	bare user email.
16184
161852008-05-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16186
16187	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
16188	-deleteFolderAction]): select the INBOX folder before removing the
16189	target folder, so that Courier does not complain about the current
16190	mailbox being in use.
16191
161922008-05-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16193
16194	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16195	-subscribe:reallyDoinTheNameOf:delegatedUserfromMailInvitation:isMailInvitationinContext:localContext]):
16196	published method.
16197	([-folderReference]): no longer distingish between the user owned
16198	and the subscribed folders.
16199
16200	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
16201	no longer use the "_" in the folder's nameInContainer.
16202
16203	* UI/Common/UIxFolderActions.m ([UIxFolderActions -subscribeAction])
16204	([UIxFolderActions -unsubscribeAction]): use the client object's
16205	method for un-/subscribing.
16206
16207	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16208	-pathArrayToSOGoObject]): removed useless method.
16209
16210	* SoObjects/Appointments/SOGoAppointmentFolder.m
16211	([SOGoAppointmentFolder -davCalendarQuery:queryContext]): added
16212	partial support for the "text-match" caldav directive.
16213
162142008-05-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16215
16216	* UI/Contacts/UIxContactFoldersView.m ([-newAction]): removed
16217	useless method.
16218
162192008-05-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16220
16221	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16222	-davAclQuery:queryContext]): parse the names only of element nodes.
16223
16224	* UI/Common/UIxFolderActions.m ([UIxFolderActions -activateFolderAction])
16225	([UIxFolderActions -deactivateFolderAction]): reversed the logic
16226	and remove or add the folder name from/into the 'InactiveFolders'
16227	settings key.
16228
16229	* SoObjects/Appointments/SOGoAppointmentFolder.m
16230	([SOGoAppointmentFolder -create]): no longer write the folder name
16231	in the 'ActiveFolders' settings key.
16232	([-isActive]): returns whether the folder is NOT listed in the
16233	'InactiveFolders' settings key.
16234
162352008-05-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16236
16237	* Main/SOGo.m ([SOGo -davURL], [SOGo -soURL]): copied methods from
16238	SOGoObject.
16239
16240	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
16241	-davDisplayName]): new overriden method to provide a display name
16242	to the users principal.
16243
16244	* SoObjects/SOGo/SOGoPermissions.[hm]: removed the "Save Acls"
16245	permission since its purposes matches SOPE's "Change Permissions".
16246
16247	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16248	+webdavAclManager]): new overriden method.
16249
16250	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
16251	+webdavAclManager]): new overriden method.
16252
16253	* UI/MailPartViewers/UIxMailPartTextViewer.m (convertChars): do
16254	not cast pointers to unsigned int to avoid problems with big
16255	endian archs.
16256
16257	* SoObjects/Contacts/SOGoContactLDAPFolder.m ([-davNamespaces]):
16258	removed method.
16259
16260	* SoObjects/Contacts/SOGoContactGCSFolder.m ([-davNamespaces]):
16261	removed method.
16262
16263	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16264	+webdavAclManager]): new overriden method.
16265
16266	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder +webdavAclManager]):
16267	new overriden method.
16268
16269	* SoObjects/Appointments/SOGoAppointmentObject.m
16270	([SOGoAppointmentObject +webdavAclManager]): new overriden method.
16271
16272	* SoObjects/Appointments/SOGoAppointmentFolder.m
16273	([SOGoAppointmentFolder +webdavAclManager]): new overriden method.
16274	([-davNamespaces]): removed method.
16275	([-lookupGroupFolderForUIDs:_uidsinContext:])
16276	([-lookupGroupCalendarFolderForUIDs:_uidsinContext:_ctx]):
16277	disabled methods.
16278
16279	* SoObjects/SOGo/SOGoWebDAVAclManager.[hm]: new class module that
16280	implements the rendering of DAV acl trees as well as their mapping
16281	from SOGo permissions.
16282
16283	* SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): libSOGo
16284	is now a framework, so we can simplify the loading of the DAVReportMap.
16285	([-lookupGroupsFolder]): disabled method.
16286	([SOGoObject -davOwner], [SOGoObject -davAclRestrictions])
16287	([SOGoObject -davPrincipalCollectionSet])
16288	([SOGoObject -davCurrentUserPrivilegeSet])
16289	([SOGoObject -davSupportedPrivilegeSet], [SOGoObject -davAcl])
16290	([SOGoObject -davPrincipalMatch:localContext])
16291	([SOGoObject -davSupportedReportSet]): (re-)implemented dav
16292	methods with our new dav rendering paradigm.
16293	([-davNamespaces]): removed method.
16294	([SOGoObject -domNode:nodegetChildNodesByType:type]): new helper
16295	method to help subclass with parsing dav requests, especially wrt
16296	REPORT ones.
16297	([SOGoObject +webdavAclManager]): new overridable method that
16298	returns a properly configured DAV acl manager (see above).
16299
16300	* SoObjects/Appointments/SOGoUserFolder+Appointments.[hm]: new
16301	category module that implements DAV methods required by CalDAV.
16302
16303	* UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
16304	disabled all mentions of "SOGoGroupFolder*".
16305
16306	* SoObjects/SOGo/SOGoDAVRendererTypes.[hm]: removed subclass
16307	module, superseded by the new method mentionned below.
16308
16309	* SoObjects/SOGo/SOGoWebDAVValue.m ([SOGoWebDAVValue
16310	-stringForTag:_keyrawName:setTaginContext:contextprefixes:prefixes]):
16311	a simple wrapper that returns an uninterpreted NSString to SOPE.
16312
16313	* SoObjects/SOGo/NSArray+DAV.[hm],
16314	* SoObjects/SOGo/NSDictionary+DAV.[hm],
16315	* SoObjects/SOGo/NSObject+DAV.[hm],
16316	* SoObjects/SOGo/NSString+DAV.[hm],
16317	* SoObjects/SOGo/NSURL+DAV.[hm]: new class category modules that
16318	handle the correct generation of DAV entries, with namespace
16319	accounting. Those were implemented to enable the use of a simple
16320	SoWebDAVValue as the root of the resulting string, thereby
16321	avoiding the xml escaping done by SOPE when returning a real NSString.
16322
163232008-04-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16324
16325	* SoObjects/SOGo/LDAPSource.m ([LDAPSource -fetchContactsMatching:match])
16326	([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): take all the
16327	mail fields into account when doing a search.
16328
163292008-04-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16330
16331	* SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): the
16332	module is now a framework and we now load the new DAVReportMap
16333	description file.
16334	([-davOwner]): the principal URL is now based on the DAV
16335	application URL.
16336	([SOGoObject
16337	-lookupName:lookupNameinContext:localContextacquire:acquire]): we
16338	now lookup report methods from here (code from SOGoFolder). The
16339	method has changed to refer to the new DAVReportMAP description
16340	file in order to resolve the lookups on self.
16341	([SOGoObject -davSupportedReportSet]): implemented the new
16342	"supported-report-set" dav method, based on the new mechanism
16343	described above.
16344
16345	* SoObjects/SOGo/SOGoFolder.m: REPORT lookups are now done
16346	directly from SOGoObject.
16347
16348	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
16349	-initWithLogin:newLoginroles:newRoles]): we make sure realUID is
16350	not an empty string.
16351
16352	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
16353	-davResourceType]): we declare self as a "principal".
16354
16355	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
16356	-davContentLength]): the content length should is now based on the
16357	UTF-8 encoding.
16358
163592008-04-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16360
16361	* UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
16362	-contrastingTextColor]): new method (code taken from Lightning)
16363	that returns a foreground color easily readible based on the
16364	brightness of the background color.
16365
16366	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16367	-setDavDisplayName:newName]): deny the renaming of the folder if
16368	not owner.
16369
16370	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16371	-davSetProperties:setPropsremovePropertiesNamed:removedPropsinContext:localContext]):
16372	certain properties should be authorized when not owner.
16373
163742008-04-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16375
16376	* UI/Scheduler/UIxColorPicker.[hm]: new class module that
16377	implements a javascript-based color picker.
16378
16379	* UI/Scheduler/UIxCalendarProperties.[hm]: new class module that
16380	implements the interface for renaming and recoloring the
16381	calendars.
16382
163832008-04-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16384
16385	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
16386	([_UIxHTMLMailContentHandler -characters:_charslength:_len])
16387	([_UIxHTMLMailContentHandler -comment:_charslength:_len]): don't
16388	cast the unichar data to char, to avoid issues with endianness
16389	which prevents the CSS from being parsed properly.
16390
16391	* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -isMailReply]): new
16392	method that returns the JS values "true" or "false" as strings is
16393	the mail has a non-null count of recipients.
16394
163952008-04-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16396
16397	* SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -davCalendarQuery:queryContext])
16398	([SOGoAppointmentFolder -davCalendarMultiget:queryContext]):
16399	deduce the cname of objects even if we are using hostless urls.
16400
164012008-03-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16402
16403	* UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -resourceName]):
16404	use the resource display name instead of its "nameInContainer".
16405
164062008-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16407
16408	* SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
16409	-isFolderish]): new overriden method.
16410
16411	* SoObjects/Appointments/SOGoAppointmentFolder.m
16412	([SOGoAppointmentFolder
16413	-appendObject:objectproperties:propertieswithBaseURL:baseURLtoComplexResponse:r]):
16414	check whether the current user has access to the objects returned
16415	before including their properties.
16416
164172008-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16418
16419	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
16420	-primaryFetchProfile]): we unescape the fetched value before
16421	constructing the NSDictionary.
16422
16423	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
16424	-setComponent:newComponent]): the weeks start on sunday in
16425	OpenStep and are indexed from 0.
16426
164272008-03-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16428
16429	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
16430	-takeValuesFromRequest:_rqinContext:_ctx]): treat the regular
16431	monthly recurrences as all others.
16432
16433	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16434	-davSetProperties:setPropsremovePropertiesNamed:removedPropsinContext:localContext]):
16435	returns an exception if the property to modify is not
16436	"davDisplayName" and if the current user has not the owner role
16437	over the current collection.
16438
164392008-03-25  Francis Lachapelle  <flachapelle@inverse.ca>
16440
16441	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
16442	-verticalDragHandleStyle]): CSS style wrt to position of drag
16443	handle saved by current user.
16444	([UIxCalMainView -horizontalDragHandleStyle]): idem.
16445	([UIxCalMainView -eventsListViewStyle]): idem.
16446
16447	* UI/Contacts/UIxContactsListViewContainer.m
16448	([UIxContactsListViewContainer -verticalDragHandleStyle]): CSS
16449	style wrt to position of drag handle saved by current user.
16450	([UIxContactsListViewContainer -horizontalDragHandleStyle]): idem.
16451	([UIxContactsListViewContainer -contactsListContentStyle]): idem.
16452
16453	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
16454	-verticalDragHandleStyle]): CSS style wrt to position of drag
16455	handle saved by current user.
16456	([UIxMailMainFrame -horizontalDragHandleStyle]): idem.
16457	([UIxMailMainFrame -mailboxContentStyle]): idem.
16458
164592008-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16460
16461	* SoObjects/Appointments/SOGoAppointmentFolder.m
16462	([SOGoAppointmentFolder -davCalendarMultiget:queryContext]):
16463	implemented new CalDAV method.
16464	([SOGoAppointmentFolder -davCalendarQuery:queryContext]):
16465	refactored method to return exactly the properties requested in
16466	the query and to share code with the new method above.
16467
16468	* SoObjects/Appointments/SOGoCalendarComponent.m
16469	([SOGoCalendarComponent -davCalendarData]): added method for
16470	better CalDAV compliance.
16471
164722008-03-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16473
16474	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16475	-davAclQuery:queryContext]): declare the "text/xml" mime type only
16476	when the content is not empty. Otherwise, returns no mime type at
16477	all and set the status code to 204.
16478
164792008-03-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16480
16481	* UI/Scheduler/UIxCalMonthViewOld.m ([UIxCalMonthViewOld
16482	-endDate]): removed useless method.
16483
16484	* SoObjects/SOGo/NSCalendarDate+SOGo.m
16485	([-dayOfWeeK:_dayoffsetFromSunday:_offset]): removed useless
16486	method.
16487	([-sundayOfWeek]): removed useless method.
16488
164892008-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16490
16491	* OGoContentStore/OCSContactFieldExtractor.m
16492	([OCSContactFieldExtractor -extractQuickFieldsFromVList:vList]):
16493	new method to handle extraction of quick information from the
16494	VLIST components. I.e.: the display name of the card.
16495
16496	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
16497	-isValidContentName:name]): moved method from
16498	SOGoAppointmentFolder's isValidAppointmentName.
16499
16500	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -objectClassForContent:content])
16501	([SOGoContactGCSFolder -deduceObjectForName:inContext:])
16502	([SOGoContactGCSFolder -requestNamedIsHandledLater:name])
16503	([SOGoContactGCSFolder -lookupName:inContext:acquire:]): those
16504	methods were modified to match the ones in SOGoAppointmentFolder,
16505	in order to manage both vcard and vlist components.
16506
16507	* SoObjects/Contacts/SOGoContactGCSList.[hm]: new class module
16508	that implements the list counterpart to VCARD: VLIST.
16509
16510	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveURL]):
16511	new accessor that returns the url + "saveAsContact".
16512	([UIxContactEditor
16513	-shouldTakeValuesFromRequest:requestinContext:context]): changed
16514	method to match the one from the event and todo editor module.
16515	([UIxContactEditor -editActionName]): changed to "editAsContact".
16516	([UIxContactEditor -newAction]): changed method to match the one
16517	from the event and todo editor module.
16518
16519	* UI/Contacts/UIxListView.m: new view module for the VLIST format
16520	components.
16521
16522	* UI/Contacts/UIxListEditor.m: new edition module for the VLIST
16523	format components.
16524
16525	* SoObjects/Contacts/SOGoContactGCSList.m: new controller module
16526	for the VLIST format.
16527
165282008-03-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16529
16530	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -isFolderish]): new
16531	parent method, meant to be overriden.
16532	([SOGoObject -davIsCollection]): moved method from SOGoFolder up
16533	to this parent class.
16534
165352008-02-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16536
16537	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16538	-davSubscribe:queryContext]): implemented subscribing users other
16539	that the current one, if the user doing the operation is a superuser.
16540	([SOGoGCSFolder -davUnsubscribe:queryContext]): same as above for
16541	unsubscription.
16542
165432008-02-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16544
16545	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
16546	-davUserQuery:queryContext]): new method for the "user-query"
16547	inverse DAV method.
16548
16549	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16550	-aclUsersForObjectAtPath:objectPathArray]): return unique uids.
16551
16552	* SoObjects/SOGo/SOGoFolder.m ([-davNamespaces]): removed method.
16553
16554	* SoObjects/SOGo/SOGoDAVRendererTypes.h (SoWebDAVValue): added
16555	SOGoDAVDictionary webdav value class.
16556
16557	* SoObjects/SOGo/NSArray+Utilities.m ([NSArray -uniqueObjects]):
16558	new method that returns unique occurences of the objects.
16559
16560	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
16561	-davNamespaces]): same as below.
16562
16563	* SoObjects/Appointments/SOGoAppointmentFolder.m
16564	([SOGoAppointmentFolder -davNamespaces]): take the parents
16565	namespaces into account.
16566
16567	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -addUserInAcls:uid]):
16568	new method.
16569	([SOGoObject -removeUserFromAcls:uid]): new methods (see below).
16570	([SOGoObject -davNamespaces]): declare the
16571	"urn:inverse:params:xml:ns:inverse-dav" namespace.
16572	([SOGoObject -davRecordForUser:user])
16573	([SOGoObject -davAclQuery:queryContext]): new methods to answer to
16574	the "user-list", "roles", "set-roles", "add-user", "remove-user"
16575	inverse DAV methods.
16576
16577	* UI/Common/UIxObjectActions.m ([UIxObjectActions -addUserInAclsAction])
16578	([UIxObjectActions -removeUserFromAclsAction]): moved the core of
16579	those methods into SOGoObject and translate its result into an
16580	appropriate HTTP status.
16581
165822008-02-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16583
16584	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davInverseACL]):
16585	first implementation of a DAV interface to SOGo roles. Returns the
16586	result in JSON.
16587
165882008-02-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16589
16590	* GNUmakefile: migrated to GNUstep Make 2.
16591
165922008-02-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16593
16594	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
16595	-iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]): we
16596	no longer invoke [container login], since this method has been
16597	removed. Instead we invoke ownerInContext:.
16598
16599	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
16600	-fetchContentObjectNames]): new model method for all subclasses.
16601	This will be removed in the future since toOneRelationshipKeys
16602	must be sufficient.
16603
16604	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16605	-defaultFilenameExtension]): removed useless method.
16606	([-toOneRelationshipKeys]): moved method into SOGoFolder.m.
16607
166082008-02-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16609
16610	* UI/MailPartViewers/UIxMailPartICalViewer.m
16611	([UIxMailPartICalViewer -currentUserAttendee]): new method that
16612	returns the current user as an attendee representation in the
16613	displayed event, if found.
16614
16615	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
16616	-_urlHostString]): replace "@" with %40 AFTER invoking
16617	stringByEscapingURL.
16618
16619	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
16620	-isBodyPartKey:key]): hacked a little bit to test for the length
16621	of the key trimmed from its bordering digits. So if the key
16622	contains only digits, we consider it to be a body part key. There
16623	is room for improvement but we can consider this will be accurate
16624	in 99.99% of the cases. Also, removed the context parameter which
16625	was useless.
16626
16627	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16628	-davComplianceClassesInContext:localContext]): new method,
16629	declaring "access-control" in the compliance classes.
16630
166312008-02-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16632
16633	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
16634	-imap4URLString]): compose the mail hostname part of the url by
16635	escaping the username. This is part of the fix below.
16636
16637	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): if the
16638	loginname for the default mail account contains an "@", it should
16639	be url-escaped to avoid confusing NSURL.
16640	([SOGoUser -accountWithName:accountName]): new method that wanders
16641	the accounts list and returns the one that matches the name passed
16642	as parameter, if found.
16643
16644	* SoObjects/SOGo/SOGoUserFolder.m ([-login]): removed useless
16645	method.
16646	([SOGoUserFolder -ownerInContext:_ctx]): compute the owner name
16647	from a SOGoUser instance initialized with the nameInContainer as
16648	initial login name. This way, all the objects belonging to the
16649	corresponding user will be accessible with all the fields
16650	mentionned in the "bindFields" LDAP settings value.
16651	([SOGoUserFolder -privateCalendars:keyinContext:localContext])
16652	([SOGoUserFolder -privateContacts:_keyinContext:_ctx]): use -[self
16653	ownerInContext:] to determine the OCS path.
16654
16655	* SoObjects/Mailer/SOGoSharedMailAccount.[hm]: removed useless
16656	module.
16657
16658	* SoObjects/Mailer/SOGoSharedInboxFolder.[hm]: removed useless
16659	module.
16660
16661	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
16662	-setSignature:newSignature]): invoke -[SOGoUser saveMailAccounts]
16663
16664	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -defaultIdentity]): method
16665	moved from UIxPreferences.m.
16666	([SOGoUser -saveMailAccounts]): new methods that save the
16667	"MailAccounts" preference in the user settings.
16668
16669	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
16670	+initialize]): issue a warning whenever "SOGoDefaultMailDomain"
16671	is not configured in the user defaults, setting it to "localhost"
16672	by default.
16673	([LDAPUserManager +defaultMailDomainIsConfigured]): new method
16674	that returns whether "SOGoDefaultMailDomain" is configured.
16675
166762008-02-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16677
16678	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -ocsFolder]):
16679	send an email only when not in a dav request.
16680	([SOGoGCSFolder -delete]): same as above.
16681
16682	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
16683	-supportsQuotas]): test quota support by querying the server
16684	capability.
16685
166862008-02-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16687
16688	* UI/MailPartViewers/UIxMailPartICalActions.m
16689	([UIxMailPartICalActions -acceptAction])
16690	([UIxMailPartICalActions -declineAction]): define the organizer of
16691	the event as one of the reply-to or from addresses whenever the
16692	organizer is not specified in those Outlook invitations.
16693
166942008-02-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16695
16696	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
16697	-quotaSupport]): new json string that lists the quota support
16698	among the user's mail accounts.
16699
16700	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
16701	-supportsQuotas]): new method that returns whether the current
16702	account server has support for quotas.
16703
167042008-01-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16705
16706	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
16707	-davSetProperties:setPropsremovePropertiesNamed:removedPropsinContext:localContext]):
16708	new method that takes the displayname into account.
16709
16710	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
16711	-davCreateCollection:pathInfoinContext:localContext]): new method
16712	that acts as a proxy to newFolderWithName:andNameInContainer:.
16713
167142008-01-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16715
16716	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
16717	-takeValuesFromRequest:_rqinContext:_ctx]): make use of the <<
16718	operator to handle the day masks in custom rules.
16719
167202008-01-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16721
16722	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
16723	+userWithLogin:newLoginroles:newRoles]): test if the user is well
16724	initialized before registering it with the SOGo cache.
16725	([SOGoUser -initWithLogin:newLoginroles:newRoles]): returns a user
16726	only if the realUID has been found, otherwise we dealloc self and
16727	return nil.
16728
16729	* SoObjects/Appointments/SOGoAppointmentFolder.m: if c_cycleinfo
16730	is an NSNull instance, we consider it to be empty and return
16731	automatically with an error message in the log.
16732
16733	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
16734	-extractQuickFieldsFromTodo:_task]): handle recurrence info in
16735	tasks.
16736
16737	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
16738	-pathToAttachment]): in the case where the client object is not a
16739	mail body part (when the message IS the attachment), we append 0
16740	to generate the url, instead of the filename.
16741
167422008-01-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16743
16744	* SoObjects/Appointments/SOGoAppointmentFolder.m
16745	([SOGoAppointmentFolder
16746	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
16747	change the algorithm a little bit to compare the roles of the
16748	current users to see if he is an "owner" instead of solely
16749	checking its login name. This enables the users listed as
16750	"SuperUsers" to be considered as owners and see everything as
16751	expected.
16752
167532008-01-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16754
16755	* SoObjects/Contacts/SOGoFolder+CardDAV.m ([SOGoFolder
16756	-davAddressbookQuery:queryContext]): when empty values are fed to
16757	SOGo, their dictionary should be explicitly set to nil.
16758
167592008-01-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16760
16761	* SoObjects/SOGo/SOGoCache.m ([SOGoCache
16762	-registerObject:objectwithName:nameinContainer:container]):
16763	register the object and its parents too.
16764
16765	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
16766	+userWithLogin:newLoginroles:newRoles]): try to retrieve the
16767	specified user from the SOGoCache.
16768
16769	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
16770	-lookupName:lookupNameinContext:localContextacquire:acquire]): try
16771	to retrieve the object specified from the cache and returns it if
16772	it exists.
16773
16774	* SoObjects/Appointments/SOGoAppointmentFolder.m
16775	([SOGoAppointmentFolder -lookupName:inContext:acquire:]): cache
16776	the result in the SOGoCache.
16777
16778	* Main/SOGo.m ([SOGo -dispatchRequest:_request]): initialize and
16779	kill the shared cache before and after the connection processing.
16780
16781	* SoObjects/SOGo/SOGoCache.[hm]: new cache module implementing a
16782	per-connection cache mechanism.
16783
167842008-01-16  Ludovic Marcotte  <ludovic@inverse.ca>
16785
16786	* Minor adjustments / bug fixes to previous commit.
16787
167882008-01-14  Ludovic Marcotte  <ludovic@inverse.ca>
16789
16790	* Added files related to the custom recurrence
16791	editor of the SOGo Web interface. The CSS
16792	needs to be done correctly.
16793
16794	* Fixed a bug in the daily recurrence generator.
16795	We now consider the byDayMask, if any.
16796
16797	* Moved the repeat/reminder code to the
16798	UIxComponentEditor class / template.
16799
16800	* Added a few JavaScript methods to HTMLElement.js
16801
168022008-01-08  Francis Lachapelle  <flachapelle@inverse.ca>
16803
16804	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
16805	-composeAction]): the mailto form parameter can now be a
16806	comma-separated list of email addresses.
16807
168082007-12-21  Ludovic Marcotte  <ludovic@inverse.ca>
16809
16810	* UI/Contacts/UIxContactView.m
16811	Modified -secondaryEmail so that we always get
16812	the "last" email address in case no preferred
16813	one was specified in the vCard. Also fixed
16814	a memory leak in this method.
16815
168162007-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16817
16818	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
16819	-aclsForUser:uid]): removed useless ACL checks on the current
16820	object to reduce DB usage.
16821
168222007-12-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16823
16824	* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -attachmentNames]):
16825	initialize "attachmentNames" if it was NOT initialized... I think
16826	this was a typo.
16827
16828	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
16829	-fetchMailForForwarding:sourceMail]): append the signature to
16830	mails forwarded as attachment.
16831
16832	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
16833	-clientPart]): new method that returns the corresponding
16834	SOGoMailPart instance.
16835	([UIxMailPartViewer -pathToAttachment]): simplified method, ensure
16836	the filename is present. If the part has none, create one with the
16837	"Untitled-" prefix. Add an extension if none is found.
16838
16839	* UI/MailPartViewers/UIxMailPartImageViewer.m
16840	([UIxMailPartImageViewer -pathToImage]): removed method since it
16841	implementents exactly the same functionality as
16842	[UIxMailPartViewer -pathToAttachment].
16843
16844	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
16845	-filename]): new method that returns the filename to the current
16846	part by taking the different mime implementations into account.
16847	[SOGoMailBodyPart -isBodyPartKey:inContext:]: commented out method
16848	because we need to handle the part recognition in a different way,
16849	by using the prefix "part" for example. One day we will do that.
16850
16851	* UI/Scheduler/NSArray+Scheduler.m ([NSMutableArray
16852	-reverseArray]): new category method.
16853
168542007-12-17  Francis Lachapelle  <flachapelle@inverse.ca>
16855
16856	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
16857	-composeAction]): fixed URL when no recipient is specified.
16858
168592007-12-14  Ludovic Marcotte  <ludovic@inverse.ca>
16860
16861	* SoObjects/Appointments/SOGoCalendarComponent.m
16862	We set headers in lowercase so that they get properly
16863	encoded by SOPE.
16864
16865	* SoObjects/Mailer/SOGoDraftObject.m
16866	Minor cleanups.
16867
168682007-12-13  Francis Lachapelle  <flachapelle@inverse.ca>
16869
16870	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction])
16871	([UIxMailMainFrame -getFoldersStateAction]): new methods to get
16872	and set the folders state of the user's web view.
16873
168742007-12-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16875
16876	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new
16877	action methods that generates a segmentation faults.
16878	([SOGoRootPage -exceptionAction]): new method that returns an
16879	exception object.
16880	([SOGoRootPage -raisedExceptionAction]): new method that raises an
16881	exception without returning it.
16882
16883	* UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWithStatus:status])
16884	([UIxComponent -responseWithStatus:statusandString:contentString])
16885	([UIxComponent -responseWithStatus:statusandJSONRepresentation:contentObject])
16886	([UIxComponent -responseWith204]): new utility methods.
16887
16888	* UI/Common/WODirectAction+SOGo.m ([WODirectAction
16889	-responseWithStatus:statusandString:contentString])
16890	([WODirectAction
16891	-responseWithStatus:statusandJSONRepresentation:contentObject]):
16892	new utility methods.
16893
16894	* SoObjects/SOGo/NSScanner+BSJSONAdditions.m ([NSScanner
16895	-scanJSONStringDelimiterString]): new category module taken from
16896	BSJSONAdditions 1.3.
16897
16898	* SoObjects/SOGo/NSDictionary+BSJSONAdditions.[hm]: new category
16899	module taken from BSJSONAdditions 1.3.
16900	http://blakeseely.com/downloads.html
16901
169022007-12-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16903
16904	* SoObjects/SOGo/NSString+Utilities.m ([NSString
16905	-stringByDetectingURLs]): we now go back until the real start of
16906	the found url.
16907
16908	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
16909	-fetchAttachmentIds]): new method that wanders through the mail
16910	structure to collect the attachment content ids and to associate
16911	them with their url.
16912
16913	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
16914	([_UIxHTMLMailContentHandler
16915	-startElement:_localNamenamespace:_nsrawName:_rawNameattributes:_attributes]):
16916	the content-ids are now enclosed between "<>" before retrieval
16917	from the attachment dictionary.
16918	([UIxMailPartHTMLViewer -cssContent])
16919	([UIxMailPartHTMLViewer -flatContentAsString]): the content-ids
16920	are now fetch from the clientobject (an instance of
16921	SOGoMailObject) with the new "fetchAttachmentIds" method.
16922
169232007-12-12  Francis Lachapelle  <flachapelle@inverse.ca>
16924
16925	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
16926	-eventsListAction]): added the state of the calendar's owner with
16927	respect to the current event.
16928
16929	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
16930	-_loadAttendees]): added the retrieval of attendees state on
16931	current event.
16932
169332007-12-12  Ludovic Marcotte  <ludovic@inverse.ca>
16934
16935	* UI/MailPartViewers/UIxMailRenderingContext.{h,m}
16936	Removed template caching which added very little
16937	and created re-entrant issues.
16938
16939	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
16940	Added a hack (and stated so in the source file)
16941	to avoid what seems to be a bug in libxml.
16942
169432007-12-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16944
16945	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
16946	-davCreationDate])
16947	([SOGoContentObject -davLastModified])
16948	([SOGoContentObject -davContentLength]): implemented dav methods.
16949
169502007-12-10  Francis Lachapelle  <flachapelle@inverse.ca>
16951
16952	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
16953	-GETAction:]): when asAttachment is set to true, the header
16954	"content-disposition" is set to "attachment" so browsers like IE
16955	and Safari properly asks the user to save the file.
16956
169572007-12-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16958
16959	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
16960	([UIxMailPartHTMLViewer -flatContentAsString]): when in
16961	UIxMailPartAlternative, scan the filenames of potential cid at the
16962	same level as our parent.
16963
169642007-12-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16965
16966	* Main/SOGo.m ([SOGo -run]): the table creation script now have a
16967	@{tableName} substitution variable to be substitued with the real
16968	table name obtained from the configuration variables.
16969
169702007-12-07  Ludovic Marcotte  <ludovic@inverse.ca>
16971
16972	* UI/MailPartViewers/UIxMailRenderingContext.m
16973	We treat multipart/appledouble like multipart/mixed
16974	for now. That allows the user to save both parts.
16975
16976	* Corrected typos in Localizable.string files.
16977
169782007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
16979
16980	* UI/Common/UIxAclEditor.m ([-currentUserIsOwner]): replaced
16981	method with -canModifyAcls that invokes the security manager
16982	instead for the permission "SaveAcls" on the client object.
16983
16984	* SoObjects/Appointments/SOGoCalendarComponent.m
16985	([SOGoCalendarComponent -contentAsString]): securize the returned content.
16986	([SOGoCalendarComponent -aclsForUser:uid]): check whether the user
16987	is an organizer or a participant as well.
16988
16989	* SoObjects/Appointments/SOGoAppointmentObject.m
16990	([SOGoAppointmentObject -changeParticipationStatus:_status]): the
16991	user we should change the status of is not the active user but the
16992	owner of the object. This is for delegation.
16993
16994	* SoObjects/Appointments/SOGoAppointmentFolder.m
16995	([SOGoAppointmentFolder -fetchContentObjectNames]): fetch the
16996	elements through the fetchFields:from:to:title:component: method
16997	method, so that the result is already filtered depending on the
16998	acl.
16999
17000	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
17001	-toolbar]): if the current user is a delegate, take the permission
17002	"ModifyComponent" into account. Also, do not let him/her modify an
17003	event for which he/she is the organizer.
17004
17005	* SoObjects/Contacts/SOGoContactLDAPFolder.m
17006	([SOGoContactLDAPFolder -davResourceType]): declared as a carddav
17007	addressbook collection.
17008
17009	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
17010	-davResourceType]):  declared as a carddav addressbook collection.
17011
17012	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -davLastModified]):
17013	override SoObject's implementation. Otherwise a localized date is returned.
17014
17015	* UI/Common/UIxPageFrame.m ([UIxPageFrame -isCalendar])
17016	([UIxPageFrame -isContacts], [UIxPageFrame -isMail]): getters to
17017	determine which module is the current one.
17018
170192007-12-06  Francis Lachapelle  <flachapelle@inverse.ca>
17020
17021	* UI/Scheduler/NSArray+Scheduler.m ([NSArray -compareEventsTitleAscending:otherEvent])
17022	([NSArray -compareEventsLocationAscending:otherEvent])
17023	([NSArray -compareEventsEndDateAscending:otherEvent])
17024	([NSArray -reversedArray]): new methods that sort an array of
17025	events depending of various parameters.
17026
17027	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
17028	-eventsListAction]): added support for sorting events.
17029
170302007-12-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17031
17032	* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction])
17033	([UIxMailEditor -sendAction]): make sure that the attachments
17034	having the same filename are correctly sequenced (ex: base.ext,
17035	base-1.ext, base-2.ext).
17036
17037	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
17038	-fetchBLOB]): added support for quoted-printable decoding. Also,
17039	we return nil if the type is not supported.
17040
170412007-12-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17042
17043	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -newAction]):
17044	create task obejcts with the .ics extension.
17045
17046	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
17047	-newAction]): create appointment objects with the .ics extension.
17048
17049	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor -newAction]):
17050	create objects with the .vcf extension.
17051
17052	* Main/NSException+Stacktrace.m: added missing symbols from
17053	NSException.m and NSDebug.m (GNUstep).
17054
17055	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
17056	-foldersSearchAction]): make use of the new search methods in
17057	SOGoUserFolder (see below).
17058
17059	* UI/Contacts/UIxContactFoldersView.m ([-foldersSearchAction]):
17060	moved method into ../MainUI/SOGoUserHomePage.m.
17061
17062	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
17063	-foldersOfType:folderTypeforUID:uid]): only return folders owned
17064	by the specified user.
17065
170662007-12-05  Francis Lachapelle  <flachapelle@inverse.ca>
17067
17068	* SoObjects/Mailer/SOGoDraftObject.m: the condition for replyToAll
17069	has to be done later to avoid duplicated to and cc addresses.
17070
170712007-12-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17072
17073	* SoObjects/Appointments/SOGoAppointmentFolder.m
17074	([SOGoAppointmentFolder -davCalendarQuery:queryContext]): fixed a leak.
17075
17076	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder -davSubscribe:localContext])
17077	([SOGoGCSFolder -davUnsubscribe:localContext]): subscribe an
17078	unsubscribe from DAV-based accesses. We could be compatible with
17079	Microsoft's extensions but we have no need for a "subcription id",
17080	so we implement our own.
17081
17082	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
17083	-POSTAction:localContext]): new method to intercept DAV POSTs,
17084	which we now use to implement certain custom commands such as
17085	"subscribe" and "unsubscribe".
17086
17087	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
17088	-davNamespaces]): declare the
17089	"urn:inverse:params:xml:ns:inverse-dav" xml ns.
17090	([SOGoUserFolder -foldersOfType:folderTypeforUID:uid]): new method
17091	designed to replace the UIxContactFoldersView.m mechanism for
17092	displaying folders to subcribe to, as a common code base for both
17093	Web and DAV-based subscriptions.
17094	([SOGoUserFolder -foldersOfType:typematchingUID:uid]): same as
17095	above.
17096	([SOGoUserFolder -davCollectionQuery:queryContext]): new method
17097	that implement a custom DAV-based protocol query for querying
17098	folder based on specified attributes.
17099
171002007-12-03  Ludovic Marcotte  <ludovic@inverse.ca>
17101
17102	* Main/NSException+Stacktrace.{h,m} - new files
17103	to handle automatic stack trace generation
17104	upon an uncaught exception.
17105
17106	* Updated the templates and Localizable.string files
17107	to fix typos and add new strings.
17108
17109	* SoObjects/Mailer/SOGoMailBodyPart.m
17110	Fixed attachment retreival when the first character
17111	is a digit.
17112
17113	* SoObjects/SOGo/SOGoGCSFolder.m
17114	Fixed the sending of emails when folders are created/removed.
17115	Notifications are sent if the defaults SOGoFoldersSendEMailNotifications
17116	is set to YES.
17117
17118	* UI/Common/UIxUserRightsEditor.m
17119	* UI/Templates/SOGoACLEnglishModificationAdvisory.wox
17120	* UI/Templates/SOGoACLFrenchModificationAdvisory.wox
17121	* UI/Templates/SOGoACLGermanModificationAdvisory.wox
17122	Added the capabilities to email notifications when ACLs have
17123	changed on a DAV collection or an IMAP mailbox. Also added
17124	new templates (3 .wox) to deal with this.
17125
17126	* UI/WebServerResources/ContactsUI.js
17127	UI/WebServerResources/SchedulerUI.js
17128	Added warnings on operations w/o selection.
17129
171302007-11-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17131
17132	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
17133	-appendSubscribedSources]): don't include sources for which we
17134	don't have the SOGoPerm_AccessObject permission.
17135
17136	* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
17137	-rfc822DateString]): we want positive timezones to be specified
17138	with a leading "+" too.
17139
171402007-11-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17141
17142	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
17143	+folderWithSubscriptionReference:referenceinContainer:aContainer]):
17144	return nil if the subscribed folder has no display name (meaning
17145	it no longer exists).
17146
17147	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
17148	-appendPersonalSources]): don't include sources which are no
17149	longer existing.
17150
17151	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
17152	-ocsPathOfContainer]): return the intended value, not that of
17153	ocsPath...
17154
17155	* SoObjects/Appointments/SOGoCalendarComponent.m
17156	([SOGoCalendarComponent -sendResponseToOrganizer]): send the
17157	message only of sendEMailNotifications is set.
17158
17159	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -subscriptionRoles]):
17160	new method that returns the roles that qualifies for adding the
17161	special "authorized subscribed" sogo role.
17162
171632007-11-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17164
17165	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
17166	-aclsForUser:uid]): copy all the roles from the container. If the
17167	object is new, make sure the roles contain "ObjectEditor" if and
17168	only if "ObjectCreator" is present.
17169
17170	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
17171	-aclsForUser:uid]): no longer take the "ObjectReader" role into
17172	account.
17173
17174	* UI/Common/UIxFolderActions.m ([UIxFolderActions
17175	-canAccessContentAction]): always return HTTP status 204. We want
17176	this because we are relying on the SOPE access control manager to
17177	grant access to this method. This requires a fine-tuned access
17178	control in SOGo itself...
17179
17180	* UI/Contacts/UIxContactsUserRightsEditor.m ([-userCanReadObjects])
17181	([-setUserCanReadObjects:userCanReadObjects]): removed methods.
17182
17183	* UI/MailerUI/UIxMailUserRightsEditor.m ([UIxMailUserRightsEditor
17184	-updateRights]): no longer take the "ObjectReader" role into account.
17185	([-userCanReadMails], [-setUserCanReadMails:userCanReadMails]):
17186	removed methods.
17187
17188	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
17189	-fetchFreeBusyInfosFrom:_startDateto:_endDate]): specify context
17190	when looking up the Calendar folder.
17191
171922007-11-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17193
17194	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): same as below.
17195
17196	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
17197	-event]): create the event if it doesn't exist.
17198
17199	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -userHasCalendarAccess])
17200	([UIxPreferences -userHasMailAccess]): same as below, for
17201	displaying preference tabs.
17202
17203	* UI/Common/UIxPageFrame.m ([UIxPageFrame
17204	-userHasCalendarAccess]): new accessor for the link banner.
17205	([UIxPageFrame -userHasMailAccess]): same as above.
17206
17207	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
17208	-toManyRelationshipKeys]): do not report the path to modules to
17209	which the user has no access. No longer cache this information
17210	statically, the array will be generated at each call.
17211	([SOGoUserFolder -lookupName:_keyinContext:_ctxacquire:_flag]):
17212	ignore the path to modules to which the user has no access.
17213
17214	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -canAccessModule:module]):
17215	new method that returns whether the user has access to the
17216	specified module.
17217
17218	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
17219	-initFromUDSource:udSource]): take a new parameter named
17220	'ModulesContraints' that defines a set of constraints for
17221	accessing specified named modules. This is an optout, meaning the
17222	modules will be present unless a constraint is specified.
17223
17224	* SoObjects/Appointments/SOGoAppointmentFolder.m
17225	([SOGoAppointmentFolder
17226	-roleForComponentsWithAccessClass:accessClassforUser:uid]): cache
17227	acl to reduce method calls.
17228	([SOGoAppointmentFolder
17229	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
17230	if the user is not the current user, we strip the useless info
17231	from the meta data.
17232
17233	* UI/Common/WODirectAction+SOGo.m ([WODirectAction
17234	-labelForKey:key]): new category method.
17235
17236	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
17237	-event]): same as below.
17238
17239	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -todo]): request a
17240	secured version of the component.
17241
17242	* UI/MailPartViewers/UIxMailPartViewer.m
17243	([-fallbackStringEncoding]): removed method.
17244	([UIxMailPartViewer -flatContentAsString]): we no longer use [self
17245	fallbackStringEncoding]. Instead we directly specify
17246	NSISOLatin1StringEncoding if UTF-8 has failed.
17247
17248	* UI/MailPartViewers/UIxMailPartICalViewer.m
17249	([-fallbackStringEncoding]): removed method.
17250
172512007-11-25  Ludovic Marcotte  <ludovic@inverse.ca>
17252
17253	* SoObjects/Mailer/SOGoMailForward.m
17254	Use [sourceMail decodedSubject] instead of [sourceMail subject]
17255	Signature fix in -signature - see the comment
17256	for SOGoMailReply.
17257
17258	* SoObjects/Mailer/SOGoMailObject.m
17259	Improved -stringFromData: to try UTF-8 then fallback to Latin1
17260
17261	* SoObjects/Mailer/SOGoMailReply.m
17262	Modified -messageBody to strip the signature from the reply.
17263	Also modified -signature to add "-- \n%@" instead of the
17264	broken ""--\r\n%@" pattern.
17265
17266	* UI/MailPartViewers/UIxMailPartAlternativeViewer.m
17267	We now favor text/calendar parts over text/html and
17268	text/plain parts when viewing a multipart/alternative mail.
17269	This allows us to show the email invitations coming from
17270	Microsoft Outlook.
17271
17272	* UI/MailerUI/UIxMailAccountActions.m
17273	Signature fix in -composeAction - see the comment
17274	for SOGoMailReply.
17275
17276	* UI/MailPartViewers/UIxMailPartViewer.m
17277	Modified -flatContentAsString to use UTF-8 as the
17278	default fallback encoding for 8-bit content.
17279
17280	* SoObjects/Mailer/SOGoDraftObject.m
17281	Modified _fillInReplyAddresses:replyToAll:envelope:
17282	so that if there's no recipient, we add at least
17283	ourself to the list.
17284	Fixed a mem leak in the same method.
17285
172862007-11-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17287
17288	* UI/MailPartViewers/UIxMailRenderingContext.m
17289	([UIxMailRenderingContext -viewerForBodyInfo:_info]): same as below.
17290
17291	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
17292	-plainTextContentFetchKeys]): same as below.
17293
17294	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
17295	+bodyPartClassForMimeType:mimeTypeinContext:_ctx]): accept the
17296	application/ics type from Google Calendar.
17297
17298	* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
17299	+distantFuture]): rewrote method to return an object that is
17300	compatible with NSCalendarDate, unlike the implementation in
17301	GNUstep.
17302	([NSCalendarDate +distantPast]): same as above.
17303
173042007-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17305
17306	* UI/MailPartViewers/UIxMailPartHTMLViewer.m: fixed infinite loop
17307	when charset is us-ascii, match it to ascii rather than none.
17308
17309	* SoObjects/Appointments/SOGoAppointmentFolder.m
17310	([SOGoAppointmentFolder
17311	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatetitle:titlecomponent:_component]):
17312	added search on the c_title column too.
17313
17314	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
17315	-eventsListAction]): take the "search" url parameter into account.
17316	([UIxCalListingActions -eventsListAction]): fetch events matching
17317	the title filter too.
17318
17319	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -connectAction]): the
17320	user infos are now posted as "application/x-www-form-urlencoded".
17321	So we have to have like a form has been posted.
17322
173232007-11-21  Francis Lachapelle  <flachapelle@inverse.ca>
17324
17325	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
17326	-calendarList]): also returns the calendar of the current
17327	event. This is required	so the proper calender is selected when
17328	you view an event to which you don't have write access.
17329
17330	* UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
17331	also returns true for super users.
17332
173332007-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17334
17335	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
17336	-lookupImap4BodyPartKey:inContext:]): return a correct body part
17337	when "0" is requested, taking its mime-type into account.
17338
17339	* UI/MailPartViewers/UIxMailRenderingContext.m
17340	([UIxMailRenderingContext -flatContentForPartPath:_partPath]):
17341	return content for part "0", which would be the message body.
17342
173432007-11-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17344
17345	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
17346	([_UIxHTMLMailContentHandler
17347	-setContentEncoding:newContentEncoding]): new method that
17348	specifies an xml charset to return to the parser.
17349	([UIxMailPartHTMLViewer -flatContentAsString]): specifies the
17350	charset to the content handler before parsing.
17351
17352	* SoObjects/Appointments/SOGoAppointmentObject.m: don't take an
17353	empty c_name as a valid response when looking up an event. Create
17354	one in that case instead.
17355
173562007-11-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17357
17358	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -signature]):
17359	returns the signature for the default identity of the default
17360	accouunt...
17361	([UIxPreferences -setSignature:newSignature]): accessor that sets
17362	the default signature.
17363
17364	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
17365	-composeAction]): append the message signature to the new draft.
17366
17367	* SoObjects/Mailer/SOGoMailReply.m ([SOGoMailReply -signature]):
17368	same as above.
17369
17370	* SoObjects/Mailer/SOGoMailForward.m ([SOGoMailForward
17371	-signature]): new method that takes the user's signature and put
17372	it at the end of the message, if exists.
17373
17374	* UI/Common/UIxPageFrame.m ([UIxPageFrame -isSuperUser]): new
17375	accessor that forwards the call to the active user.
17376
17377	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -signature]): returns the
17378	user default signature.
17379	([SOGoUser -isSuperUser]): declares whether the user is listed
17380	among the super users.
17381
17382	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
17383	-setComponent:newComponent]): retain the component object.
17384	([UIxComponentEditor -organizerIdentity]): new accessor method to
17385	handle list of possible organizers.
17386
17387	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
17388	-event]): retain the returned event object.
17389
17390	* SoObjects/Appointments/SOGoAppointmentObject.m
17391	([SOGoAppointmentObject -saveComponent:newEvent]): reset the
17392	organizer only if there are no attendees AND the owner of the
17393	component is not the organizer him-/herself.
17394
17395	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
17396	-toolbar]): rewrote in a way that ensures that each case is
17397	handled properly.
17398
17399	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -isEqual:otherUser]): new
17400	override method.
17401
17402	* UI/Scheduler/UIxTaskEditor.m ([-acceptAction])
17403	([-declineAction]): commented out unused methods.
17404
17405	* UI/MailPartViewers/UIxMailPartICalActions.m
17406	([UIxMailPartICalActions -deleteFromCalendarAction]): actually
17407	delete the found object.
17408
174092007-11-18  Ludovic Marcotte  <ludovic@inverse.ca>
17410
17411	* SoObjects/Mailer/SOGoMailBodyPart.m
17412	SoObjects/Mailer/SOGoMailObject.m
17413	UI/MailPartViewers/UIxMailPartViewer.m
17414	Added support of messages containing non-textual
17415	content and no parts.
17416
17417	* UI/MailerUI/UIxMailView.m
17418	SoObjects/Mailer/SOGoMailObject.m
17419	UI/Templates/MailerUI/UIxMailView.wox
17420	Added support for the Reply-To header upon
17421	message display.
17422
174232007-11-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17424
17425	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]):
17426	invoke saveComponent:.
17427
17428	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -hasOrganizer])
17429	([UIxComponentEditor -organizerName]): new template accessor
17430	related to displaying the event's organizer.
17431	([-containsConflict:_component]): removed method.
17432	([UIxComponentEditor -takeValuesFromRequest:_rqinContext:_ctx]):
17433	set RSVP to "TRUE" on each attendee.
17434
17435	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
17436	-saveAction]): invoke saveComponent:.
17437
17438	* UI/MailPartViewers/UIxMailPartICalViewer.m
17439	([UIxMailPartICalViewer -isLoggedInUserTheOrganizer]): make use of
17440	the -userIsOrganizer: category method.
17441	([-isLoggedInUserAnAttendee]): make use of -userIsParticipant:.
17442	([UIxMailPartICalViewer -hasSenderStatusChanged]): new template
17443	accessor that determines whether the "Update" button should be
17444	displayed.
17445
17446	* UI/MailPartViewers/UIxMailPartICalActions.m
17447	([UIxMailPartICalActions -deleteFromCalendarAction]): implemented
17448	action.
17449	([UIxMailPartICalActions -updateUserStatusAction]): implemented
17450	action.
17451
17452	* UI/Common/UIxPageFrame.m ([UIxPageFrame
17453	-setCssFiles:newCSSFiles]): new accessor that enables the
17454	sub-templates to specify extra CSS files to load.
17455
17456	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
17457	-homeFolderInContext:context]): cache the home folder of the user
17458	object instead of the current user.
17459
17460	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
17461	-deleteEntriesWithIds:ids]): invokes the "prepareDelete" optional
17462	method if the child object implements it.
17463
17464	* SoObjects/SOGo/SOGoContentObject.m ([-setContentString:])
17465	removed method.
17466
17467	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
17468	-setBaseDN:newBaseDNIDField:newIDFieldCNField:newCNFieldUIDField:newUIDFieldmailFields:newMailFieldsandBindFields:newBindFields]):
17469	take a new "mailFields" parameter defining an array of fields
17470	where to look at when searching the user's emails. It defaults to
17471	the standard "mail" LDAP field.
17472
17473	* SoObjects/Appointments/SOGoAptMailICalReply.[hm]: new
17474	SoComponent implementing a template for ITIP replies.
17475
17476	* SoObjects/Appointments/iCalPerson+SOGo.m ([iCalPerson
17477	-mailAddress]): new method that returns a properly formatted email
17478	address for the specified person entry.
17479	([iCalPerson -uid]): new method that tests whether the user is
17480	known to the system and if so, returns its user id.
17481
17482	* SoObjects/Appointments/iCalPerson+SOGo.[hm]: new category module.
17483
17484	* SoObjects/Appointments/iCalEventChanges+SOGo.m
17485	([iCalEventChanges -sequenceShouldBeIncreased]): determine whether
17486	the changes involved need a sequence inscrease, based on the
17487	RFC2446 (ITIP).
17488
17489	* SoObjects/Appointments/iCalEventChanges+SOGo.[hm]: new category
17490	module.
17491
17492	* SoObjects/Appointments/iCalEvent+SOGo.m ([iCalEvent
17493	-isStillRelevant]): new overriden method determining the relevance
17494	of the current event based on its end date.
17495
17496	* SoObjects/Appointments/iCalEvent+SOGo.[hm]: new category module.
17497
17498	* SoObjects/Appointments/iCalEntityObject+SOGo.m
17499	([iCalEntityObject -attendeeUIDs]): new category methods that
17500	returns an array containing the uids of the system-know attendees.
17501	([iCalEntityObject -isStillRelevant]): new template method.
17502	([iCalEntityObject -itipEntryWithMethod:method]): clone the
17503	current entry calendar with the specified ITIP method.
17504	([iCalEntityObject -attendeesWithoutUser:user]): returns an array
17505	of attendees while making sure the specified user is not listed.
17506
17507	* SoObjects/Appointments/SOGoCalendarComponent.m
17508	([SOGoCalendarComponent -calendar:create:secure]): new name for
17509	-calendar:. Added a "secure" parameter that specifies whether a
17510	stripped calendar instance is needed or not. Also, we no longer
17511	cache the content to simplify handling of new data.
17512	([SOGoCalendarComponent -component:create:secure]): same as above.
17513	([SOGoCalendarComponent
17514	-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
17515	test whether the component is "still relevant" before sending an
17516	email...
17517	([SOGoCalendarComponent -sendResponseToOrganizer]): new method for
17518	sending ITIP replies.
17519	([SOGoCalendarComponent -getUIDsForICalPerson:iCalPerson]):
17520	removed method. Replaced with -[iCalPerson uid] category method.
17521
17522	* SoObjects/Appointments/SOGoAppointmentObject.[hm]: rewrote
17523	class. No longer override saveContentString:,
17524	saveContentString:baseSequence:, .... Implemented the
17525	saveComponent: and the prepareDelete methods instead. Those
17526	methods are called only from the web methods. This avoids the
17527	risks related to email sending and changes propagation.
17528
17529	* UI/Common/UIxTabItem.m: removed useless class module.
17530
17531	* UI/Common/UIxTabView.[hm]: removed useless class module.
17532
17533	* UI/Common/UIxPrintPageFrame.m: removed useless class module.
17534
17535	* UI/Common/UIxAppNavView.m: removed useless class module.
17536
175372007-11-16  Ludovic Marcotte  <ludovic@inverse.ca>
17538
17539	* SoObjects/Mailer/SOGoMailBaseObject.m
17540	Fixed typo.
17541
17542	* SoObjects/Mailer/SOGoMailBodyPart.m
17543	We also grok image/jpeg and return the SOGoMailBodyPart
17544	for attachments fetching.
17545
17546	* SoObjects/Mailer/SOGoMailObject+Draft.m
17547	Prevent a crash in case body decoding failed during
17548	a reply.
17549
17550	* SoObjects/Mailer/SOGoMailObject.m
17551	Improved body decoding during a reply to also try
17552	latin1 as an encoding.
17553
17554	* UI/MailPartViewers/UIxMailRenderingContext.m
17555	Greatly improved the display mechanisms for emails.
17556	Also properly consider the content disposition for
17557	most content types.
17558
17559	* UI/MailerUI/UIxMailToSelection.m
17560	Removed worthless code.
17561
17562	* UI/WebServerResources/MailerUI.css
17563	CSS fix for table views.
17564
175652007-11-15  Ludovic Marcotte  <ludovic@inverse.ca>
17566
17567	* UI/WebServerResources/MailerUI.js
17568	We now check for empty selection and warn the
17569	user about it when deleting messages
17570
17571	* SoObjects/Mailer/SOGoDraftObject.m
17572	Correctly check for the presence of a subject
17573	before attempting to forward a message from
17574	the Drafts folder.
17575
17576	* SoObjects/Mailer/SOGoMailObject+Draft.m
17577	We no longer use "[Fwd: ]" but simply "Fwd:"
17578	when forwarding email messages.
17579
17580	* SoObjects/SOGo/SOGoUser.m
17581	Modified the default forwarding format to be
17582	inline instead of "attachment".
17583
17584	* SoObjects/Mailer/SOGoDraftObject.m
17585	We now create and use a NGMimeContentDispositionHeaderField
17586	in order to avoid encoding the whole Content-Disposition
17587	header in case a non-ASCII char is present!
17588
175892007-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17590
17591	* SoObjects/SOGo/iCalEntityObject+Utilities.m ([iCalEntityObject
17592	-findParticipant:user]): new method based on the one removed from
17593	SOGoCalendarComponent below.
17594
17595	* SoObjects/SOGo/iCalEntityObject+Utilities.[hm]: new category
17596	module for iCalEntityObject.
17597
17598	* SoObjects/Appointments/SOGoCalendarComponent.m
17599	([-findParticipant:user]): removed method.
17600
17601	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
17602	-setContentString:newContent]): new accessor method.
17603	([SOGoContentObject
17604	-saveContentString:newContentbaseVersion:newBaseVersion]): invoke
17605	-[self setContentString:].
17606
17607	* UI/MailPartViewers/UIxMailPartICalViewer.m
17608	([UIxMailPartICalViewer -authorativeEvent]): returns the most
17609	up-to-date event.
17610	([-isLoggedInUserTheOrganizer]): make use of -[SOGoUser
17611	hasEmail:].
17612
17613	* UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
17614	-stringByConvertingCRLNToHTML]): fixed crashes due to overflows in
17615	temporary buffer we are handing.
17616
17617	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
17618	-setComponent:newComponent]): check that newComponent is non-nil
17619	before replacing the default values.
17620	([UIxComponentEditor -calendarList]): privacy is already an ivar.
17621	We don't need to refetch it.
17622
176232007-11-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17624
17625	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
17626	-fetchMailForReplying:sourceMailtoAll:toAll]): remove the current
17627	user from the list of recipients and make sure no other address is
17628	counted twice.
17629
17630	* UI/MailPartViewers/UIxMailPartTextViewer.m ([NSString
17631	-stringByConvertingCRLNToHTML]): build the returned NSString
17632	without the ending \0.
17633
176342007-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17635
17636	* UI/MailPartViewers/UIxMailPartICalViewer.m
17637	([UIxMailPartICalViewer -acceptLink])
17638	([UIxMailPartICalViewer -declineLink])
17639	([UIxMailPartICalViewer -tentativeLink]): removed useless methods.
17640
17641	* UI/MailPartViewers/UIxMailPartICalAction.m
17642	([UIxMailPartICalAction -addToCalendarAction])
17643	([UIxMailPartICalAction -deleteFromCalendarAction]): new stub
17644	methods.
17645
17646	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
17647	-lookupImap4BodyPartKey:]): make use of the new method below.
17648
17649	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
17650	+bodyPartClassForMimeType:mimeTypeinContext:_ctx]): new method
17651	that returns an appropriate Class depending on a given mime type.
17652
17653	* UI/SOGoUI/UIxComponent.m ([UIxComponent -canCreateOrModify]):
17654	new boolean accessor that determines whether someone can create
17655	(i.e. modify a new entry) or modify an existing entry.
17656
17657	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
17658	-lookupName:lookupNameinContext:localContextacquire:acquire]):
17659	overriden method to bind looked up keys to So methods but by
17660	avoiding a call to toOneRelationshipKeys. This will be the top
17661	method of the chain, meant to override SoObject's behaviour.
17662
17663	* SoObjects/Contacts/SOGoContactLDAPFolder.m
17664	([SOGoContactLDAPFolder
17665	-lookupName:objectNameinContext:lookupContextacquire:acquire]):
17666	removed hack to prevent [super lookupName...] to read the entire
17667	LDAP directory when looking up a record.
17668
176692007-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17670
17671	* SoObjects/SOGo/SOGoGCSFolder.m ([SOGoGCSFolder
17672	+folderWithSubscriptionReference:referenceinContainer:aContainer]):
17673	fixed a leak.
17674
17675	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
17676	([UIxMailPartHTMLViewer -_attachmentIds]): the reference was one
17677	character too short, which cause the images not to be displayed
17678	sometimes and crashes to happen whenever the references on a
17679	message were wrong (due to bugs in SOPE).
17680
17681	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
17682	-hasMessageAttachment]): consider an attachment any content that
17683	has a non-nil disposition.
17684
17685	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
17686	-newFolderWithName:nameandNameInContainer:newNameInContainer]):
17687	fixed method to make use of the parameters instead of the useless
17688	remains that weren't even initialized.
17689
17690	* SoObjects/Appointments/SOGoAppointmentObject.m
17691	([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
17692	don't propagate the event among the attendees if this is not an
17693	"so" request.
17694	([SOGoAppointmentObject -deleteWithBaseSequence:]): same as above.
17695
17696	* Main/SOGo.m ([SOGo -authenticatorInContext:context]): make use
17697	of the new category method below.
17698
17699	* SoObjects/SOGo/WORequest+SOGo.m ([WORequest
17700	-handledByDefaultHandler]): new method that returns whether this
17701	is an "so" or alike request.
17702
17703	* SoObjects/SOGo/WORequest+SOGo.[hm]: new category module.
17704
17705	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
17706	-newFolderWithName:nameandNameInContainer:newNameInContainer]):
17707	write the new folder's name in the folder cache.
17708
17709	* UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
17710	-calendars]): same as below.
17711
17712	* UI/Contacts/UIxContactsListViewContainer.m
17713	([UIxContactsListViewContainer -currentContactFolderName]):
17714	translate the display name if its the default one.
17715
17716	* SoObjects/Appointments/SOGoAppointmentFolder.m
17717	([SOGoAppointmentFolder -create]): overriden method that invokes
17718	its ancestor and then activate itself within the user settings.
17719
17720	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
17721	-appendPersonalSources]): when the user is the owner of the
17722	current folder, we create the "personal" folder if it doesn't
17723	exist by invoking "create".
17724
17725	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
17726	-primaryFetchProfile]): when no row is returned, we initialize
17727	"values" to a new dictionary. This solves a bug where the defaults
17728	would not be initialized properly.
17729
177302007-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17731
17732	* SoObjects/SOGo/SOGoGCSFolder.m ([-compare:otherFolder]): method
17733	moved into the SOGoFolder class.
17734
17735	* SoObjects/Appointments/SOGoAppointmentObject.m
17736	([SOGoAppointmentObject -saveContentString:_iCalinUIDs:_uids]):
17737	simplified method by directly building a similar appointment
17738	object with the current folder as container.
17739
17740	* SoObjects/Contacts/SOGoContactLDAPFolder.m
17741	([SOGoContactLDAPFolder
17742	-appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
17743	take the content of an object returned by
17744	lookupName:inContext:acquire: instead of the dictionary passed as
17745	parameter since it represents a flattened entry return by
17746	lookupContactsWithFilter...
17747
17748	* SoObjects/Contacts/SOGoFolder+CardDAV.m: NSObject+CardDAV
17749	category renamed to SOGoFolder+CardDAV.
17750
17751	* SoObjects/SOGo/SOGoParentFolder.m: no longer a subclass of
17752	SOGoObject, but of SOGoFolder instead.
17753
17754	* SoObjects/SOGo/SOGoUserFolder.m: no longer a subclass of
17755	SOGoGCSFolder, but of SOGoFolder instead.
17756
17757	* SoObjects/Appointments/SOGoAppointmentFolder.m
17758	([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): fixed
17759	to take the new SOGoParentFolder class into account. Also, create
17760	the personal folder if it doesn't exist.
17761
17762	* SoObjects/SOGo/SOGoFolder.[hm]: new class module implementing
17763	the parent of all SOGo containers.
17764
17765	* SoObjects/SOGo/SOGoGCSFolder.[hm]: SOGoFolder class renamed to
17766	SOGoGCSFolder.
17767
177682007-11-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17769
17770	* UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection
17771	-getAddressesFromFormValues:_dict]): take NSString and NSArray
17772	values. Ignore addresses with a length of 0.
17773
17774	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -mailAccounts]): we now
17775	fetch the accounts from the user defaults and create default
17776	values if missing.
17777
177782007-11-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17779
17780	* UI/MailPartViewers/UIxMailPartTextViewer.m
17781	([UIxMailPartTextViewer -flatContentAsString]): re-added
17782	conversion of line-break to sequences of HTML "BR", with a fast
17783	algorithm in C.
17784
17785	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
17786	-flatContentAsString]): simplified method now that we know
17787	-[NSString stringWithData:usingEncodingNamed:] has a more robust
17788	implementation.
17789
17790	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
17791	-showToAddress]): the answer is cached.
17792
17793	* UI/Common/UIxObjectActions.m ([UIxObjectActions +initialize]):
17794	read "SOGoACLsSendEMailNotifications" from the user defaults to
17795	determiner whether to send an email when a user is added or
17796	removed from an object's acl.
17797
17798	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
17799	-contentForEditing]): make sure the htmlContent flag is set to NO
17800	when we select the textual part. Also we select only the relevant
17801	keys for fetching.
17802
17803	* UI/MailerUI/WOContext+UIxMailer.m ([-mailSubjectFormatter]):
17804	removed method.
17805
17806	* UI/MailerUI/UIxMailView.m ([UIxMailView -messageSubject]): new
17807	method replacing -objectTitle, written like the ones below.
17808
17809	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
17810	-messageSubject]): rewrote method to act the one below.
17811
17812	* UI/MailPartViewers/UIxMailPartMessageViewer.m
17813	([UIxMailPartMessageViewer -messageSubject]): new method that
17814	returns the decoded mail subject or "Untitled" if the subject is
17815	empty.
17816
17817	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
17818	-decodedSubject]): new method that invoke -decodedSubject from the
17819	NSString and NSData class, depending on the identity of the
17820	subject obtained from the envelope.
17821
17822	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
17823	-subjectForReply]): take the value of -[SOGoMail decodedSubject]
17824	instead of the subject of the envelope.
17825	([SOGoMailObject -filenameForForward]): same as above.
17826	([SOGoMailObject -subjectForForward]): same as above.
17827
17828	* SoObjects/Mailer/NSString+Mail.m ([NSString -decodedSubject]):
17829	same as below for NSString.
17830
17831	* SoObjects/Mailer/NSData+Mail.m ([NSData -decodedSubject]): new
17832	method that decodes the subject of a mail taken as an NSData
17833	instance. Handling the exceptions and the badly formatted headers.
17834
17835	* UI/MailerUI/UIxSubjectFormatter.[hm]: dropped class module.
17836
178372007-11-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17838
17839	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
17840	-deleteEntriesWithIds:ids]): make sure the objects returned by
17841	lookupName:... are not instances of NSException.
17842
178432007-11-03  Ludovic Marcotte  <ludovic@inverse.ca>
17844
17845	* UI/Scheduler/UIxAppointmentEditor.m
17846	Fixed monthly recurrences support.
17847
178482007-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17849
17850	* SoObjects/Appointments/SOGoAppointmentObject.m
17851	([SOGoAppointmentObject -deleteWithBaseSequence:]): an email was
17852	sent when modifying an event, when the event was considered
17853	relevant. The same thing is now implemented for event deletion.
17854
17855	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
17856	-primaryFetchProfile]): make sure that the deserialized "values"
17857	is an instance of NSMutableDictionary, otherwise we override it
17858	with one.
17859
17860	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
17861	-contentForReply]): make use of the SOGoMailReply WO page.
17862
17863	* SoObjects/Mailer/SOGoMailReply.[hm]: new class module copied
17864	from SOGoMailForward to handle mail replies instead. Only three
17865	methods remaining: date, from and messageBody. The latter is
17866	quoted properly.
17867
17868	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
17869	-fetchMailForForwarding:sourceMail]): fetch attachments for
17870	forwarded messages.
17871
17872	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
17873	-hasMessageAttachment]): initialize hasAttachment with "NO" to
17874	avoid false positives.
17875
17876	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event])
17877	([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]):
17878	set title to an empty string where the event/task summary is null.
17879
17880	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
17881	-setHeaders:newHeaders]): make sure there is a message id in the
17882	headers dictionary, if not, generate one.
17883	([SOGoDraftObject -fetchMailForEditing:sourceMail]): retrieve the
17884	message id from the existing draft.
17885	([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): store the
17886	message id in the header map.
17887
17888	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
17889	-deleteFolderAction]): no longer prefix the target folder with
17890	"folder".
17891
17892	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
17893	-listMailboxesAction]): base the folder type on the folder
17894	traversal path.
17895
17896	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
17897	-lookupName:_keyinContext:acquire:_acquire]): compare the full
17898	traversal to the potential looked up folder with the special
17899	folder names and return an object with the appropriate
17900	SOGoMailFolder subclass.
17901
17902	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
17903	-traversalFromMailAccount]): don't prepend the whole string with
17904	"/".
17905
17906	* SoObjects/Mailer/SOGoMailAccount.m
17907	([-lookupSentFolder:_keyinContext:_ctx])
17908	([-lookupDraftsFolder:_keyinContext:_ctx])
17909	([-lookupTrashFolder:_keyinContext:_ctx])
17910	([-lookupFiltersFolder:_key:_ctx]): removed methods.
17911	([SOGoMailAccount -inboxFolderNameInContext:])
17912	([SOGoMailAccount -draftsFolderNameInContext:_ctx])
17913	([SOGoMailAccount -sentFolderNameInContext:])
17914	([SOGoMailAccount -trashFolderNameInContext:]): no longer prefixes
17915	the resulting name with "prefix" since we might return a nested
17916	foldername.
17917	([SOGoMailAccount -allFolderPaths]): prefixes all special folder
17918	names with "/". Sorts the resulting folder list with
17919	localizedCaseInsensitiveCompare: instead of
17920	caseInsensitiveCompare:. No longer use the -[lookupXXX] methods
17921	that were removed, instead, we choose the appropriate class
17922	depending on the folder name. And since we are in SOGoMailAccount,
17923	we don't have to compute a traversal path to match the key with
17924	the foldernames.
17925	([SOGoMailAccount
17926	-folderWithTraversal:traversalandClassName:className]): new method
17927	that returns an instance of the specified SOGoMailFolder subclass,
17928	based on the traversal path passed as parameter.
17929	([SOGoMailAccount -inboxFolderInContext:_ctx])
17930	([SOGoMailAccount -draftsFolderInContext:_ctx])
17931	([-sentFolderInContext:_ctx])
17932	([SOGoMailAccount -trashFolderInContext:_ctx]): invoke the new
17933	-folderWithTraversal:andClassName: method described above.
17934
17935	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
17936	-primaryFetchProfile]): make use of -[NSPropertyListSerialization
17937	propertyListFromData:mutabilityOption:format:errorDescription:] to
17938	deserialize the plist. Removed variant for libFoundation since it
17939	should support the above.
17940	([AgenorUserDefaults -generateSQLForInsert])
17941	([AgenorUserDefaults -generateSQLForUpdate]): make use of
17942	-[NSPropertyListSerialization
17943	dataFromPropertyList:format:errorDescription:] to serialize the
17944	plist. Removed variant for libFoundation since it should support
17945	the above. Escape the backslashes from the resulting string.
17946
179472007-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17948
17949	* SoObjects/Mailer/SOGoMailFolder.[hm]: added a new subclass of
17950	SOGoMailFolder: SOGoMailSpecialFolder.
17951
17952	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
17953	-traversalFromMailAccount]): overridden method that returns the
17954	initialized mutable string.
17955	([SOGoMailAccount -allFolderPaths]): take the special folder paths
17956	with -traversalFromMailAccount and reposition them at the
17957	beginning of the list. By creating the special folders during that
17958	request, we also make sure that the folder exists thanks to the
17959	new initialisation method of the new "SOGoSpecialMailFolder"
17960	class.
17961	([SOGoMailAccount -lookupSentFolder:_keyinContext:_ctx]): new
17962	method.
17963	([SOGoMailAccount -lookupTrashFolder:_keyinContext:_ctx]): new
17964	method.
17965	([SOGoMailAccount -lookupName:_keyinContext:acquire:_flag]): no
17966	longer use lookupImap4Folder.
17967	([SOGoMailAccount -lookupImap4Folder:_keyinContext:_ctx]): removed
17968	method.
17969
17970	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
17971	-traversalFromMailAccount]): new method that returns the full
17972	IMAP4 path to the object.
17973
17974	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): retain
17975	"superUsernames" after fetching it from the ud.
17976
179772007-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
17978
17979	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
17980	-eventsListAction]): substitude the start and end date with their
17981	UTC counterpart, taking into account the offset from UTC related
17982	to those dates instead of the current one. This renders
17983	-[UIxCalMainView -userUTCOffset] obsolete because the computings
17984	that occured in javascript are now done server-side.
17985
17986	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView -userUTCOffset]):
17987	removed obsolete method.
17988
17989	* SoObjects/Mailer/NSString+Mail.m ([NSString -htmlToText]): new
17990	method converting html content to plain text.
17991
17992	* SoObjects/Mailer/NSString+Mail.[hm]: new category module
17993	enhancing NSString with utility methods pertaining to mail handling.
17994
17995	* SoObjects/Mailer/SOGoMailObject.m
17996	([-shouldFetchPartOfType:_typesubtype:_subtype]): removed obsolete method.
17997	([SOGoMailObject
17998	-addRequiredKeysOfStructure:infopath:ptoArray:keysacceptedTypes:types]):
17999	modified method to be always recursive and to take an array of the
18000	accepted mime-types as parameter. The returned array now contains
18001	the mime-type as well as the part keys.
18002
18003	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
18004	-contentForEditingOnParts:_prtskeys:_k]): removed obsolete method.
18005	([SOGoMailObject -contentForEditing]): rewrote method to take into
18006	account the first text/plain part or the first text/html part
18007	converted to text/plain with our new -[NSString htmlToText]
18008	category method.
18009
18010	* UI/MailerUI/UIxMailActions.m ([-replyToAllAction]): invoke
18011	"replyToAll:" with YES as parameter instead of NO.
18012
180132007-10-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18014
18015	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
18016	-davContentType]): ignore any possible parameter taken from the
18017	mime-info of the body part.
18018
18019	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
18020	-lastFirstMessageNumber]): new accessor that returns the first
18021	message number of the last series of messages.
18022	([UIxMailListView -fetchKeys]): request the bodystructure for each
18023	listed message.
18024	([UIxMailListView -hasMessageAttachment]): extract the attachment
18025	information from the message bodystructure.
18026
180272007-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18028
18029	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
18030	-GETAction:]): use the "application/octet-stream" mime type for
18031	elements of type "application/x-xpinstall" to avoid confusing
18032	Firefox.
18033
18034	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList])
18035	([UIxPreferences -itemMessageCheckText])
18036	([UIxPreferences -userMessageCheck])
18037	([UIxPreferences -setUserMessageCheck:newMessageCheck]): new
18038	methods for handling the retrieval of new messages automatically.
18039
18040	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method
18041	that returns the interval of time between automatic message
18042	retrievals.
18043
18044	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
18045	-defaultAction]): now expunges the last folder marked for expunge.
18046
18047	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
18048	-trashInContext:_ctx]): now marks the container folder for
18049	expunge.
18050
18051	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
18052	-markForExpunge]): new method that marks the folder for the next
18053	automatic expunge operation in the user settings.
18054	([SOGoMailFolder -expungeLastMarkedFolder]): new methods that
18055	takes the last folder marked for expunge, expunges it and removes
18056	it from the user settings, if it exists.
18057
180582007-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18059
18060	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
18061	-messageSubjectCellStyleClass]): added support for replied,
18062	forwarded, forwarded and replied mails.
18063
18064	* SoObjects/Mailer/NSData+Mail.m ([NSData
18065	-bodyDataFromEncoding:encoding]): new utility method that decodes
18066	the NSData instance properly depending on the encoding string
18067	passed as parameter.
18068
18069	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
18070	-fetchFileAttachmentKeys]): fetch the attachment encoding as well.
18071
18072	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
18073	-stringForData:_datapartInfo:_info]): simplified by invoking
18074	-bodyDataFromEncoding: from our new NSData category methods.
18075
18076	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
18077	-fetchMailForEditing:sourceMail]): work-around a bug in SOPE-mime
18078	where only the body part of the first of the keys fetched was
18079	returned. Also decodes the body parts properly following their
18080	encoding.
18081
18082	* SoObjects/Mailer/NSData+Mail.[hm]: new extension module that
18083	extends the NSData class with utility methods useful for handling
18084	mail.
18085
180862007-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18087
18088	* SoObjects/SOGo/NSArray+Utilities.m
18089	([NSArray -stringsWithFormat:format]): replace instances of NSNull
18090	with empty strings.
18091
18092	* SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
18093	-keysWithFormat:keyFormat]): replace instances of NSNull with
18094	empty strings.
18095
18096	* SoObjects/Contacts/SOGoContactLDAPFolder.m: if "displayName" is
18097	empty, use "c_cn" instead.
18098
18099	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
18100	([SOGoMailAccount -draftsFolderInContext:_ctx])
18101	([SOGoMailAccount -sentFolderInContext:_ctx]): no longer make use
18102	of the "SOGoSpecialFoldersInRoot" user defaults. The folders will
18103	no always be specified from the root instead of sometimes from the
18104	INBOX.
18105
181062007-10-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18107
18108	* UI/Common/UIxPageFrame.m ([UIxPageFrame -commonLocalizableStrings])
18109	([UIxPageFrame -productLocalizableStrings]): invoke the new
18110	+[SOGoUser language] method if the user is nil.
18111
18112	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +language]): new method
18113	that returns any generically-found language.
18114	([SoUser -language]): modified to call the above.
18115	([SOGoUser -language]): modified to call the above if the user
18116	language has a null length.
18117
18118	* SoObjects/Contacts/SOGoContactLDIFEntry.m ([SOGoContactLDIFEntry
18119	-davEntityTag]): modified to return the "hash" of the vCard string.
18120
18121	* UI/MailerUI/UIxMailActions.m ([UIxMailActions
18122	-removeAllLabelsAction]): new method that removes all label flags
18123	from the associated message.
18124	([UIxMailActions -addLabel1Action]
18125	[UIxMailActions -addLabel2Action]
18126	[UIxMailActions -addLabel3Action
18127	[UIxMailActions -addLabel4Action]
18128	[UIxMailActions -addLabel5Action]): new methods that adds label
18129	flags to the associated message.
18130	([UIxMailActions -removeLabel1Action]
18131	[UIxMailActions -removeLabel2Action]
18132	[UIxMailActions -removeLabel3Action
18133	[UIxMailActions -removeLabel4Action]
18134	[UIxMailActions -removeLabel5Action]): new methods that removes
18135	label flags from the associated message.
18136
18137	* UI/MailerUI/UIxMailListView.m ([UIxMailListView -msgLabels]):
18138	new accessor that returns the labels associated with the message.
18139
18140	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
18141	-allFolderPaths]): new method that returns all the paths of all
18142	the subfolders of the folder object.
18143	([SOGoMailFolder -allFolderURLs]): new method replacing
18144	subfoldersURL.
18145
18146	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
18147	-aclsForUser:uid]): object inherits the 'SOGoRole_ObjectEditor'
18148	role from its parent folder.
18149
181502007-10-19  Francis Lachapelle  <flachapelle@inverse.ca>
18151
18152	* SoObjects/SOGo/SOGoUser.m
18153	([SOGoUser -rolesForObject:objectinContext:context]): allow
18154	multiple super usernames to be defined. The user default
18155	SOGoSuperUsername is renamed SOGoSuperUsernames and must be
18156	an array.
18157
181582007-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18159
18160	* SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
18161	-userInContext:]): override the super method by returning
18162	anonymous if the super returns nil.
18163
18164	* UI/Common/UIxPageFrame.m ([UIxPageFrame
18165	-productLocalizableStrings]): new method that returns the
18166	product-specific translation dictionary as a JSON hash.
18167	([UIxPageFrame -commonLocalizableStrings]): same as above but for
18168	the "Common" framework.
18169	([UIxPageFrame -setJsFiles:newJSFiles]): new setter that enables
18170	the requestor components to require additional Javascript files.
18171	This is useful now that all the scripts are loaded at the end of
18172	the HTML code.
18173	([UIxPageFrame -additionalJSFiles]): new getter related to the
18174	above.
18175
181762007-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18177
18178	* UI/MailerUI/UIxMailActions.m ([UIxMailActions -copyAction]):
18179	implemented new web method.
18180
18181	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
18182	-copyToFolderNamed:folderNameinContext:]): new method with the
18183	code cut/pasted from -moveToFolderNamed:inContext:.
18184	([SOGoMailObject -moveToFolderNamed:folderNameinContext:]):
18185	modified to use the code from -copyToFolderNamed:inContext:, which
18186	is common between the two actions.
18187
18188	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -draftsFolderNameInContext:_ctx])
18189	([SOGoMailAccount -sentFolderNameInContext:])
18190	([SOGoMailAccount -trashFolderNameInContext:]): modified to take
18191	the user settings into account.
18192
18193	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -setAsDraftsFolderAction])
18194	([UIxMailFolderActions -setAsSentFolderAction])
18195	([UIxMailFolderActions -setAsTrashFolderAction]): new web methods
18196	that change the purpose of the active folder to "Sent", "Drafts"
18197	or "Trash".
18198
18199	* UI/SOGoUI/SOGoACLAdvisory.m ([SOGoACLAdvisory -subject]):
18200	returns the subject as quoted-printable.
18201
18202	* UI/SOGoUI/SOGoACLAdvisory.[hm]: added two intermediary classes:
18203	SOGoACLAdditionAdvisory and SOGoACLRemovalAdvisory implementing
18204	the "aclMethod" method for the subsequent language-dependent
18205	subclasses.
18206
18207	* UI/SOGoUI/SOGoFolderAdvisory.m ([SOGoFolderAdvisory -subject]):
18208	returns the subject as quoted-printable.
18209
18210	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
18211	-dealloc]): release item, aptStartDate and aptEndDate.
18212
182132007-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18214
18215	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
18216	-initWithName:newNameinContainer:newContainer]): the owner of a
18217	shared folder is set to "nobody" by default.
18218
18219	* UI/Common/UIxAclEditor.m ([UIxAclEditor -hasOwner]): new method
18220	that returns whether the object has an owner or not.
18221
182222007-10-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18223
18224	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
18225	the folder even if the current user is not its owner.
18226
182272007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
18228
18229	* We now send advisory emails when folders
18230	are created / deleted.
18231
18232	* Fixed the sending of advisory emails upon
18233	ACL changes on folders.
18234
182352007-10-10  Ludovic Marcotte  <ludovic@inverse.ca>
18236
18237	* UI/Scheduler/UIxComponentEditor.m
18238	Implemented event/task priority support.
18239
18240	* SoObjects/Contacts/SOGoContactGCSFolder.m
18241	Added CardDAV support.
18242
18243	* SoObjects/SOGo/LDAPUserManager.m and SOGoUser.m
18244	Implemented From: based on LDAP results based on
18245	the MailFieldNames attribute (an array) specified
18246	in every LDAP-based authentication sources.
18247
18248	* UI/MailPartViewers/UIxMailPartTextViewer.m and
18249	UI/WebServerResources/MailerUI.css
18250	We avoid replacing "\r\n" and "\n" with <br /> and
18251	rather use CSS capabilities for proper formatting.
18252	This is _WAY_ faster on very large mails.
18253
182542007-10-10  Francis Lachapelle  <flachapelle@inverse.ca>
18255
18256	* UI/Scheduler/UIxComponentEditor.m
18257	([UIxComponentEditor -componentCalendar]): returns the calendar
18258	object of the current event.
18259
182602007-10-05  Ludovic Marcotte  <ludovic@inverse.ca>
18261
18262	* UI/WebServerResources/MailerUI.js
18263	We check if at least one message is selected
18264	before performing a Reply/Reply All/Forward
18265
18266	* SoObjects/Appointments/SOGoAppointmentFolder.m
18267	and others - implemented support for recurring
18268	events (with some known limitations right now,
18269	all soon to be fixed).
18270
182712007-10-04  Francis Lachapelle  <flachapelle@inverse.ca>
18272
18273	* Main/SOGo.m ([SOGo -isUserName:_keyinContext:_ctx]): removed
18274	the constraint that a username can't start with a digit.
18275
182762007-10-02  Francis Lachapelle  <flachapelle@inverse.ca>
18277
18278	* Moved SOPE/sope-gdl1/GDLContentStore from the default trunk
18279	repository to Inverse's branch.
18280
182812007-09-28  Francis Lachapelle  <flachapelle@inverse.ca>
18282
18283	* SoObjects/Mailer/SOGoDraftObject.m
18284	([SOGoDraftObject -isValidAttachmentName:_name]): removed
18285	constraint on space in file name.
18286	([SOGoDraftObject -saveAttachment:_attachwithMetadata:metadata]):
18287	now removes from file name all characters preceding a backslash.
18288	This happens with IE7 because the complete attachment file path
18289	is sent.
18290
182912007-09-25  Francis Lachapelle  <flachapelle@inverse.ca>
18292
18293	* SoObjects/Appointments/SOGoAptMailNotification.m
18294	([SOGoAptMailNotification -appointmentURL]): set personal as the
18295	default calendar where to add the event.
18296
18297	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
18298	activate the SOGoUIxDefaultModule user defaults.
18299
183002007-09-21  Francis Lachapelle  <flachapelle@inverse.ca>
18301
18302	* UI/SOGoUI/UIxComponent.m
18303	([UIxComponent -shortUserNameForDisplay]): returns the string
18304	"wrongusernamepassword" when authentication failed.
18305
183062007-09-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18307
18308	* UI/MailPartViewers/UIxMailPartICalViewer.m
18309	([UIxMailPartICalViewer -calendarFolder]): returns the "personal"
18310	entry of the Calendars parent folder.
18311
18312	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
18313	-messageSubject]): new accessor method to work-around a problem
18314	within SOPE where a subject could be returned as an NSData.
18315
18316	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
18317	-appendPersonalSources]): make sure the value of the "c_path4" of
18318	the returned rows are not NSNull, otherwise, discard them.
18319
183202007-09-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18321
18322	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
18323	-compare:otherFolder]): new overriden method that compares two
18324	contact foldes based on their class and then transfer the control
18325	to the super method in SOGoFolder.
18326
18327	* SoObjects/Contacts/SOGoContactLDAPFolder.m
18328	([SOGoContactLDAPFolder -compare:otherFolder]): new method that
18329	compare two contact folders based on their class and then their
18330	display name.
18331
18332	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -compare:otherFolder]):
18333	new method for sorting folders. The folders are compared based on
18334	their ownership, whether they are a main folder and finally
18335	depending on their display name.
18336
18337	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
18338	-pathArrayToSOGoObject]): do not reorder the paths if the third
18339	element is an instance of NSNull.
18340
18341	* SoObjects/SOGo/SOGoParentFolder.m ([SOGoParentFolder
18342	-subFolders]): returns a sorted array using the "compare:"
18343	selector.
18344
183452007-09-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18346
18347	* UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
18348	-calendars]): also returns the owner of the listed folders.
18349
18350	* SoObjects/Appointments/SOGoAppointmentFolder.m
18351	([-deleteEntriesWithIds:ids]): moved method into SOGoFolder.
18352
18353	* UI/Scheduler/UIxCalMainView.m ([-batchDeleteAction]): moved
18354	method into UIxFolderActions.
18355
18356	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
18357	-fetchFreeBusyInfosFrom:_startDateto:_endDate]): fetch the
18358	freebusy info from the "personal" calendar.
18359
18360	* UI/Common/UIxParentFolderActions.m ([UIxParentFolderActions
18361	-createFolderAction]): new standardized method for requesting
18362	folder creations among gcs-based modules.
18363
18364	* UI/Common/UIxParentFolderActions.[hm]: new action class module.
18365
18366	* SoObjects/Appointments/SOGoAppointmentFolders.m: new class
18367	module, equivalent to the SOGoParentFolder's child
18368	SOGoContactFolders, but for calendars.
18369
18370	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -labelForKey:key]): new
18371	method that returns translated strings for controller bundles
18372	(same as what UIxComponent does for view bundles).
18373	([SOGoObject -pathArrayToSOGoObject]): new method that returns
18374	the real path to a subscribed folder (if subscribed).
18375	([SOGoObject +globallyUniqueObjectId]): move method from SOGoFolder.
18376	([SOGoObject -globallyUniqueObjectId]): new instance method
18377	calling its class equivalent.
18378
183792007-09-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18380
18381	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage -defaultAction]): test
18382	whether the user is logged in and if so, redirect to his/her
18383	homepage.
18384	([SOGoRootPage -appendToResponse:inContext:]): removed useless
18385	method.
18386
183872007-09-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18388
18389	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
18390	+folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
18391	new method.
18392	([SOGoFolder -displayName]): new method.
18393	([SOGoFolder -delete]): accept to proceed only if nameInContainer
18394	!= "personal".
18395
18396	* SoObjects/Contacts/SOGoContactLDAPFolder.m
18397	([SOGoContactLDAPFolder
18398	+folderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
18399	renamed from "contactFolderWithName..." for compatibility with SOGoFolder.
18400
18401	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
18402	+contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
18403	removed method, reimplemented in SOGoFolder.
18404	([SOGoContactGCSFolder -displayName]): removed method,
18405	reimplemented in SOGoFolder.
18406	([-delete]): removed method, modified in SOGoFolder.
18407
18408	* SoObjects/Contacts/SOGoContactFolders.[hm]: modified class to be
18409	a subclass of SOGoParentFolder.
18410
18411	* SoObjects/SOGo/SOGoParentFolder.[hm]: new class module derived
18412	from SOGoContactFolders and modified to be more content-independent.
18413
18414	* UI/MailerUI/UIxMailActions.m ([UIxMailActions -markMessageUnreadAction])
18415	([UIxMailActions -markMessageReadAction]): new methods moved from
18416	UIxMailListView and adapted to invoke the client object directly,
18417	since the previous versions had to to a lookup from the parent
18418	SOGoMailFolder.
18419
18420	* UI/MailerUI/UIxMailListView.m ([-markMessageUnreadAction]): move
18421	method into UIxMailActions.
18422	([-markMessageReadAction]): same as above.
18423	([-viewAction]): removed useless method.
18424	([-javaScriptOK]): removed useless method.
18425	([-isJavaScriptRequest]): removed useless method.
18426	([-lookupActiveMessage]): removed useless method.
18427
18428	* UI/Common/WODirectAction+SOGo.m ([WODirectAction
18429	-responseWithStatus:status]): new method that returns a WOResponse
18430	initialized with the specified status code.
18431	([WODirectAction -responseWith204]): new method that invokes the
18432	above one with "204" as parameter.
18433	([WODirectAction -redirectToLocation:newLocation]): rewrote method
18434	to make use of -responseWithStatus:.
18435
18436	* UI/SOGoUI/UIxComponent.m ([UIxComponent -responseWith204]): new
18437	method that returns a WOResponse initialized with the 204 status
18438	code.
18439
18440	* UI/MailerUI/UIxMailListView.m ([UIxMailListView -sortedUIDs]):
18441	always use a "not deleted" search qualifier along with the user
18442	qualifier (if present).
18443
184442007-09-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18445
18446	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
18447	-contactSearchAction]): only return the records which have an
18448	email set.
18449
18450	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
18451	-trashInContext:_ctx]): no longer expunge the mailbox after
18452	marking a message deleted.
18453	([SOGoMailObject -moveToFolderNamed:folderNameinContext:]): same
18454	as above.
18455
18456	* UI/MailerUI/UIxMailView.m ([-deleteAction]): removed method.
18457	([-trashAction]): moved method into UIxMailActions.
18458	([-moveAction]): moved method into UIxMailActions.
18459
184602007-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18461
18462	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
18463	([_UIxHTMLMailContentHandler
18464	-endElement:_localNamenamespace:_nsrawName:_rawName]): remove HTML
18465	comments from the CSS code, do not add the CSS code to the body
18466	content and remove references of body from the CSS declarations.
18467	([UIxMailPartHTMLViewer -cssContent]): new accessor method.
18468	([UIxMailPartHTMLViewer -flatContentAsString]): separated code
18469	common with cssContent in a different method and invoke it only
18470	once.
18471
18472	* UI/MainUI/SOGoRootPage.[hm]: made a subclass of UIxComponent
18473	instead of UIxPageFrame.
18474
184752007-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18476
18477	* UI/MainUI/SOGoRootPage.m ([-defaultAction]): commented out.
18478	([-appendToResponse:responseinContext:ctx]): commented out.
18479	([SOGoRootPage -connectURL]): new accessor that returns the full
18480	url the the "connect" method.
18481	([-connectAction]): rewrote method to return a properly formatted
18482	auth. cookie based on the username and password passed as
18483	parameter.
18484
18485	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
18486	set the value of the cookie to "discard" and set its expiration
18487	date to yesterday.
18488
18489	* SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
18490	-preprocessCredentialsInContext:context]): consider the user
18491	anonymous if the cookie value is "discard".
18492	([SOGoWebAuthenticator
18493	-setupAuthFailResponse:responsewithReason:reasoninContext:context]):
18494	set the expiration date of the cookie to yesterday.
18495
18496	* UI/SOGoUI/UIxComponent.m ([UIxComponent -applicationPath]):
18497	returns the path to the application if the clientObject is not a
18498	SOGoObject.
18499
18500	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder +initialize]):
18501	moved the requirement of authentication from the SOGo application
18502	class to here.
18503
18504	* SoObjects/Appointments/SOGoAppointmentObject.m
18505	([SOGoAppointmentObject -saveContentString:_iCalbaseSequence:_v]):
18506	check whether the new appointment object is still relevant before
18507	sending a notification.
18508
185092007-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18510
18511	* SoObjects/SOGo/SOGoWebAuthenticator.m ([SOGoWebAuthenticator
18512	-setupAuthFailResponse:responsewithReason:reasoninContext:context]):
18513	render the login page through the SoDefaultRenderer.
18514
18515	* UI/MainUI/SOGoRootPage.m ([SOGoRootPage
18516	-isPublicInContext:localContext]): new overriden method that
18517	returns YES.
18518
18519	* UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
18520	-currentCalendarLogin]): replace css-unsafe characters with _.
18521
18522	* UI/SOGoUI/UIxComponent.m ([UIxComponent
18523	-shortUserNameForDisplay]): simplified method.
18524	([-user]): removed method since [context activeUser] is as useful.
18525
185262007-09-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18527
18528	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
18529	set the cookie path to "/".
18530
18531	* Main/SOGo.m ([SOGo -authenticatorInContext:_ctx]): choose the
18532	authenticator based on the request handler key. "dav" returns the
18533	SOGoDAVAuthenticator, anything else returns the Web authenticator.
18534
18535	* SoObjects/SOGo/SOGoDAVAuthenticator.m: renamed module from
18536	"SOGoAuthenticator".
18537
18538	* SoObjects/SOGo/SOGoWebAuthenticator.m: new class module
18539	implementing a subclass of SoCookieAuthenticator, designed for
18540	web-based cookie authentication of users.m
18541
18542	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage -logoffAction]):
18543	new method that resets the authentification cookie.
18544
185452007-08-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18546
18547	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
18548	-checkLogin:loginToCheckandPassword:passwordToCheck]): initialize
18549	didBind to NO to make sure no false authentication is returned if
18550	the bind operation is not executed.
18551
185522007-08-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18553
18554	* SoObjects/Mailer/SOGoDraftObject.m: added support for the
18555	"In-Reply-To" header field when replying.
18556
18557	* UI/MainUI/SOGoUserHomePage.m: add the "c_" prefix to the quick
18558	table field names that are queried.
18559
18560	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
18561	-iCalStringForFreeBusyInfos:_infosfrom:_startDateto:_endDate]):
18562	add the "c_" prefix to the quick table field names that are
18563	queried.
18564
185652007-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18566
18567	* SoObjects/Appointments/SOGoAppointmentFolder.m
18568	([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): add
18569	"personal" to the ocs path of the appointment folder.
18570
18571	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
18572	-flatContentAsString]): use latin1 when the encoding is not
18573	specified, and to reencode data chunk which were not correctly
18574	decoded with the original charset.
18575
18576	* SoObjects/Appointments/SOGoAppointmentFolder.m ([SOGoAppointmentFolder -aclUsersForObjectAtPath:objectPathArray])
18577	([SOGoAppointmentFolder -aclsForUser:uidforObjectAtPath:objectPathArray])
18578	([SOGoAppointmentFolder -setRoles:rolesforUser:uidforObjectAtPath:objectPathArray])
18579	([SOGoAppointmentFolder
18580	-removeAclsForUsers:usersforObjectAtPath:objectPathArray]):
18581	override those methods to use the "personal" additional directory.
18582
18583	* SoObjects/SOGo/SOGoUserFolder.m ([-ocsPrivateCalendarPath]):
18584	append "/personal" to the calendar path to simulate a single
18585	calendar in a choice of many.
18586
18587	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
18588	-lookupName:_keyinContext:acquire:_acquire]): moved the lookup
18589	methods back here. Moved the folder existence check here, and do
18590	it on self only when the lookup happens for a non-folder object.
18591	This permits to accept entries for folders with parents who
18592	don't really exist.
18593
185942007-08-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18595
18596	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
18597	-shouldTakeValuesFromRequest:requestinContext:context]): same as
18598	below.
18599
18600	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
18601	-shouldTakeValuesFromRequest:requestinContext:context]):
18602	redesigned method since any method called can be received from a
18603	POST or a GET. Instead we check the method call itself and we
18604	accept only if it has the "save" prefix.
18605
18606	* SoObjects/Appointments/SOGoAptMailNotification.m
18607	([SOGoAptMailNotification -getSubject]): returns the subject an a
18608	quoted-printable encoded string, if needed.
18609
18610	* SoObjects/Mailer/SOGoDraftObject.m ([NSString
18611	-asQPSubjectString:encoding]): moved method into
18612	NSString+Utilities.m.
18613
186142007-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18615
18616	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
18617	-messageForwardingList])
18618	([UIxPreferences -itemMessageForwardingText])D
18619	([UIxPreferences -userMessageForwarding])
18620	([UIxPreferences -setUserMessageForwarding:newMessageForwarding]):
18621	new template methods for manage the user preference regarding
18622	message forwarding.
18623
18624	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -language]): change the
18625	algorithm to return, in order, the user's defined language or the
18626	first browser language or, finally, the default language.
18627	([SOGoUser -messageForwarding]): new method that returns the user
18628	preference for message forwarding: "inline" or "attached",
18629	defaulting to "attached".
18630
18631	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
18632	-contentForInlineForward]): new method that returns the content of
18633	the message for inline forwarding based on the SOGoMailForward
18634	templates.
18635
18636	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
18637	-fetchMailForForwarding:sourceMail]): check the user preference
18638	for message forwarding and compose inline forwarded messages if required.
18639
18640	* SoObjects/Appointments/SOGoCalendarComponent.m
18641	([SOGoCalendarComponent
18642	-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
18643	now use a template based on the language returned from the
18644	SOGoUser object.
18645
18646	* SoObjects/Mailer/SOGoMailEnglishForward.m: new module containing
18647	a subclass of SOGoMailForward for English locale.
18648
18649	* SoObjects/Mailer/SOGoMailFrenchForward.m: new module containing
18650	a subclass of SOGoMailForward for French locale.
18651
18652	* SoObjects/Mailer/SOGoMailForward.[hm]: new module class that
18653	helps build template for inline forwarded messages.
18654
186552007-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18656
18657	* UI/SOGoElements/SOGoIEConditional.m: new extension module class
18658	to handle "<var:if-ie>" template tags.
18659
18660	* UI/SOGoElements: new extension bundle containing sogo-specific
18661	dynamic elements.
18662
18663	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
18664	-takeValuesFromRequest:_rqinContext:_ctx]): save the category
18665	selected in the dialog.
18666	([UIxComponentEditor -setComponent:newComponent]): retrieve the
18667	first category, if ever, of the calendar entity.
18668
18669	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
18670	-composeAction]): restored method since it is needed by the
18671	address book.
18672
18673	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
18674	-composeAction]): the address fields should be arrays and not
18675	simple strings.
18676
18677	* UI/Common/UIxPageFrame.m ([UIxPageFrame -buildDate]): new method
18678	that returns the build date of SOGo in the template.
18679
186802007-08-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18681
18682	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
18683	-_flattenedRecords:records]): when the c_cn field is empty,
18684	returns set a formatted string with the concatenation of
18685	c_givenname and c_sn as the displayName.
18686
18687	* SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
18688	-isValidMailAccountName:_key]): prevent unknown accounts from
18689	being accessed.
18690
18691	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
18692	-pathToAttachmentObject]): we no longer need the filename
18693	extension for SoLookup...
18694
18695	* SoObjects/Mailer/SOGoMailBodyPart.m ([SOGoMailBodyPart
18696	-lookupName:_keyinContext:_ctxacquire:_flag]): do not require the
18697	filename to have an extension, and thus accept any filename.
18698
18699	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
18700	-currentCName]): new method that returns the c_name of the
18701	contact, correctly escaped to be passed by url afterwards.
18702
18703	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
18704	([UIxMailPartHTMLViewer -flatContentAsString]): pass the NSData
18705	instance of [self decodedFlatContent] instead of the buggy
18706	NSString from [super flatContentAsString] to the parser.
18707
187082007-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18709
18710	* UI/MailerUI/UIxMailActions.m ([UIxMailActions -deleteAction]):
18711	new category method to reponds to the "delete" web command on
18712	drafts.
18713	([UIxMailActions -deleteAttachmentAction]): new category method to
18714	reponds to the "deleteAttachment" web command on drafts, taking
18715	the "filename" url parameter into account.
18716
18717	* SoObjects/Mailer/SOGoMailObject+Draft.m ([SOGoMailObject
18718	-contentForEditing]): new method that retrieve the editable mail
18719	content.
18720	([SOGoMailObject -fetchFileAttachmentKeys]): new method that
18721	returns the body keys for attached files (parts with a "filename"
18722	attribute).
18723
18724	* SoObjects/Mailer/SOGoDraftObject.m ([NSString
18725	-asQPSubjectString:encoding]): do not change the string if the
18726	encoded string has the same length (which means it is already
18727	7bit-safe).
18728	([SOGoDraftObject -fetchMailForEditing:sourceMail]): new method
18729	that retrieve a draft along with its attachments for editing.
18730	([SOGoDraftObject -mimeHeaderMapWithHeaders:_headers]): no longer
18731	choke if the "to" header field is empty.
18732	([SOGoDraftObject -delete]): new method to delete the draft folder
18733	whenever operations are done.
18734
187352007-08-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18736
18737	* UI/MailerUI/UIxMailEditor.m ([-patchFlagsInStore]): removed
18738	useless stub method, of which the intention was implemented in
18739	SOGoDraftObject.
18740	([-lookupSentFolderUsingAccount]): removed obsolete method.
18741	([-selectedMailIdentity]): removed obsolete method.
18742	([-lookupSentFolderUsingFrom]): removed obsolete method.
18743	([-storeMailInSentFolder:_path]): removed obsolete method, of
18744	which the mechanism has been put in -[SOGoDraftObject sendMail]
18745	method.
18746	([UIxMailEditor -_saveFormInfo], [UIxMailEditor -defaultAction])
18747	([UIxMailEditor -saveAction], [UIxMailEditor -sendAction]):
18748	adapted algorithms to the new SOGoDraftObject methods.
18749	([-deleteAction]): removed method since local draft objects cannot
18750	be removed by the user.
18751
18752	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
18753	-expungeAction]): new method replacing the one previously found in
18754	UIxMailListView.
18755	([UIxMailFolderActions -createFolderAction])
18756	([UIxMailFolderActions -renameFolderAction])
18757	([UIxMailFolderActions -deleteFolderAction])
18758	([UIxMailFolderActions -emptyTrashAction])
18759	([UIxMailFolderActions -subscribeAction])
18760	([UIxMailFolderActions -unsubscribeAction]): error situations
18761	should have http return code 500 instead of 403.
18762
18763	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
18764	-composeAction]): new method replacing the one previously in
18765	UIxMailMainFrame.
18766
18767	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
18768	-imap4URLString]): removed overriden method (see below).
18769
18770	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -aclUsers]):
18771	cache the mailbox acl.
18772	([SOGoMailFolder -aclsForUser:uid]): cache the mailbox acl.
18773	([SOGoMailFolder -setRoles:rolesforUser:uid]): reset the mailbox
18774	acl cache.
18775	([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): modified to use
18776	the new method of determining the users mail accounts.
18777
18778	* SoObjects/Mailer/SOGoMailBaseObject.m ([-imap4URLString]): no
18779	longer adds a "/" at the end of the string (the default for
18780	folders), therefore this will be overriden in SOGoMailFolder
18781	rather than in SOGoMailObject.
18782
18783	* UI/MailerUI/UIxMailListView.m ([-expungeAction]): removed
18784	method, moved into the new UIxMailActions module class.
18785
18786	* SoObjects/Mailer/SOGoDraftsFolder.m ([SOGoDraftsFolder
18787	-newDraft]): new method that returns a new SOGoDraftObject
18788	instance with a unique filename based on the current timestamp and
18789	the "newDraft" prefix.
18790	([SOGoDraftsFolder
18791	-lookupName:nameinContext:localContextacquire:acquire]): overriden
18792	method by detecting local drafts with their "newDraft" prefix.
18793	([SOGoDraftsFolder -isInDraftsFolder]): returns YES.
18794
18795	* SoObjects/Mailer/SOGoDraftsFolder.[hm]: rewrote class module
18796	from scratch by making it a subclass of SOGoMailFolder.
18797
18798	* UI/MailerUI/UIxMailReplyAction.m: removed obsolete class
18799	module.
18800
18801	* UI/MailerUI/UIxMailForwardAction.m: removed obsolete class
18802	module.
18803
18804	* UI/MailerUI/UIxMailEditorAction.[hm]: removed obsolete class
18805	module.
18806
18807	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -init]):
18808	new method, initializing the new ivars: IMAP4ID, headers, text,
18809	sourceURL and sourceFlag.
18810	([-spoolFileManager], [SOGoDraftObject -userSpoolFolderPath])
18811	([-_ensureUserSpoolFolderPath])
18812	([-saveMimeMessageToTemporaryFileWithHeaders:])
18813	([SOGoDraftObject -mimeMessageWithHeaders:_headers])
18814	([-deleteTemporaryMessageFile:], [-delete], [-content])
18815	([-GETAction:_ctx], [-DELETEAction:_ctx], [-fetchParts:])
18816	([-uid], [-flags], [-size], [-envelope]): removed methods.
18817	([SOGoDraftObject -storeInfo]): rewrote method to take the new
18818	ivars into account.
18819	([SOGoDraftObject -setSourceURL:newSourceURL])
18820	([SOGoDraftObject -setSourceFlag:newSourceFlag]): new accessor
18821	methods to store the url of the original message between accesses
18822	so that, depending on the action taken (forward or reply), the
18823	correct flag can be given.
18824	([SOGoDraftObject -setIMAP4ID:]): new accessor method that sets
18825	the imap4 id that is returned for the message whenever it is saved
18826	into the drafts folder.
18827	([SOGoDraftObject -save]): new method that takes in charge the
18828	saving of the message in the IMAP drafts folder.
18829	([SOGoDraftObject -fetchMailForReplying:sourceMailtoAll:toAll]):
18830	new method that fills the original data of the new message with
18831	the reply content of the original message.
18832	([SOGoDraftObject -fetchMailForForwarding:sourceMail]): same as
18833	above for message forwarding.
18834	([-spoolFileManager]): removed useless method (only returned the
18835	default filemanager...)
18836	([SOGoDraftObject -mimeMessageAsData]): new method that returns
18837	the resulting message as an NSData chunk.
18838
18839	* SoObjects/Mailer/SOGoMailObject+Draft.m: new extension module
18840	containing a rewrite of the mail action methods found in
18841	UI/Mailer/, that needed to be put in the SOGoMailObject class.
18842	([SOGoMailObject -subjectForReply]): new method that returns a
18843	subject suitable for replies.
18844	([SOGoMailObject -contentForReply]): new method that returns the
18845	textual content of an email, quoted for replying.
18846	([SOGoMailObject -filenameForForward]): new method that returns
18847	the name of the filename that should contain the forwarded
18848	message, based on its subject.
18849	([SOGoMailObject -subjectForForward]): explicit.
18850
188512007-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18852
18853	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
18854	-mailAccounts]): rewrote method to return the name of the mail
18855	accounts now available with the -[SOGoUser mailAccounts] method.
18856	([UIxMailMainFrame -showLinkBanner]): removed method.
18857	([UIxMailMainFrame -bannerToolbarStyle]): removed method.
18858	([UIxMailMainFrame -bannerConsumeStyle]): removed method.
18859	([UIxMailMainFrame -rootURL]): removed method.
18860	([UIxMailMainFrame -userRootURL]): removed method.
18861	([UIxMailMainFrame -calendarRootURL]): removed method.
18862	([UIxMailMainFrame -contactsRootURL]): removed method.
18863	([UIxMailMainFrame -hasErrorText])
18864	([UIxMailMainFrame -errorText])
18865	([UIxMailMainFrame -errorAlertJavaScript]): removed methods.
18866	([-composeAction]): removed method. Now provided by
18867	UIxMailAccountActions.
18868	([UIxMailMainFrame -setHideFolderTree:_flag]): removed method.
18869	([UIxMailMainFrame -hideFolderTree]): removed method.
18870	([UIxMailMainFrame -treeRootClassName]): removed method.
18871	([UIxMailMainFrame +initialize]): removed method.
18872	SOGoMailTreeRootClass userdefaults will no longer have any effect.
18873
18874	* UI/Common/WODirectAction+SOGo.m ([WODirectAction
18875	-redirectToLocation:newLocation]): new method that implements the
18876	same functionality as WOComponent.
18877
18878	* UI/Common/WODirectAction+SOGo.[hm]: new class extension module.
18879
18880	* UI/MailerUI/UIxMailView.m ([UIxMailView -mailIsDraft]): new
18881	method that returns whether the current mail is store in the
18882	drafts folder hierarchy.
18883
18884	* SoObjects/SOGo/SOGoUser.m ([-fullEmail]): removed method.
18885	([-primaryEmail]): removed method.
18886	([SOGoUser -primaryIMAP4AccountString]): removed method.
18887	([SOGoUser -mailAccounts]): new method that returns an array
18888	containing description dictionaries for all the user mail
18889	accounts. Each account also contain the user's identities for that
18890	account.
18891	([SOGoUser -allIdentities]): new utility method that returns all
18892	the user identities on all accounts.
18893	([SOGoUser -primaryIdentity]): new method return the first
18894	identity of the first account.
18895
18896	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder -httpURLForAdvisoryToUser:uid]):
18897
18898	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
18899	-isInDraftsFolder]): returns NO.
18900	([-preferredIdentity]): removed method, replaced with -[SOGoUser
18901	primaryIdentity].
18902	([SOGoMailAccount -draftsFolderInContext:_ctx]): new method.
18903
18904	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
18905	-isInDraftsFolder]): new method that detects if self is contained
18906	by the drafts folder by calling itself on the container object.
18907
18908	* SoObjects/Mailer/SOGoMailAccounts.m ([-fetchAllIdentities]):
18909	removed method.
18910	([-fetchIdentitiesWithEmitterPermissions]): removed method.
18911	([SOGoMailAccounts -toManyRelationshipKeys]): rewrote method to
18912	return the name of the mail accounts now available with the
18913	-[SOGoUser mailAccounts] method.
18914
18915	* SoObjects/Mailer/SOGoUser+Mail.[hm]: removed useless class
18916	extension module.
18917
18918	* SoObjects/Mailer/SOGoMailIdentity.[hm]: removed useless class
18919	module.
18920
18921	* SoObjects/SOGo/NSArray+Utilities.m ([NSArray
18922	-keysWithFormat:format]): method that forward the method of the
18923	same name to each member of the array, considering they all are
18924	instances of NSDictionary.
18925	([NSArray -objectsForKey:key]): same principle as above.
18926	([NSArray -flattenedArray]): new method that transforms an array
18927	of arrays into a single array containing all the elements of the
18928	subarrays.
18929
18930	* SoObjects/SOGo/NSDictionary+Utilities.m ([NSDictionary
18931	-keysWithFormat:keyFormat]): new method inspired by the python
18932	string formatting system and which replaces occurences of "%{key}"
18933	by the corresponding keys.
18934
189352007-08-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18936
18937	* Main/SOGo.m ([SOGo -run]): check for channel-type specific
18938	sql script before the generic one when initializing mandatory
18939	system tables.
18940
189412007-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18942
18943	* SoObjects/SOGo/NSString+Utilities.m ([NSString
18944	-pureEMailAddress]): new utility method inspired by the
18945	"_rawSender" private method in SOGoDraftObject, which it now
18946	replaces.
18947
18948	* SoObjects/SOGo/SOGoMailer.m: new abstraction class module that
18949	provides a common API for sending emails, no matter what the
18950	transport is.
18951
189522007-08-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18953
18954	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
18955	-quotasAction]): invoke "relativeImap4Name" instead of
18956	"nameInContainer" since the latter also returns the "folder"
18957	prefix.
18958
18959	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
18960	-listMailboxesAction]): declare the output as text/plain in UTF-8.
18961
18962	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
18963	-deleteFolderAction]): fixed the url of the destination folder.
18964
18965	* Main/SOGo.m ([SOGo +initialize]): show the build date and
18966	hostname at startup.
18967
189682007-08-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18969
18970	* SoObjects/Appointments/SOGoCalendarComponent.m
18971	([SOGoCalendarComponent
18972	-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]):
18973	set the mail date to the current date string returned by our
18974	rfc822DateString extension method.
18975
18976	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
18977	-_gcsFoldersFromFolder:): ignore the personal folders who are
18978	returned but don't really exist.
18979
189802007-08-02  Francis Lachapelle  <flachapelle@inverse.ca>
18981
18982	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView _responseForResults:]):
18983	has to return only one element.
18984
189852007-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
18986
18987	* UI/MailPartViewers/UIxMailPartViewer.m ([UIxMailPartViewer
18988	-content]): new method returning the decoded content of the
18989	corresponding attachment as an NSData instance.
18990	([UIxMailPartViewer -filename]): if the "filename" parameter of
18991	the metadata parameterList is empty, try to find out the filename
18992	from the "disposition" metadata returned with the BODYSTRUCTURE
18993	imap4 tag.
18994
18995	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
18996	-composeAction]): prefix the INBOX folder with "folder".
18997
18998	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailBaseObject
18999	-relativeImap4Name]): return nameInContainer stripped from its
19000	first 6 characters since all folder names are prefixed with
19001	"folder".
19002
19003	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
19004	-imap4URLString]): invoke -relativeImap4Name instead of
19005	"nameInContainer" since the former will return the fixed IMAP4
19006	foldername and the latter the SoObject name.
19007
19008	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
19009	+initialize]): we now fetch the "BODYSTRUCTURE" key instead of "BODY".
19010
19011	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderNameInContext:])
19012	([SOGoMailAccount -draftsFolderNameInContext:_ctx])
19013	([SOGoMailAccount -sieveFolderNameInContext:_ctx])
19014	([SOGoMailAccount -sentFolderNameInContext:])
19015	([SOGoMailAccount -trashFolderNameInContext:]): prefix the folder
19016	names with "folder".
19017	([SOGoMailAccount -inboxFolderInContext:_ctx])
19018	([SOGoMailAccount -sentFolderInContext:_ctx])
19019	([SOGoMailAccount -trashFolderInContext:_ctx]): no longer prefix
19020	the folder names with "folder" since they are prefixed earlier.
19021
190222007-07-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19023
19024	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount -inboxFolderInContext:_ctx])
19025	([-sentFolderInContext:], [-trashFolderInContext:]): folder keys
19026	all starts with "folder".
19027
19028	* SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): no
19029	longer declare security info from here.
19030
19031	* SoObjects/Mailer/SOGoMailFolder.m
19032	([-isMessageKey:_keyinContext:_ctx]): removed useless method.
19033	([SOGoMailFolder -lookupName:_keyinContext:acquire:_acquire]):
19034	folder names now always start with "folder".
19035
19036	* SoObjects/Mailer/SOGoMailAccount.m
19037	([-lookupName:inContext:acquire:]): folder names now always start
19038	with "folder".
19039
190402007-07-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19041
19042	* UI/MailerUI/UIxMailForwardAction.m ([UIxMailForwardAction
19043	-forwardAction]): adapted to the new saveAttachment:withMetadata:
19044	method (see below).
19045
19046	* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -saveAction]): added
19047	code to save the attached filenames with the filename returned by
19048	the web server as well as their mime types.
19049
19050	* UI/MailPartViewers/UIxMailPartMessageViewer.m ([UIxMailPartMessageViewer -fromAddresses])
19051	([UIxMailPartMessageViewer -toAddresses])
19052	([UIxMailPartMessageViewer -ccAddresses]): new methods returning
19053	the corresponding fields separated with a ", " (if needed).
19054
19055	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject
19056	-saveAttachment:_attachwithMetadata:metadata]): new method
19057	replacing -saveAttachment:withName: and which takes a dictionary
19058	as parameter with the filename and the mime type of the
19059	attachment.
19060	The mimetype is then saved in a hidden text file.
19061	([SOGoDraftObject -contentTypeForAttachmentWithName:]): if exists,
19062	take the mime type from the hidden text file related to the
19063	attachment.
19064
19065	* SoObjects/Contacts/SOGoContactGCSFolder.m ()
19066	([SOGoContactGCSFolder
19067	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
19068	return records if the db records are > 0 and not just > 1...
19069
190702007-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19071
19072	* UI/Contacts/UIxContactsListView.m ([-displayName]): removed
19073	method.
19074	([UIxContactsListView -defaultSortKey]): changed to "displayName".
19075
19076	* SoObjects/Contacts/SOGoContactLDAPFolder.m
19077	([SOGoContactLDAPFolder
19078	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
19079	translate the returned records to a normalized form.
19080
19081	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
19082	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]):
19083	translate the returned records to a normalized form.
19084
19085	* UI/Scheduler/UIxCalListingActions.m,
19086	UI/Contacts/UIxContactsListView.m, SoObjects/SOGo/SOGoUser.m,
19087	SoObjects/SOGo/AgenorUserDefaults.m,
19088	SoObjects/Contacts/SOGoContactGCSFolder.m,
19089	SoObjects/Appointments/SOGoAppointmentFolder.m,
19090	OGoContentStore/OCSiCalFieldExtractor.m,
19091	OGoContentStore/OCSContactFieldExtractor.m: prefixed all quick
19092	table fields with "c_".
19093
190942007-07-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19095
19096	* SoObjects/SOGo/LDAPSource.m ([LDAPSource +initialize]): query
19097	the values for SOGoLDAPQueryLimit and SOGoLDAPQueryTimeout from
19098	the application settings. If set, both limit will influence the
19099	maximum size of the resultsets and the time taken to solve them.
19100	([LDAPSource -_initLDAPConnection]): initialize the limits.
19101
191022007-07-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19103
19104	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder -davNamespaces]): added new overriden
19105	method that declares the DAV namespace related to CardDAV.
19106	([SOGoContactGCSFolder -davComplianceClassesInContext:]): new
19107	method that declares the "access-control" and "addressbook-access"
19108	classes to the list.
19109
19110	* SoObjects/Appointments/SOGoAppointmentFolder.m
19111	([-lookupActionForCalDAVMethod:]): removed method.
19112	([SOGoAppointmentFolder -davNamespaces]): added new overriden
19113	method that declares the DAV namespace related to CalDAV.
19114
19115	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davNamespaces]): new
19116	optional method for subclasses which handle specific extensions to
19117	the DAV protocol: CardDAV or CalDAV.
19118	([SOGoFolder
19119	-lookupName:lookupNameinContext:localContextacquire:acquire]):
19120	new overriden method that handles dav invocations for extensions
19121	to DAV by returning an appropriate SoSelectorInvocation.
19122
19123	* SoObjects/SOGo/NSString+Utilities.m ([NSString
19124	-asDavInvocation]): new method returning a dictionary with a "ns"
19125	key representing the dav namespace and a "method" key representing
19126	the dav method name of the request.
19127
19128	* UI/PreferencesUI/UIxPreferences.m ([UIxPreferences
19129	+initialize]): scan the value of SOGoUIxUserCanChangePassword.
19130	Default is "no".
19131	([UIxPreferences -shouldDisplayPasswordChange]): new template
19132	method that returns the value of SOGoUIxUserCanChangePassword.
19133
19134	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage +initialize]):
19135	scan the value of SOGoUIxDefaultModule. If not set, the default
19136	module defaults to "Calendar".
19137	([SOGoUserHomePage -defaultAction]): redirect the user to the
19138	value of "SOGoUIxDefaultModule".
19139
191402007-07-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19141
19142	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
19143	-contactInfos]): cache the results to avoid multiple invocations.
19144
19145	* SoObjects/Contacts/SOGoContactLDAPFolder.m
19146	([SOGoContactLDAPFolder -toOneRelationshipKeys]): check whether we
19147	really should return something or if we fake to return nil...
19148
191492007-07-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19150
19151	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): set
19152	acceptAnyUser to YES only when the SOGoAuthentificationMethod user
19153	default is set to "bypass".
19154
19155	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
19156	-checkLogin:_loginpassword:_pwd]): accepts unverified connections
19157	when authMethod is set to "bypass" from now on. This would avoid a
19158	security concern with a default installation of SOGo.
19159	AuthentificationMethod is now prefixed with "SOGo" for better
19160	clarity.
19161
191622007-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19163
19164	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
19165	-quotasAction]): new method that returns a json representation of
19166	the mailbox quotas.
19167
191682007-07-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19169
19170	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
19171	-imap4URL]): rewrote method to support accented mailbox names.
19172	([SOGoMailBaseObject imap4Password]): rewrote to simply use
19173	SOGoAuthenticator's passwordInContext:.
19174
19175	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
19176	-takeValuesFromRequest:_rqinContext:_ctx]): explicitly set the
19177	start and due dates to nil if hasStartDate and hasDueDate are
19178	false.
19179
19180	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
19181	-passwordInContext:context]): made method public.
19182
19183	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
19184	-extractQuickFieldsFromTodo:_task]): set "isallday" and "isopaque"
19185	to false to avoid a null violation.
19186
191872007-07-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19188
19189	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
19190	-contentAsString]): returns the message encoded in ISO Latin 1
19191	again.
19192
19193	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): read the
19194	SOGoSuperUsername user defaults.
19195	([SOGoUser -initWithLogin:newLoginroles:newRoles]): simplified
19196	method.
19197	([SOGoUser -rolesForObject:objectinContext:context]): if the
19198	current user is the superuser, grant him/her the "owner" role.
19199
19200	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): create
19201	the folder only if the current user is the owner of the future
19202	folder.
19203
19204	* SoObjects/Appointments/SOGoCalendarComponent.m
19205	([SOGoCalendarComponent -contentAsString]): we return the content
19206	based on the permissions returned by the security manager instead
19207	of by looking at the user roles.
19208
19209	* SoObjects/Appointments/SOGoAppointmentFolder.m
19210	([SOGoAppointmentFolder -calendarFolders]): read the calendar
19211	folders of the user to whom this folder belongs instead of the
19212	active user. This way, a delegate user will be able to have the
19213	same view that the original user has if he connects from his user
19214	directory.
19215
19216	* Main/SOGo.m ([SOGo -lookupUser:_keyinContext:]): check if the
19217	user exists before creating the SOGoUserFolder instance. If not,
19218	returns nil.
19219
19220	* UI/MailerUI/UIxMailSourceView.[hm]: new class module designed to
19221	return the message source code in plain text.
19222
19223	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
19224	-contentAsString]): returns the message encoded in UTF8.
19225
192262007-07-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19227
19228	* OGoContentStore/iCalRepeatableEntityObject+OCS.m
19229	([iCalRepeatableEntityObject -cycleInfo]): no longer take the
19230	leading tagname into account when serializing the element values.
19231
19232	* Main/SOGoProductLoader.m: only load bundle directories ending
19233	with the "SOGo" extension.
19234
19235	* Main/SOGo.m ([SOGo
19236	-_checkTableWithCM:cmtableURL:urlandType:tableType]): empty the
19237	result set if the query has caused no exception. Otherwise we get
19238	an "evaluation is in progress exception".
19239
192402007-06-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19241
19242	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
19243	-generateSQLForInsert]): initialize error to nil before the
19244	serialization. Otherwise the method can get confused if it ever is
19245	initialized to something else.
19246
19247	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
19248	-folderIsMandatory]): returns NO unconditionnally.
19249
19250	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
19251	-appendPersonalSources]): add the "personal" folder to the list of
19252	user folders even if it doesn't exist, so that it is created when
19253	the user accesses it.
19254
19255	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
19256	-folderIsMandatory]): returns YES if nameInContainer is set to
19257	"personal", which is the default address book.
19258
19259	* SoObjects/Appointments/SOGoAppointmentFolder.m
19260	([SOGoAppointmentFolder -folderIsMandatory]): returns YES since
19261	users must have one Calendar folder (one and only one).
19262	([SOGoAppointmentFolder -_privacySqlString]): unescape the
19263	escaping '\' so make the carriage return a real one. This way,
19264	PgSQL 8 won't complain about escaping the string.
19265
19266	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -ocsFolder]): new
19267	method that create the folder if considered mandatory.
19268	([SOGoFolder -folderIsMandatory]): new method that determines
19269	whether the folder should be created automatically or not. To be
19270	overriden by subclasses.
19271
19272	* Main/SOGo.m ([SOGo -run]): override method and create the
19273	missing system tables if needed.
19274
192752007-06-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19276
19277	* UI/MailerUI/WOContext+UIxMailer.m ([WOContext
19278	-mailDateFormatter]): returns the user's date formatter.
19279
19280	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject -date]):
19281	applies the user timezone to the date object before returning it.
19282
19283	* UI/Common/UIxSortButton.m: removed useless class module.
19284
19285	* UI/Common/UIxSortableTableHeader.m: removed useless class
19286	module.
19287
19288	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
19289	-contactInfos]): use the "asc" url parameter instead of "desc" to
19290	determine the ordering.
19291	([-sortOrdering]): removed method.
19292	([UIxContactsListView -init]): removed the "searchText" ivar.
19293	(general): the template no longer use the UIxSortableTableHeader
19294	components.
19295
19296	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
19297	-defaultSortKey]): default sort following the messages arrival
19298	instead of their date.
19299	([-isSortedDescending]): removed method.
19300	([-imap4SortOrdering]): use the "asc" url parameter instead of
19301	"desc" to determine the ordering.
19302	(general): the template no longer use the UIxSortableTableHeader
19303	components.
19304
193052007-06-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19306
19307	* UI/MailerUI/UIxMailListView.m ([UIxMailListView -sleep]):
19308	removed method.
19309	([-setQualifier:_msg], [-qualifier]): removed methods.
19310	([UIxMailListView -defaultAction]): added code to handle the
19311	search criteria and value passed as url parameters. Also, we now
19312	handle the same search criterias as Thunderbird/Icedove.
19313
193142007-06-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19315
19316	* UI/PreferencesUI/UIxJSONPreferences.m ([UIxJSONPreferences
19317	-jsonDefaultsAction]): bug fix: returns a WOResponse instance with
19318	the string instead of the string itself.
19319	([UIxJSONPreferences -jsonSettingsAction]): same as above.
19320
19321	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): new module
19322	bool var "acceptAnyUser" that is set when the AuthenticationMethod
19323	user default is nil.
19324	([SOGoUser -initWithLogin:newLoginroles:newRoles]):
19325	unconditionnally returns an instance whenever acceptAnyUser is set.
19326
193272007-06-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19328
19329	* Main/sogod.m (main): prevent SOGo from running as root.
19330
193312007-06-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19332
19333	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
19334	-setCurrentPassword:newPassword]): new stub method.
19335	([SOGoUser -dateFormatterInContext:context]): new method that
19336	returns an instance of SOGoDateFormatter configured based on the
19337	user defaults.
19338
19339	* UI/Common/UIxPageFrame.m ([UIxPageFrame
19340	-relativePreferencesPath]): new method.
19341
19342	* UI/Scheduler/UIxComponentEditor.m ([-titleDateFormatter]):
19343	removed useless method.
19344
19345	* SoObjects/SOGo/SOGoDateFormatter.m: rewrote class to accept
19346	different configurable formats (long and short date + time).
19347
19348	* SoObjects/SOGo/SOGoDateFormatter.[hm]: moved from UI/SOGoUI/.
19349
19350	* SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
19351	-isInternetRequest]): removed method.
19352
19353	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
19354	-jsonRepresentation]): new method with an explicit name.
19355
19356	* UI/PreferencesUI/product.plist: new bundle that provides a web
19357	ui for handling user defaults.
19358
19359	* UI/Scheduler/UIxTaskView.[hm]: removed unused module.
19360
19361	* UI/Scheduler/UIxAppointmentView.[hm]: removed unused module.
19362
19363	* SoObjects/SOGo/WOContext+Agenor.[hm]: removed unused module.
19364
193652007-06-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19366
19367	* SoObjects/SOGo/SOGoLRUCache.m: removed unused module.
19368
193692007-06-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19370
19371	* UI/Scheduler/NSArray+Scheduler.m ([NSArray
19372	-compareEventsAscending:otherEvent]): no longer use compare: on
19373	the time objects since one of them could be an NSNull, which
19374	crashes when comparing with anything.
19375
19376	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
19377	-eventsListAction]): sort events from here.
19378	([UIxCalListingActions -tasksListAction]): sort tasks from here.
19379
19380	* SoObjects/SOGo/NSObject+AptComparison.[hm]: removed category
19381	module, replaced with NSArray+Scheduler in UI/SchedulerUI/.
19382
19383	* SoObjects/Appointments/SOGoAppointmentFolder.m
19384	([SOGoAppointmentFolder
19385	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]):
19386	no longer sort elements from here.
19387
193882007-06-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19389
19390	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
19391	-aclsForUser:uid]): implemented method by forwarding the request
19392	to the container. This fixes a bug where users could no longer
19393	read emails from shared folders.
19394
19395	* SoObjects/Appointments/SOGoCalendarComponent.m
19396	([SOGoCalendarComponent -init]): "isNew" is no longer defined
19397	here, but rather in its parent class.
19398
19399	* UI/SOGoUI/SOGoDateFormatter.m ([SOGoDateFormatter
19400	-stringForSecondsSinceThe70s:seconds]): new utility method.
19401
19402	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
19403	-eventsListAction]): no longer reduce the end day of one day for
19404	all day events since everything has been fixed in
19405	OCSiCalFieldExtractor.
19406
19407	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
19408	-extractQuickFieldsFromEvent:_event]): reduce the seconds/70 of
19409	the end date of all day events of 1 so that they stay on their
19410	real last day.
19411
194122007-06-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19413
19414	* UI/Scheduler/UIxCalMonthView.m: no longer retrieve appointments.
19415
19416	* UI/Scheduler/UIxCalView.m ([-fetchCoreAppointmentsInfos]):
19417	removed method.
19418	([-fetchCoreTasksInfos]): removed method.
19419
19420	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
19421	-init]): initialize an instance of SOGoDateFormatter.
19422	([UIxCalListingActions -eventsListAction]): the display start and
19423	end dates are added to the listing for each event.
19424
19425	* UI/Scheduler/UIxCalDayTable.m: no longer retrieve appointments.
19426
19427	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
19428	-isAllDay]): returns YES if the "hm" url parameter is set to
19429	"allday".
19430	([UIxAppointmentEditor -defaultAction]): if isAllDay, the enddate
19431	is displayed one day earlier.
19432
194332007-06-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19434
19435	* UI/Scheduler/UIxCalListingActions.m ([UIxCalListingActions
19436	-_setupContext]): take the range of dates specified by the popup
19437	into account.
19438
19439	* UI/Scheduler/UIxCalListingActions.[hm]: new subclass of
19440	WODirectAction that returns WOResponse objects with the events or
19441	todos satisfying the parameters passed in the url.
19442
19443	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
19444	-takeValuesFromRequest:_rqinContext:_ctx]): take the new ivar
19445	"isAllDay" into account and compute the amount of days to pass to
19446	the iCalEvent.
19447
194482007-06-06  Francis Lachapelle <flachapelle@inverse.ca>
19449
19450	* SoObjects/SOGo/NSNumber+Utilities.m: initial import.
19451	* SoObjects/SOGo/NSNull+Utilities.m: initial import.
19452	* UI/Scheduler/UIxCalTasksListView.m ([WOResponse -tasksListAction]):
19453	new method that returns a json-formatted array of the visible tasks
19454	for the current user.
19455
194562007-06-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19457
19458	* SoObjects/Appointments/SOGoAppointmentObject.m: the owner of the
19459	object must be present in the list of UIDs we delete the object
19460	from. Otherwise Calendar objects having no organizer and no
19461	attendees will remain in their owner's Calendar.
19462
19463	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
19464	-_urlPreferringParticle:expectedoverThisOne:possible]): remove the
19465	first 3 elements of the path array if the url returned by
19466	baseURLInContext: returns a hostname.
19467
19468	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
19469	-_adjustOwner]): sharedFolderName and otherUsersFolderName may be
19470	nil, in which case a crash happens when calling hasPrefix:.
19471	([SOGoMailFolder -_sharesACLs]): same as above.
19472	([SOGoMailFolder -otherUsersPathToFolder]): same as above. If
19473	otherUsersFolderName is nil, we return nil.
19474	([SOGoMailFolder -httpURLForAdvisoryToUser:uid]): if we receive
19475	nil from [self otherUsersPathToFolder], we return nil too.
19476
194772007-06-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19478
19479	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
19480	-_urlPreferringParticle:expectedoverThisOne:possible]): unescape
19481	the result of [self baseURLInContext:] to avoid a double escaping
19482	in the resulting string.
19483
19484	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -aclsForUser:uid]): if
19485	the user has the "ObjectReader" role on the parent container, then
19486	he is granted the "ObjectViewer" role on this object. Same for
19487	"ObjectEraser", although this might change later.
19488
19489	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
19490	-toolbar]): determine the toolbar filename based on the
19491	permissions declared by the securitymanager. The role mechanism
19492	has been adjusted on a lowerlevel so we can simplify the code.
19493
19494	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
19495	-initWithName:newNameinContainer:newContainer]): read the content
19496	directly from here. That way we can determine whether the object
19497	is being created.
19498	([SOGoContentObject -aclsForUser:uid]): if the object is new and
19499	the ObjectCreator role is enabled, we also grant the ObjectEditor
19500	role to the current user.
19501
19502	* UI/Common/UIxFolderActions.m ([-canAccessContentAction]):
19503	changed the method paradigm to only return HTTP code 204. Not test
19504	is done whatsoever since the security manager does it for us.
19505
19506	* UI/Contacts/UIxContactsListView.m ([-canAccessContentAction]):
19507	removed method because the same exists in UIxFolderActions.m
19508
19509	* UI/Contacts/UIxContactsUserRightsEditor.m
19510	([UIxContactsUserRightsEditor
19511	-setUserCanReadObjects:userCanReadObjects]): new method.
19512
19513	* SoObjects/SOGo/SOGoPermissions.m: added roles "FolderViewer" and
19514	"FolderEraser" and special permission "Access Object". Removed
19515	role "SOGoMailRole_MessageEraser" since "SOGoRole_ObjectEraser"
19516	can be used instead. Removed "FolderReader" since it is useless.
19517
19518	* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
19519	-vCard]): directly use the "content" ivar since it is initialized
19520	during object creation.
19521
19522	* SoObjects/Contacts/SOGoContactLDAPFolder.m
19523	([SOGoContactLDAPFolder -init]): no longer handle the
19524	nameInContainer no the container ivars. They were removed because
19525	this class is a descendant of SOGoObject which already has them.
19526	([SOGoContactLDAPFolder -davDisplayName]): new overriden method
19527	returning "displayName".
19528	([SOGoContactLDAPFolder -isFolderish]): new overriden method
19529	returning "YES".
19530
19531	* SoObjects/Appointments/SOGoCalendarComponent.m
19532	([SOGoCalendarComponent -isOrganizerOrOwner:user]): commented out.
19533	([SOGoCalendarComponent -findParticipant:user]): new name for
19534	method "participant:".
19535	([SOGoCalendarComponent -findParticipantWithUID:uid]): same as
19536	findparticipant but taking a uid string as parameter.
19537	([SOGoCalendarComponent -contentAsString]): don't regenerate the
19538	iCalendar automatically. Instead, this is done only when the user
19539	is a "date and time viewer".
19540	([SOGoCalendarComponent -aclsForUser:uid]): take delegation roles
19541	(modifier and responder) into account by compiling them with the
19542	owner's roles.
19543
19544	* SoObjects/Contacts/SOGoContactFolder.h: removed
19545	"nameInContainer" from the list of required methods.
19546
19547	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
19548	-davContentType]): returns "text/calendar".
19549
19550	* SoObjects/Contacts/SOGoContactLDAPFolder.m
19551	([SOGoContactLDAPFolder -davResourceType]): declare the correct
19552	groupdav resource-type.
19553
19554	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
19555	-davContentType]): same as below.
19556
19557	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
19558	-initWithName:newNameinContainer:newContainer]): new overriden
19559	method setting the custom owner directly.
19560
19561	* SoObjects/Mailer/SOGoMailAccounts.m ([SOGoMailAccounts
19562	-davContentType]): same as below.
19563
19564	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
19565	-davContentType]): same as below.
19566
19567	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -davContentType]):
19568	declare "httpd/unix-directory".
19569
19570	* SoObjects/SOGo/SOGoUser.m ([SOGoUser +initialize]): declare
19571	"UTC" as fallback timezone instead of "Canada/Eastern".
19572	([-hasEmail:email]): make use of the new NSArray's
19573	containsCaseInsensitiveString: method.
19574
19575	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
19576	-davContentType]): declare "message/rfc822" as content type.
19577
19578	* SoObjects/Appointments/SOGoAppointmentFolder.m
19579	([SOGoAppointmentFolder -_privacySqlString]): "owner" is now an
19580	ivar in SOGoObject.
19581	([SOGoAppointmentFolder
19582	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): same as above.
19583	([-fetchContentObjectNames]): commented out method since it was
19584	usefull only for testing Funambol.
19585
19586	* SoObjects/SOGo/NSArray+Utilities.m ([NSArray
19587	-containsCaseInsensitiveString:match]): an enhanced version of
19588	containsObject:.
19589
19590	* UI/MailerUI/UIxMailView.m ([-isTrashingAllowed]): removed
19591	useless method.
19592	([-showMarkDeletedButton]): removed useless method.
19593	([-showTrashButton]): removed useless method.
19594
19595	* SoObjects/Appointments/iCalEntityObject+SOGo.m
19596	([iCalEntityObject -userIsParticipant:user]): new proxy method
19597	that invoked isParticipant on self for each possible email
19598	addresses of the user passed as parameter.
19599	([iCalEntityObject -userIsOrganizer:user]): same as above.
19600
19601	* SoObjects/Appointments/iCalEntityObject+SOGo.[hm]: new class
19602	extension module.
19603
19604	* SoObjects/Appointments/SOGoAppointmentObject.m
19605	([SOGoAppointmentObject
19606	-saveContentString:contentStringbaseVersion:baseVersion]): remove
19607	method since an event may not have an organizer.
19608
19609	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
19610	-GETAction:localContext]): clarified method. Added support for
19611	content-type (thanks to Helge Hess).
19612	([SOGoObject -initWithName:_nameinContainer:_container]):
19613	initialize and retain the owner.
19614	([SOGoObject -davContentType]): returns "text/plain".
19615
196162007-05-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19617
19618	* UI/Common/UIxObjectActions.m ([UIxObjectActions
19619	-addUserInAclsAction]): send an acl addition mail.
19620	([UIxObjectActions -removeUserFromAclsAction]): send an acl
19621	removal mail.
19622
19623	* UI/Common/UIxFolderActions.m ([UIxFolderActions
19624	-_realActionWithFolderName:folderDict]): handle the possible
19625	presence of the "mail-invitation" url parameter. If present, the
19626	user will be redirected to the relevant folder.
19627
19628	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -fullEmail]): new proxy method.
19629	([SOGoUser -language]): new method that returns the user's
19630	preferred language, or the system's if none has been set yet.
19631
19632	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -davURL]): new method
19633	that returns the full dav url to self.
19634	([SOGoObject -soURL]): same as above but for the so url (Web UI).
19635	([SOGoObject -soURLToBaseContainerForUser:uid]): new method that
19636	returns the full so url to the base of the SOGo module to which
19637	self belongs, and for the specified user.
19638	([SOGoObject -soURLToBaseContainerForCurrentUser]): same as above
19639	but for the current user.
19640	([SOGoObject -httpURLForAdvisoryToUser:uid]): new protocol method
19641	required by the acl advisory templates and which returns a link
19642	the target user can click to activate its new subscription.
19643	([SOGoObject -resourceURLForAdvisoryToUser:uid]): same as above
19644	but for inclusion of the application/x-sogo-notification part,
19645	which will be handled by the Lightning enhancer plugin.
19646
19647	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions -subscribeAction])
19648	([UIxMailFolderActions -unsubscribeAction]): new stub methods that
19649	do nothing yet since imap folder subscription is not handled yet.
19650
19651	* SoObjects/SOGo/SOGoContentObject.m
19652	([-hasSupportForDefaultRoles]): removed method.
19653
19654	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
19655	-getFullEmailForUID:uid]): new method that returns the username +
19656	email pair.
19657
19658	* SoObjects/Appointments/SOGoCalendarComponent.m
19659	([SOGoCalendarComponent +initialize]): the default language for
19660	mail templates is now set to English.
19661
19662	* UI/SOGoUI/SOGoACLFrenchRemovalAdvisory.[hm]: new subclass of
19663	SOGoACLAdvisory implementing the french template for user removal
19664	from acls.
19665
19666	* UI/SOGoUI/SOGoACLFrenchAdditionAdvisory.[hm]: new subclass of
19667	SOGoACLAdvisory implementing the french template for user
19668	additions to acls.
19669
19670	* UI/SOGoUI/SOGoACLEnglishRemovalAdvisory.[hm]: new subclass of
19671	SOGoACLAdvisory implementing the english template for user removal
19672	from acls.
19673
19674	* UI/SOGoUI/SOGoACLEnglishAdditionAdvisory.[hm]: new subclass of
19675	SOGoACLAdvisory implementing the english template for user
19676	additions to acls.
19677
19678	* UI/SOGoUI/SOGoACLAdvisory.[hm]: new class module implemented the
19679	supercall of all the acl advistory templates. The model is based
19680	on SOGoAptMailNotification except that the template encapsulates
19681	the message to be sent. Later, we might create a superclass common
19682	to all template-based emails.
19683
19684	* SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
19685	-addRange:newRange]): new method that store a string
19686	representation of the NSRange passed as parameter.
19687	([NSMutableArray -hasRangeIntersection:testRange]): tests whether
19688	any range contained in self intersect with the one passed as parameter.
19689
19690	* SoObjects/SOGo/NSString+Utilities.m ([-stringByDetectingURLs]):
19691	store ranges in an array to prevent them from intersecting with
19692	each other during the passes.
19693
196942007-05-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19695
19696	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
19697	-primaryFetchMailboxInfo]): useless method. Removed.
19698
196992007-05-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19700
19701	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
19702	-toManyRelationshipKeys]): invoke [self subfolders].
19703	([SOGoMailFolder -subfolders]): new method containing what used to
19704	be in toManyRelationshipKeys.
19705	([SOGoMailFolder -subfoldersURL]): same as above but returns imap
19706	urls.
19707
19708	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
19709	-allFolderPaths]): renamed version of "allFolderPathes", sorted by
19710	named and at the beginning of which we put the predefined folders.
19711
19712	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
19713	-emptyTrashAction]): new method inspired by a similar one from
19714	UIxMailListView, to which we added the ability to remove
19715	subfolders.
19716
19717	* UI/MailerUI/UIxMailListView.m ([-emptyTrashAction]): removed
19718	method. Replaced with a similar one in UIxMailFolderActions.
19719
19720	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
19721	-renameFolderAction]): implemented method.
19722	([UIxMailFolderActions -deleteFolderAction]): no longer delete the
19723	specified folder. Instead, we put it in the trash folder.
19724
19725	* UI/MailerUI/UIxMailListView.m ([-createFolderAction]): removed
19726	method, replaced with a similar method in the new
19727	UIxMailFolderAction class module.
19728	([-deleteFolderAction]): idem.
19729
19730	* UI/MailerUI/UIxMailFolderActions.m ([UIxMailFolderActions
19731	-createFolderAction]): new method implementing subfolder creation.
19732	([UIxMailFolderActions -renameFolderAction]): new method
19733	implementing subfolder renaming (basic implementation to be
19734	finalized later).
19735	([UIxMailFolderActions -deleteFolderAction]): new method
19736	implementing folder deletion.
19737
19738	* UI/MailerUI/UIxMailFolderActions.[hm]: new module implementing
19739	web actions related to the handling of imap folder.
19740
197412007-05-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19742
19743	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
19744	-ownerInContext:localContext]): overriden method because we are an
19745	IMAP4 client and we need a bit more intelligence to deduce the
19746	owner of the current folder.
19747	([SOGoMailFolder -aclsForUser:uid]): aclForMailboxAtURL might
19748	return an NSException so we need to be careful here to avoid a
19749	crash.
19750	([SOGoMailFolder -aclUsers]): aclForMailboxAtURL might return an
19751	NSException so we need to be careful here to avoid a crash.
19752
19753	* SoObjects/Mailer/SOGoMailAccounts.m
19754	([SOGoMailAccounts -fetchIdentitiesWithOnlyEmitterAccess:_flag])
19755	there is no longer any concept of Intranet or Internet connection
19756	handling.
19757
19758	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
19759	-sharedFolderName]): new method.
19760	([SOGoMailAccount -otherUsersFolderName]): new method.
19761
19762	* UI/MailerUI/UIxMailFolderMenu.[hm]: removed module, obsoleted by
19763	new javascript code and the new UIxMailAccountActions class.
19764
19765	* UI/MailerUI/UIxMailTree.[hm]: removed module, obsoleted by new
19766	javascript code and the new UIxMailAccountActions class.
19767
19768	* UI/MailerUI/UIxMailTreeBlock.[hm]: removed module, obsoleted by
19769	new javascript code and the new UIxMailAccountActions class.
19770
19771	* UI/MailerUI/UIxMailAccountActions.m ([UIxMailAccountActions
19772	-listMailboxesAction]): new method that returns a json-formatted
19773	tree of all the mailboxes available to the current user.
19774
19775	* UI/MailerUI/UIxMailAccountActions.[hm]: new module implementing
19776	web actions related to the handling of mail accounts.
19777
19778	* SoObjects/SOGo/NSDictionary+Utilities.[hm]: new extension
19779	module.
19780
19781	* SoObjects/SOGo/NSObject+Utilities.m ([NSObject
19782	-jsonRepresentation]): new interface method meant to be overriden
19783	by the primitive classes.
19784
197852007-05-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19786
19787	* UI/MailerUI/UIxMailSplashView.m: removed.
19788
19789	* SoObjects/Appointments/SOGoCalendarComponent.m
19790	([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]): add
19791	the uid to the list only when the user email is recognized by the
19792	user manager.
19793
197942007-05-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19795
19796	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
19797	-isDeletionAllowed]): completed method with the new imap acl api.
19798
19799	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultAclRoles]):
19800	removed method.
19801
19802	* SoObjects/SOGo/SOGoPermissions.m: added the new role
19803	"SOGoMailRole_MessageEraser".
19804
19805	* UI/Common/UIxAclEditor.m ([UIxAclEditor -defaultUserID])
19806	([UIxAclEditor -_prepareUsers]): take the new SOGoObject's
19807	"defaultUserID" method into account.
19808
19809	* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -userIsDefaultUser])
19810	([UIxUserRightsEditor -_initRights]): take the new SOGoObject's
19811	"defaultUserID" method into account.
19812
19813	* UI/MailerUI/UIxMailUserRightsEditor.m: added all the missing
19814	methods to support the IMAP acls mentionned in the RFC 4314,
19815	removed the ones specific to Cyrus.
19816
19817	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -defaultUserID]): new
19818	mandatory method for subclasses. Removed the SOGoDefaultUserID
19819	global var.
19820
19821	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -defaultUserID]):
19822	overriden method to return @"<default>".
19823
19824	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
19825	-defaultUserID]): overriden method to return @"<default>".
19826
19827	* SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder
19828	-aclsForUser:uid]): overriden method.
19829	([SOGoMailFolder -removeAclsForUsers:users]): overriden method.
19830	([SOGoMailFolder -setRoles:rolesforUser:uid]): overriden method.
19831	([SOGoMailFolder -defaultUserID]): overriden method.
19832	([SOGoMailFolder -hasSupportForDefaultRoles]): overriden method.
19833
198342007-05-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19835
19836	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
19837	-aclUsersForObjectAtPath:objectPathArray]): new method that being
19838	forwarded the calles to aclUsers for the GCS-based subclasses of
19839	SOGoObject.
19840
19841	* SoObjects/Mailer/SOGoMailFolder.m: removed all the previous
19842	methods that would have been used to support IMAP acls. Replaced
19843	them with the new protocol for them that has been implemented in
19844	SOGo during the last few weeks.
19845
19846	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
19847	-hasSupportForDefaultRoles]): override method by returning "YES".
19848
19849	* SoObjects/SOGo/NSArray+Utilities.m ([NSMutableArray
19850	-addObjectUniquely:object]): new method with an explicit name.
19851
19852	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -aclUsers]): renamed
19853	"acl" to "aclUsers". Now designed to return only the uid of the
19854	users involved in an ACL.
19855	([SOGoObject -hasSupportForDefaultRoles]): new method returning
19856	"NO" by default. To indicate to the acl editor that we don't want
19857	to handle a default user.
19858
19859	* SoObjects/SOGo/SOGoPermissions.[hm]: added the
19860	SOGoRole_ObjectReader, SOGoRole_Folder*, and SOGoMailRole_*
19861	symbols.
19862
19863	* UI/MailerUI/UIxMailUserRightsEditor.[hm]: new class module that
19864	provides a view to the IMAP acls.
19865
19866	* UI/MailerUI/UIxMailFolderACLEditor.m: removed obsolete module.
19867
19868	* UI/WebServerResources/MailerUI.js: replaced all invocations of
19869	addEventListener to the use of prototype's Event object. Also,
19870	configured all menus programmatically following descriptions lists
19871	containing their callbacks, or nulls, submenus id or separators.
19872
198732007-05-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19874
19875	* UI/Common/UIxObjectActions.m ([UIxObjectActions
19876	-addUserInAclsAction]): save the previous roles of the user
19877	(unlikely) or the default roles, or None instead of saving the
19878	roles that should appear the first time in the role editor when no
19879	default has been set...
19880
19881	* SoObjects/SOGo/SOGoObject.m: defined a new constant
19882	"SOGoDefaultUserID".
19883
19884	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
19885	-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]):
19886	ignore the "AuthorizedSubscriber" role and add the "None" role
19887	when no other role is found.
19888
19889	* UI/Common/UIxAclEditor.m: added a button for the new default
19890	user roles feature.
19891
19892	* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
19893	-_initRights]): don't take the "None" role into account when
19894	initializing the list of current roles.
19895
19896	* SoObjects/SOGo/SOGoPermissions.m: added a new void role
19897	"SOGoRole_None".
19898
198992007-05-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19900
19901	* SoObjects/SOGo/NSString+Utilities.m ([NSString
19902	-_rangeOfURLInRange:refRange]): urls cannot end with "&" nor "=".
19903	There is no need to subscract the start from the length if a space
19904	is not found since the range has not changed either. Finally, the
19905	first character before the url might also be a tab or a cr, so we
19906	match it against the "urlAfterEndingChars" custom NSCharacterSet.
19907	([NSString -stringByDetectingURLs]): modified to handle email
19908	addresses and add a correct "mailto:" link.
19909
199102007-05-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19911
19912	* SoObjects/Appointments/SOGoAppointmentFolder.m
19913	([SOGoAppointmentFolder -fetchContentObjectNames]): override
19914	method to return the events in the range of 2 weeks ago up to 4
19915	weeks from "now".
19916
19917	* UI/MailPartViewers/UIxMailPartTextViewer.m
19918	([UIxMailPartTextViewer -flatContentAsString]): use the new
19919	"stringByDetectingURLs" method to offer clickable urls.
19920
19921	* SoObjects/SOGo/NSString+Utilities.m ([NSString
19922	-stringByDetectingURLs]): this new method replaces passive URLS
19923	with active ones for HTML resolution of the text.
19924
199252007-05-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19926
19927	* SoObjects/Mailer/SOGoDraftObject.m ([NSString
19928	-asQPSubjectString:encoding]): simplified method.
19929	The headers indicates "utf-8" again thank to our fix in
19930	sope-mime.
19931
19932	* SoObjects/SOGo/SOGoObject.m: fail to build if libFoundation is
19933	being used.
19934
199352007-05-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19936
19937	* UI/Common/UIxObjectActions.m ([UIxObjectActions
19938	-removeUserFromAclsAction]): implemented this method which was
19939	missing and is required to remove users from ACLs.
19940
19941	* UI/Common/UIxFolderActions.m ([UIxFolderActions
19942	-subscribeAction]): folderDict was not autoreleased, resulting in
19943	a leak...
19944
19945	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
19946	-primaryFetchProfile]): when building with libFoundation, don't
19947	use the "propertyList" method from NSString. Rather, we convert
19948	the string to an NSData instance and passit as parameter to
19949	NSDeserializer. This way, we obtain a mutable dictionary rather
19950	than an immutable one.
19951
19952	* SoObjects/Mailer/SOGoDraftObject.m ([SOGoDraftObject -bodyPartForText])
19953	([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): use the
19954	constant string "contentTypeValue".
19955	contentTypeValue is now set back to iso-8859-1 since NGMime
19956	converts extracts the data in that encoding.
19957
199582007-05-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19959
19960	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
19961	-checkLogin:loginToCheckandPassword:passwordToCheck]): if a
19962	"bindFields" value is present in the user defaults, use the
19963	specified fields to find the dn of the user to bind.
19964	([LDAPSource -allEntryIDs])
19965	([LDAPSource -fetchContactsMatching:match])
19966	([LDAPSource -lookupContactEntry:entryID])
19967	([LDAPSource -lookupContactEntryWithUIDorEmail:uid]):
19968	bind and unbind the connection on each request.
19969
19970	* UI/MailerUI/UIxMailAddressbook.m: removed obsolete module.
19971
19972	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
19973	-contactSearchAction]): simplified method to use the facilities
19974	provided by the LDAPUserManager. No longer takes care of the
19975	"ldap-only" url parameter since all requests are handled by the
19976	usermanager now.
19977
19978	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
19979	-primaryFetchProfile]): check that the value returned is not null
19980	before interpreting it.
19981
19982	* SoObjects/SOGo/LDAPUserManager.m ([LDAPUserManager
19983	-contactInfosForUserWithUIDorEmail:uid]): check that uid is not empty.
19984	([LDAPUserManager -_fillContactMailRecords:contact]): if the
19985	system email is already present, remove it before adding it.
19986
19987	* SoObjects/SOGo/LDAPSource.m ([LDAPSource
19988	-checkLogin:loginToCheckandPassword:passwordToCheck]): check that
19989	loginToCheck is not empty.
19990	([LDAPSource -fetchContactsMatching:match]): check that match is
19991	not empty.
19992	([LDAPSource -lookupContactEntry:entryID]): check that entryID is
19993	not empty.
19994	([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): check that
19995	uid is not empty.
19996
199972007-05-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
19998
19999	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -primaryEmail]): new name
20000	for "mail" method.
20001	([SOGoUser -systemEmail]): returns the email formed from the
20002	username and the default mail domain.
20003	([SOGoUser -hasEmail:email]): test whether the user has the
20004	specified email, in a case-insensitive way.
20005
20006	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
20007	-LDAPCheckLogin:_loginpassword:_pwd]): use the user manager to
20008	check login information.
20009
20010	* SoObjects/Contacts/SOGoContactLDAPFolder.m
20011	([SOGoContactLDAPFolder
20012	+contactFolderWithName:aNameandDisplayName:aDisplayNameinContainer:aContainer]):
20013	no longer manage LDAP connections. The requests are forwarded to
20014	the relevant LDAPSource instead.
20015
20016	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
20017	-appendSystemSources]): pass LDAPSource objects to
20018	SOGoContactLDAPFolder instances.
20019
20020	* SoObjects/Mailer/SOGoDraftObject.m: extract the raw email
20021	address of the "from" field before sending the message. Otherwise,
20022	sending the mail won't work.
20023
20024	* UI/MailerUI/UIxMailEditor.m ([UIxMailEditor -fromEMails]):
20025	rewrote this method to request all the available email identities
20026	for the current user. Also, the from field also contains the full
20027	name of the user, not just his/her email address.
20028
20029	* SoObjects/Appointments/SOGoCalendarComponent.m
20030	([SOGoCalendarComponent -iCalPersonWithUID:uid]): new method taken
20031	from the previous module iCalEntityObject+Agenor.
20032	([SOGoCalendarComponent -getUIDForICalPerson:person]): idem.
20033	([SOGoCalendarComponent -getUIDsForICalPersons:iCalPersons]):
20034	idem.
20035
20036	* SoObjects/Contacts/SOGoContactLDIFEntry.[hm]: new class module
20037	replacing the SOGoContactLDAPEntry module. It was renamed as such
20038	because it now receives a dictionary instead of an NGLdapEntry.
20039	It thus can now handle data from any source of LDIF data, not
20040	only coming from LDAP.
20041
20042	* SoObjects/SOGo/LDAPUserManager.[hm]: new class module
20043	implementing most of what used to be the AgenorUserManager class.
20044	The difference is that users are cached in the forme of
20045	dictionaries and many sources are used. Also, it can be used to
20046	search LDAP contacts.
20047
20048	* SoObjects/SOGo/LDAPSource.[hm]: new class module implementing
20049	the concept of "ldap source", to be used by all the classes
20050	needing access to LDAP-provided information: addressbooks and the
20051	user manager. Most the method thereing are transcriptions of
20052	methods previously found in SOGoContactLDAPFolder. It also contain
20053	utility methods for user matching and authentification.
20054
20055	* SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: removed
20056	module, rendered useless by code refactoring.
20057
20058	* SoObjects/SOGo/AgenorUserManager.[hm]: removed module, replaced
20059	with the freshly written "LDAPUserManager".
20060
200612007-05-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20062
20063	* SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: renamed to
20064	SOGOContactLDIFEntry.
20065
20066	* SoObjects/Contacts/NGLdapEntry+Contact.[hm]: removed class
20067	module, obsoleted by code in SOGo/LDAPSource.[hm].
20068
200692007-05-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20070
20071	* UI/Common/UIxAclEditor.m ([UIxAclEditor -currentUserIsOwner]):
20072	new method with an explicit name.
20073
200742007-05-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20075
20076	* SoObjects/Appointments/SOGoCalendarComponent.m
20077	([SOGoCalendarComponent -isOrganizerOrOwner:user]): new method
20078	replacing "isOrganizer:orOwner:" by taking only one instance of
20079	SOGoUser as parameter.
20080	([SOGoCalendarComponent -participant:user]): new method replacing
20081	the previous "isParticipant" boolean method by returning the first
20082	participant matching the user passed as parameter. This method is
20083	used so that both the regular email address and the "system email
20084	address" of the user are matched against the participants emails.
20085
20086	* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
20087	-getSystemEMailForUID:uid]): new method that returns the email
20088	formed with the user's uid and the default mail domain.
20089
20090	* SoObjects/Appointments/SOGoCalendarComponent.m
20091	([SOGoCalendarComponent -rolesOfUser:login]): removed method that
20092	was previously commented out.
20093
20094	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -systemEmail]): new method
20095	forwared to [AgenorUserManager getSystemEmailForUID:].
20096
20097	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20098	-toolbar]): method replacing the one with the same name in the
20099	task and appointment editor classes. This method makes also use of
20100	the new method "isOrganizerOrOwner:" and "participant:" in
20101	SOGoCalendarComponent.
20102
20103	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
20104	-toolbar]): removed method, replaced with a method with the same
20105	name in UIxComponentEditor.
20106
20107	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -toolbar]): removed
20108	method, replaced with a method with the same name in
20109	UIxComponentEditor.
20110
20111	* SoObjects/SOGo/AgenorUserDefaults.m ([AgenorUserDefaults
20112	-primaryFetchProfile]): the values returned from the database are
20113	converted to a put dictionary first, since the dictionary returned
20114	is actually an immutable one, which can cause a crash afterwards.
20115
201162007-04-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20117
20118	* SoObjects/SOGo/SOGoPermissions.m: added "SOGoRole_ObjectViewer"
20119	and "SOGoRole_ObjectEditor".
20120
20121	* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor
20122	-prepareRightsForm]): this method is no longer mandatory.
20123
20124	* UI/Contacts/UIxContactsUserRightsEditor.m
20125	([UIxContactsUserRightsEditor
20126	-setUserCanCreateObjects:userCanCreateObjects]): new subclass
20127	module to handle acls related to the address books. Partial
20128	implementation.
20129
20130	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
20131	-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): cache
20132	newly set roles.
20133	([SOGoFolder
20134	-removeAclsForUsers:usersforObjectAtPath:objectPathArray]): remove
20135	specified roles from cache.
20136	([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
20137	put resulting roles in cache.
20138
20139	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -init]): do not invoke
20140	initWithName:inContainer:. Instead, directly initialize the ivars
20141	as it is supposed to be to avoid an infinite loop whenever one of
20142	those two methods are overriden.
20143
20144	* SoObjects/SOGo/SOGoContentObject.m ([-rolesOfUser:login]):
20145	removed method.
20146
20147	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
20148	-aclsForUser:uid]): override method so that SOGo won't crash when
20149	loading the contact card.
20150
201512007-04-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20152
20153	* SoObjects/Appointments/SOGoAppointmentFolder.m
20154	([SOGoAppointmentFolder -_privacySqlString]): the string for the
20155	"freebusy" special user should only require opaque elements.
20156
201572007-04-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20158
20159	* SoObjects/Appointments/SOGoAppointmentFolder.m
20160	([SOGoAppointmentFolder -davResourceType]): fixed a problem with
20161	our double declaration where the resulting XML would be screwed.
20162	There is only one collection per namespace.
20163
20164	* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate
20165	rfc822DateString]): new method that returns a string conform to
20166	rfc 822 and suitable for email headers.
20167
20168	* SoObjects/Mailer/SOGoDraftObject.m: invoke the new
20169	"rfc822DateString" category method on the date we put in the
20170	header.
20171
201722007-04-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20173
20174	* UI/Common/UIxUserRightsEditor.m ([UIxUserRightsEditor -defaultAction])
20175	([UIxUserRightsEditor -saveUserRightsAction]): new action methods
20176	which should never be overriden.
20177	([UIxUserRightsEditor -appendRight:newRight])
20178	([UIxUserRightsEditor -removeRight:right])
20179	([UIxUserRightsEditor -appendExclusiveRight:newRightfromList:list])
20180	([UIxUserRightsEditor -removeAllRightsFromList:list]): new utility
20181	methods that can be used by the subclasses.
20182	([UIxUserRightsEditor -prepareRightsForm]): new method that should
20183	mandatorily be overriden to prepare the elements of the subclassed
20184	form.
20185	([UIxUserRightsEditor -updateRights]): new method that should
20186	mandatorily be overriden to update the user rights from the
20187	elements of the subclassed form.
20188
20189	* UI/Common/UIxAclEditor.m ([UIxAclEditor -_prepareUsers]): we
20190	check if the uid is already listed before adding it to our array.
20191	This is because the acl table can contain more than one record per
20192	user/object relationship.
20193
20194	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
20195	-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): the
20196	"roles" parameter is now an NSArray instead of a string. Therefore
20197	we loop throughout the array to populate the table. All the
20198	relevant records are removed prior to the addition of the new
20199	rights.
20200
20201	* SoObjects/Mailer/SOGoMailBaseObject.m ([SOGoMailBaseObject
20202	-aclsForUser:uid]): new override that returns nil until we add
20203	support for IMAP acls.
20204
20205	* SoObjects/Mailer/SOGoMailAccounts.m
20206	([SOGoMailAccounts -aclsForUser:uid]): same as below.
20207
20208	* SoObjects/Contacts/SOGoContactLDAPFolder.m
20209	([SOGoContactLDAPFolder -aclsForUser:uid]): same as below.
20210
20211	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
20212	-aclsForUser:uid]): override this method which will always return
20213	nil.
20214
20215	* SoObjects/SOGo/SOGoPermissions.[hm]: added
20216	[Public,Private,Confidential]
20217	x[Viewer,DAndTViewer,Responder,Modifier]. Renamed
20218	SOGoRole_ORganizer to SOGoCalendarRole_Organizer. Same for
20219	..._Participant. Removed SOGoRole_Assistant and SOGoRole_Delegate.
20220
20221	* SoObjects/Appointments/SOGoAppointmentFolder.m
20222	([SOGoAppointmentFolder -defaultAclRoles]): new overriden method
20223	that defines default roles for new elements in the acl.
20224
20225	* UI/Scheduler/UIxCalUserRightsEditor.[hm]: new component class
20226	module and subclass of UIxUserRightsEditor specific to the
20227	handling of user rights on calendar folders.
20228
202292007-04-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20230
20231	* SoObjects/Appointments/SOGoAppointmentFolder.m
20232	([SOGoAppointmentFolder -groupDavResourceType]): return both
20233	"vevent-collection" and "vtodo-collection".
20234
20235	* UI/Common/UIxUserRightsEditor.[hm]: new template class module
20236	that implements the detailed editor of user rights per-object.
20237
202382007-04-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20239
20240	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
20241	-rolesForObject:objectinContext:context]): no longer query objects
20242	for "roleForUser:". Instead, all objects should implement
20243	"rolesForUser:".
20244
20245	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject -acls]):
20246	new method to comply with the new acl "protocol" in SOGoObject.
20247	Uses SOGoFolder's new facilities for ACLS.
20248	([SOGoContentObject -aclsForUser:uid]): idem.
20249	([SOGoContentObject -setRoles:rolesforUser:uid]): idem.
20250	([SOGoContentObject -removeAclsForUsers:users]): idem.
20251
20252	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
20253	-aclsForObjectAtPath:objectPathArray]): new method generic to GCS
20254	based folders. This method is derived from the code that was in
20255	UIxAclFolder before its removal.
20256	([SOGoFolder -aclsForUser:uidforObjectAtPath:objectPathArray]):
20257	idem.
20258	([SOGoFolder
20259	-removeAclsForUsers:usersforObjectAtPath:objectPathArray]): idem.
20260	([SOGoFolder
20261	-setRoles:rolesforUser:uidforObjectAtPath:objectPathArray]): idem.
20262	([SOGoFolder -setRoleForUsers:uidsto:role])
20263	([SOGoFolder -setRoleForUsers:uidsto:role]): removed method.
20264
20265	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -acls]): stub method
20266	that requires overriding by subclasses.
20267	([SOGoObject -aclsForUser:uid]): idem.
20268	([SOGoObject -defaultAclRoles]): idem.
20269	([SOGoObject -setRoles:rolesforUser:uid]): idem.
20270	([SOGoObject -removeAclsForUsers:users]): idem.
20271
20272	* UI/Common/UIxObjectActions.m: new module implementing the web
20273	actions common to SOGoObject and all its subclasses.
20274	([UIxObjectActions -addUserInAclsAction]): new method that adds a
20275	user with the clientObject defaults user rights to the object's
20276	acl.
20277
20278	* UI/Common/UIxAclEditor.m: modified module so as to simplify it
20279	to the point where it will only list the users (and their name)
20280	associated with an object acl.
20281
20282	* SoObjects/SOGo/SOGoAclsFolder.m: removed module because its
20283	methods have been moved into SOGoObject and SOGoFolder during a
20284	refactoring.
20285
20286	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20287	-iCalParticipantsAndResourcesStringFromQueryParameters]): removed
20288	method made useless by the programmatic handling of iCalendar
20289	objects.
20290	([UIxComponentEditor -iCalParticipantsStringFromQueryParameters]): idem.
20291	([UIxComponentEditor -iCalResourcesStringFromQueryParameters]): idem.
20292	([UIxComponentEditor -iCalStringFromQueryParameter:_qpformat:_format]): idem.
20293
20294	* UI/WebServerResources/MailerUI.js (initDnd): enable drag and
20295	drop on all folder nodes, not just on leaves.
20296
20297	* SoObjects/Contacts/SOGoContactLDAPFolder.m
20298	([SOGoContactLDAPFolder
20299	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): request field "uid" when doing a search.
20300
203012007-04-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20302
20303	* Main/SOGo.m ([SOGo +initialize]): on GNUstep, trigger some
20304	debugging facilities when the SOGoDebugObjectAllocation user
20305	default is set.
20306
203072007-04-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20308
20309	* SoObjects/SOGo/NSString+Utilities.m ([NSString -boolValue]): new
20310	method that SOGo will need with non-gnustep Foundation
20311	implementation.
20312	([NSString -stringByAppendingPathComponent:component]): new method
20313	that SOGo will need when building with libFoundation. Method
20314	removed later since it is available from
20315	Foundation/NSPathUtilities.h.
20316
20317	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -timeZone]): method moved
20318	from SOGoObject.m.
20319
20320	* SoObjects/SOGo/SOGoObject.m: new ivar "context" that permits
20321	every subclass to access [WOApplication context] without having to
20322	invoke it more than once.
20323
20324	* SoObjects/Appointments/SOGoCalendarComponent.m
20325	([SOGoCalendarComponent -changeParticipationStatus:_status]):
20326	moved method from SOGoTaskObject and SOGoAppointmentObject up to
20327	their parent class.
20328
20329	* UI/Scheduler/UIxCalSelectTab.m: removed module.
20330
203312007-04-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20332
20333	* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
20334	-vCard]): test the prefix of the card in a case-independent way.
20335
20336	* OGoContentStore/OCSContactFieldExtractor.m
20337	([OCSContactFieldExtractor
20338	-extractQuickFieldsFromContent:content]): we no longer accept
20339	records in a format other than versit vCard so we can get rid of a
20340	lot of code.
20341
203422007-04-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20343
20344	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
20345	-selectorComponentClass]): restored method.
20346
203472007-04-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20348
20349	* UI/Scheduler/UIxCalTasksListView.m ([UIxCalTasksListView
20350	-shouldDisplayCurrentTask]): the current task is not displayed if
20351	it is NOT completed or if the "showCompletedTasks" flag is set.
20352	The logic was inverted in Lightning and is now in SOGo too.
20353
203542007-04-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20355
20356	* UI/Contacts/UIxContactView.m ([UIxContactView -workUrl]): we
20357	want the "work" url instead of the "home".
20358
20359	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
20360	-_saveSnapshot]): save url values from snapshot.
20361	([UIxContactEditor -initSnapshot]): load url values from snapshot.
20362
20363	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20364	-calendarList]): new method replacing "availableCalendars".
20365
20366	* UI/Scheduler/UIxCalendarSelector.m ([UIxCalendarSelector
20367	-calendarFolders]): we now take the list of subscribed calendar
20368	from the container.
20369
20370	* SoObjects/Appointments/SOGoAppointmentFolder.m
20371	([SOGoAppointmentFolder -calendarFoldersInContext:context]): new
20372	method derived from and replacing [UIxCalView calendarFolders].
20373
203742007-03-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20375
20376	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
20377	-toManyRelationshipKeys]): don't put the predefined folders in the
20378	list if they are returned by the server.
20379
20380	* UI/MailerUI/UIxMailTree.m ([UIxMailTree -flattenedNodes]): we no
20381	longer store the "flattenedBlocks" in a dictionary since the
20382	object will be deleted anyway and we don't need to put the folders
20383	in cache.
20384
20385	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
20386	([UIxMailPartHTMLViewer -_attachmentIds]): take the current
20387	attachment path into account when computing the part urls.
20388
203892007-03-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20390
20391	* UI/Contacts/UIxContactsListViewContainer.m
20392	([UIxContactsListViewContainer -additionalFolders]): take the list
20393	of subscribed folders from the new property list used for the user
20394	settings. The value of its key is SubscribedFolders for the
20395	dictionary entry named "Contacts".
20396
20397	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
20398	-canAccessContentAction]): new method to override the one from
20399	UIxFoldersActions by taking into account the fact that, this time,
20400	the clientObject is an ldap folder. Removed many method that used
20401	to be related to the handling of the user selector.
20402
20403	* UI/Scheduler/UIxCalDayView.m: commented out many unused methods
20404	to make sure they can be removed.
20405
20406	* UI/Scheduler/UIxCalView.m ([UIxCalView -_setupCalendarFolders]):
20407	populate the calendar entries based on the user settings plist.
20408
20409	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
20410	-selectForMailerAction]): restored method.
20411
20412	* UI/Scheduler/UIxCalendarSelector.m: new template module derived
20413	from a simplified version of the old UIxContactEditor (removed).
20414
20415	* UI/Contacts/UIxContactsUserFolders.m: new template module for
20416	selecting users or user folders through an LDAP search of which
20417	the results are displayed as a tree.
20418
20419	* UI/WebServerResources/UIxMailEditor.js: moved previous generic
20420	method "onContactAdd" here since the Mailer is now the only module
20421	to use it when composing emails.
20422
20423	* UI/WebServerResources/generic.js: added code for handling the
20424	new scheme used for describing SOGo folders, common code to handle
20425	folder addition or removal.
20426
20427	* UI/Common/UIxFolderActions.m ([UIxFolderActions
20428	-activateFolderAction]): new method that change the "active"
20429	settings in the folder-related fields in the user settings.
20430	([UIxFolderActions -deactivateFolderAction]): see above.
20431
20432	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
20433	-checkRightsAction]): removed method.
20434
20435	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
20436	-updateAdditionalAddressBooksAction]): removed method.
20437
20438	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
20439	-updateCalendarsAction]): removed method.
20440
204412007-03-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20442
20443	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
20444	-checkRightsAction]): removed method.
20445
20446	* UI/Common/UIxFolderActions.m ([UIxFolderActions
20447	-canAccessContentAction]): new method designed to replace
20448	[UIxCalMainView checkRightsAction] in a more universal way.
20449
204502007-03-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20451
20452	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
20453	-roleOfUser:uidinContext:context]): take all the subkeys into
20454	account, not only the "personal" folder.
20455
20456	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20457	-takeValuesFromRequest:_rqinContext:_ctx]): append a "uid" field
20458	to the new components.
20459
20460	* SoObjects/SOGo/SOGoUser.m ([SOGoUser -userSettings]): new method
20461	(see below).
20462
20463	* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
20464	-getUserDefaultsForUID:uid]): rewrote method to use the "defaults"
20465	field of the sogo_user_profile table, where the user-customizable
20466	changes will be saved.
20467	([AgenorUserManager -getUserSettingsForUID:uid]): new method
20468	similar to the one above, using the "settings" field where the
20469	automatic settings will be saved.
20470
20471	* SoObjects/SOGo/AgenorUserDefaults.m: rewrote a big part of the
20472	module to bind the userdefaults to a property list contained in a
20473	specified field of the sogo_user_profile table.
20474	([AgenorUserDefaults
20475	-initWithTableURL:tableURLuid:userIDfieldName:defaultsFieldName]):
20476	added a "fieldName" parameter.
20477
20478	* UI/Common/UIxFolderActions.m: new module implementing web
20479	actions common to all GCS-based folders.
20480
204812007-03-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20482
20483	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -labelForDay]):
20484	put a carriage return after the day name.
20485
20486	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
20487	-readFreeBusyAction]): restored method.
20488
204892007-03-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20490
20491	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
20492	-defaultAction]): remade module to redirect automatically to the
20493	Calendar url.
20494
20495	* SoObjects/Contacts/NSDictionary+Contact.m: removed module.
20496
204972007-03-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20498
20499	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
20500	-deleteAction]): new web method to delete personal addressbook
20501	folders.
20502
20503	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
20504	-delete]): override method to refuse the deletion of the folder if
20505	its nameInContainer is "personal".
20506
20507	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -delete]): new method
20508	that forwards the deletion request to the folder manager.
20509
205102007-03-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20511
20512	* UI/Scheduler/UIxAttendeesEditor.m ([UIxAttendeesEditor
20513	-zoomList]): new method that returns the list of available zoom factors.
20514
20515	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
20516	-changeStatusAction]): rewrote method.
20517
20518	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20519	-_handleAttendeesEdition]): make sure "attendeesNames" has a
20520	length > 0 before computing the attendees. Otherwise there will be
20521	an invalid empty entry.
20522	([UIxComponentEditor -_handleOrganizer]): new method that adds the
20523	organizer when there are attendees and remove it when the
20524	attendees are removed.
20525
205262007-03-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20527
20528	* UI/Scheduler/UIxAttendeesEditor.m): new component.
20529
20530	* UI/Scheduler/UIxComponentEditor.m: no longer a superclass for
20531	the task and appointment editors. Now a container component
20532	handling the common elements of tasks and events.
20533
20534	* UI/Scheduler/UIxTaskEditor.m: same as below.
20535
20536	* UI/Scheduler/UIxAppointmentEditor.m: rewrote template. No longer
20537	a subclass of UIxComponentEditor but a subcomponent of it.
20538
20539	* UI/Common/UIxToolbar.m ([UIxToolbar -toolbarConfig]): the
20540	toolbar can have the special value "none" to indicate there is
20541	none attached to the window.
20542
20543	* SoObjects/Appointments/SOGoCalendarComponent.m
20544	([SOGoCalendarComponent -isOrganizer:emailorOwner:login]): new
20545	method.
20546	([SOGoCalendarComponent -isParticipant:email]): new method.
20547	([SOGoCalendarComponent -calendar:create]): takes one parameter
20548	"create" which is a boolean indicating whether we want to create
20549	the calendar if it does not exist.
20550
205512007-03-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20552
20553	* UI/Scheduler/UIxCalMonthView.m: changed view to use divs instead
20554	of a table, the same way the dayly and weekly views have been for
20555	a few months now.
20556
205572007-02-09  Helge Hess  <helge.hess@opengroupware.org>
20558
20559	* SoObjects/Appointments/SOGoAppointmentFolder.m: added CalDAV
20560	resourcetype
20561
20562	* SoObjects/SOGo/SOGoUserFolder.m: added davCalendarHomeSet CalDAV
20563	property to point at the user folder
20564
205652007-03-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20566
20567	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
20568	-userInContext:]): returns "SOGoUser".
20569
20570	* SoObjects/Appointments/SOGoCalendarComponent.m
20571	([SOGoCalendarComponent -contentAsString]): overriden method that
20572	takes the privacy into account and discard the relevant fields if
20573	needed by generating a new content string and caching it.
20574	([SOGoCalendarComponent
20575	-saveContentString:contentStringbaseVersion:baseVersion]): if the
20576	new method above has cached a content string, release it and set
20577	it to nil so that it will have to be regenerated in the case it is
20578	requested further.
20579	([SOGoCalendarComponent -_filterPrivateComponent:component]):
20580	discard the fields that have to be hidden when the card is
20581	private.
20582
20583	* SoObjects/Appointments/SOGoAppointmentFolder.m
20584	([SOGoAppointmentFolder
20585	-appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]): make
20586	sure the cards are now handled as instances of
20587	SOGoCalendarComponent instead of SOGoContentObject so that their
20588	content string is taking the privacy classifiction into account.
20589	([SOGoAppointmentFolder -_privacySqlString]): new method that
20590	generates a query to determine what information can be given and
20591	if the card itself has to be shown.
20592
20593	* UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
20594	-getICalPersonsFromValue:selectorValue]): removed useless
20595	"isAccessRestricted" method.
20596
20597	* UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
20598	-setStyle:_style]): test whether the values of orgmail and
20599	partmails are null before manipulating them, otherwise SOGo sends
20600	a "rangeOfString:" message to an NSNull, which makes it crashes.
20601
20602	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
20603	-extractQuickFieldsFromEvent:_event]): we now use the new
20604	"symbolicAccessClass" method from iCalEntity to determine the
20605	value of the "classifiction" field.
20606	([OCSiCalFieldExtractor -extractQuickFieldsFromTodo:_task]): same
20607	as above.
20608
206092007-03-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20610
20611	* SoObjects/Appointments/SOGoAppointmentFolder.m
20612	([SOGoAppointmentFolder
20613	-fetchCoreInfosFrom:_startDateto:_endDatecomponent:_component]):
20614	see below, the query is adapted consequently.
20615
20616	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
20617	-extractQuickFieldsFromTodo:_task]): the field "ispublic" was
20618	renamed to "classification" and can any integer as value.
20619	([OCSiCalFieldExtractor -extractQuickFieldsFromEvent:_event]):
20620	idem.
20621
206222007-02-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20623
20624	* UI/MailPartViewers/UIxMailPartHTMLViewer.m
20625	([_UIxHTMLMailContentHandler -_appendStyle:_charslength:_len]):
20626	don't prepend anything to the class and id named. Instead, we
20627	make each style embedded in the ".SOGoHTMLMail-CSS-Delimiter"
20628	class.
20629
206302007-02-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20631
20632	* SoObjects/SOGo/SOGoContentObject.m ([SOGoContentObject
20633	-rolesOfUser:logininContext:context]): if object does not exists
20634	(for example when it's being created), the current user has the
20635	same rights on it than he/she has on its parent container.
20636
20637	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder
20638	-nameExistsInFolder:objectName]): methods that tests if a c_name
20639	corresponding to the name passed as parameter is present in the db
20640	folder.
20641
206422007-02-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20643
20644	* SoObjects/SOGo/SOGoUser.m ([SOGoUser
20645	-rolesForObject:objectinContext:context]): test for
20646	"rolesOfUser:inContext:" in addition to "roleOfUser:...".
20647
20648	* SoObjects/Appointments/SOGoCalendarComponent.m
20649	([SOGoCalendarComponent -rolesOfUser:logininContext:context]):
20650	returns the roles of the user on the container object if the event
20651	is uncreated.
20652
206532007-02-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20654
20655	* UI/MailPartViewers/UIxMailRenderingContext.m: returns the
20656	alternativeViewer a multipart/related message is being handled.
20657
20658	* UI/MailPartViewers/UIxMailPartHTMLViewer.m: reimplemented module
20659	from scratch.
20660
20661	* UI/MailPartViewers/UIxMailPartAlternativeViewer.m: select the
20662	text/html component before text/plain.
20663
20664	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
20665	-addRequiredKeysOfStructure:path:toArray:recurse:]): accepts the
20666	fetching of HTML parts.
20667
20668	* SoObjects/Appointments/SOGoCalendarComponent.m
20669	([SOGoCalendarComponent -componentTag]): new template method that
20670	returns the vcalendar tag of the current object.
20671	([SOGoCalendarComponent -component]): new method that returns the
20672	first object matching [self componentTag] within the current
20673	calendar object. This method replaces 'firstEventInCalendar:' as
20674	well as "firstTaskInCalendar:".
20675	([SOGoCalendarComponent -roleOfUser:logininContext:context]):
20676	moved method from SOGoAppointmentObject.m.
20677
206782007-02-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20679
20680	* UI/Scheduler/UIxCalMulticolumnDayView.[hm]: new daily view
20681	module which shows each selected user's calendar in a different
20682	column instead of mixing their events together.
20683
20684	* UI/Scheduler/UIxCalView.m ([UIxCalView -redirectForUIDsAction]):
20685	replaced use of [NSString stringByTrimmingWhiteSpaces] with
20686	[NSString stringByTrimmingSpaces].
20687
20688	* UI/MailPartViewers/UIxMailPartICalViewer.m: request the key
20689	"cnWithoutQuotes" instead of "cnForDisplay", which no longer
20690	exists.
20691
20692	* UI/Scheduler/UIxCalDayOverview.m,
20693	UI/Scheduler/UIxCalDayChartview.m,
20694	UI/Scheduler/UIxCalDayListview.m,
20695	UI/Scheduler/UIxCalWeekOverview.m,
20696	UI/Scheduler/UIxCalWeekChartview.m,
20697	UI/Scheduler/UIxCalWeekListview.m,
20698	UI/Scheduler/UIxCalInlineMonthOverview.m,
20699	UI/Scheduler/UIxCalYearOverview.m: removed unused modules.
20700
207012007-02-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20702
20703	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
20704	-appendPersonalSourcesInContext:context]): release connectoin
20705	channel when everything is done.
20706
20707	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
20708	-newAbAction]): new action method to crate a new contact folder
20709	from the web UI.
20710
20711	* SoObjects/SOGo/SOGoFolder.m ([SOGoFolder -create]): new method
20712	that requests the folder manager to create a folder table with the
20713	specified type at the specified path. The type is taken from [self
20714	folderType].
20715
20716	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
20717	-folderType]): implemented.
20718
20719	* SoObjects/Appointments/SOGoAppointmentFolder.m
20720	([SOGoAppointmentFolder -folderType]): implemented.
20721
20722	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
20723	-appendPersonalSourcesInContext:context]): we now fetch all
20724	folders with type "Contact" that belong to the current user.
20725	([SOGoContactFolders -newFolderWithName:name]): new method to
20726	create a new contact folder.
20727
20728	* UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]): treat
20729	resulting url with [NSString+Utilities hostlessURL] instead of
20730	using NSURL. This is because the url in question sometimes has a
20731	hostname and sometimes not. "hostlessURL" ensure the hostname is
20732	removed anyway.
20733	([UIxComponent -applicationPath]): same as above.
20734
207352007-02-08  Ludovic Marcotte  <ludovic@inverse.ca>
20736
20737	* SoObjects/Mailer/SOGoMailFolder.m: priorize the lookup of
20738	folders before doing the one on messages.
20739
207402007-02-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20741
20742	* SoObjects/SOGo/NSArray+Utilities.m: added an implementation of
20743	makeObjectsPerform:withObject:withObject: for GNUstep
20744	compatibility.
20745
20746	* OGoContentStore/GNUmakefile, Protocols/common.make,
20747	SoObjects/common.make, UI/common.make: install in
20748	GNUSTEP_INSTALLATION_DIR instead of GNUSTEP_USER_DIR.
20749
207502007-02-07  Ludovic Marcotte  <ludovic@inverse.ca>
20751
20752	* UI/Scheduler/English.lproj/Localizable.strings: fixed typo for
20753	"Agendas"
20754
207552007-02-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20756
20757	* UI/MailerUI/UIxMailTree.m ([UIxMailTree
20758	-getTitle:folderType:andIcon:forObject:]): disabled Sieve folders
20759	for the moment.
20760
20761	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
20762	-checkLogin:_loginpassword:_pwd]): fixed a bug where a wrong
20763	password would be accepted anyway as long as its length was > 0.
20764	This can be the case ONLY when LDAP is disabled otherwise we have
20765	a serious security issue...
20766
20767	* SoObjects/Appointments/SOGoAppointmentObject.m
20768	([SOGoAppointmentObject -roleOfUser:logininContext:context]): if a
20769	user is not an organizer nor a participant, he is declared as
20770	"Owner" if he owns the calendar the entry where the entry is
20771	contained. Other cases should not be possible.
20772
207732007-02-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20774
20775	* UI/Contacts/UIxContactEditor.m: display and handle the new
20776	Freebusy URL entry.
20777
20778	* SoObjects/Contacts/SOGoContactLDAPFolder.m
20779	([SOGoContactLDAPFolder -_searchAttributes]): retrieve "calFBURL"
20780	from the server.
20781
20782	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
20783	-vCard]): put the LDAP "calFBURL" field in the vCard's "FBURL"
20784	entry.
20785
207862007-01-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20787
20788	* SoObjects/Appointments/SOGoCalendarComponent.m
20789	([SOGoCalendarComponent -sendEMailNotifications]): new method that
20790	returns the value of ud "SOGoAppointmentSendEMailNotifications"
20791	(iMIP/iTIP).
20792	([SOGoCalendarComponent
20793	-sendEMailUsingTemplateNamed:_pageNameforOldObject:_oldObjectandNewObject:_newObjecttoAttendees:_attendees]): method moved from SOGoAppointmentObject/SOGoTaskObject, replacing occurences of "appointment" to "object" in its name.
20794
207952007-01-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20796
20797	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
20798	-defaultAction]): invoke "flushMailCaches" on [self clientObject]
20799	so that the mailbox cache is refreshed everytime the user presses
20800	on "get mail". I doubt a mailbox cache really is useful in general
20801	anyway.
20802
208032007-01-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20804
20805	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
20806	-userInContext:]): if the lookup is on "freebusy.ifb" and the
20807	username is "anonymous" the user is automatically set to
20808	"freebusy".
20809
208102007-01-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20811
20812	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
20813	-checkLogin:_loginpassword:_pwd]): authorize special "freebusy"
20814	user with password "freebusy".
20815
20816	* SoObjects/Appointments/SOGoFreeBusyObject.m ([SOGoFreeBusyObject
20817	-contentAsString]): the default timerange is now 14 days before
20818	currentday and 1 month after.
20819
208202007-01-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20821
20822	* SoObjects/Appointments/SOGoAppointmentFolder.m
20823	([SOGoAppointmentFolder
20824	-appendObject:objectwithBaseURL:baseURLtoREPORTResponse:r]):
20825	escape the record string in a way suitable with XML encoding.
20826
208272007-01-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20828
20829	* UI/WebServerResources/SchedulerUI.js: fixed a bug where the
20830	calendar view would not be updated properly.
20831
208322007-01-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20833
20834	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
20835	-newStartDate]): fix the handling of the component start date
20836	depending on the "hm" and the "day" parameters.
20837
20838	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
20839	-roleOfUser:uidinContext:context]): set role of current user to
20840	"Assistant" if the object that is accessed is "freebusy.ifb".
20841
20842	* SoObjects/Appointments/SOGoAppointmentFolder.m
20843	([SOGoAppointmentFolder -lookupCalendarFolderForUID:uid]): method
20844	moved from UI/Scheduler/UIxCalView:calendarFolderForUID:.
20845	([SOGoAppointmentFolder
20846	-lookupCalendarFoldersForUIDs:_uidsinContext:]): now use the new
20847	lookupCalendarFolderForUID: method, which doesn't do security
20848	checks.
20849
208502007-01-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20851
20852	* UI/Common/UIxAclEditor.m ([UIxAclEditor -assistantsValue]): new
20853	accessor that returns the comma-separated list of users with role
20854	"Assistant".
20855	([UIxAclEditor -delegatesValue]): same as above for "Delegate".
20856	([UIxAclEditor -_prepareUsers]): there is no longer a concept of
20857	"checkedUsers". Instead, each user is either classified in the
20858	list of assistants or the list of delegates.
20859
208602006-12-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20861
20862	* UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame
20863	-composeAction]): method imported from removed container modules.
20864	([UIxMailMainFrame -mailFolderName]): method imported from removed
20865	container modules.
20866
20867	* UI/MailerUI/UIxMailPopupView.m: a new special popup component
20868	for wrapping UIxMailView with the "popupview" action.
20869
20870	* UI/MailerUI/UIxMailAccountView.m: renamed to UIxMailSplashView,
20871	since its the component that displays the same splash screen than
20872	the one in Thunderbird/Icedove.
20873
20874	* UI/MailerUI/UIxMailAccountViewContainer.[hm],
20875	UI/MailerUI/UI/MailerUI/UIxMailAccountsView.m,
20876	UI/MailerUI/UIxMailListViewContainer.[hm],
20877	UI/MailerUI/UIxMailViewContainer.[hm]: removed
20878
208792006-12-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20880
20881	* UI/WebServerResources/HTMLElement.js: replaced the functional
20882	selectNode() and deselectNode() functions with select() and
20883	deselect() methods of HTMLElement.
20884
20885	* UI/WebServerResources/ContactsUI.js: cleanup, most of the
20886	events are initialized from here now instead of in the HTML code.
20887
20888	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
20889	-checkRightsAction]): new method similar to the one with the same
20890	name in UIxCalMainView.m.
20891
20892	* UI/Common/UIxAclEditor.m ([UIxAclEditor -saveAclsAction]): added
20893	code to handle the publishing of freebusy information.
20894
208952006-12-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20896
20897	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
20898	-checkRightsAction]): new action method that returns a
20899	comma-separated list of boolean values matching the right of the
20900	current user to "view" (as a permission) each foreign calendar
20901	stored in his preferences.
20902
20903	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -setOwner:newOwner]):
20904	new method that sets a customOwner, which can be returned with
20905	ownerInContext it set.
20906
20907	* SoObjects/Appointments/SOGoAppointmentFolder.m
20908	([SOGoAppointmentFolder
20909	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): no longer set the owner of elements here.
20910
209112006-12-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20912
20913	* SoObjects/SOGo/SOGoUserFolder.m: same as for SOGoContactFolders
20914	below, but for the Contacts and Calendar collections.
20915
20916	* SoObjects/SOGo/SOGoAclsFolder.m: convert the class to user the
20917	new acl facilities method from sope-gdl/GCSFolder.m.
20918
20919	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
20920	-roleOfUser:uidinContext:context]): new method that returns
20921	SOGoRole_Assistant when the user is an assistant or a delegate on
20922	the "personal" ab object. This is so that setting roles on the
20923	SOGoContactFolders object is not required.
20924
209252006-12-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20926
20927	* Main/SOGo.m: declare "Freebusy" permissions for the top objects.
20928
20929	* UI/Contacts/UIxContactsAclsSelection.m: new component specific
20930	to the handling of the user selection for the acls.
20931
20932	* SoObjects/SOGo/SOGoPermissions.[hm]: new module that extends the
20933	values from SoPermissions with ones specific to SOGo.
20934
20935	* SoObjects/SOGo/SOGoAclsFolder.[hm]: new class module that
20936	handles the storage for the acls.
20937
20938	* SoObjects/Appointments/SOGoCalendarComponent.[hm]: new parent
20939	class for SOGoAppointmentObject and SOGoTaskObject.
20940
20941	* UI/Common/UIxAclEditor.[hm]: new component that provides a
20942	general editor for folder acls.
20943
20944	* SoObjects/SOGo/NSString+Utilities.[hm]: old "NSString+URL"
20945	renamed.
20946	([NSString -davMethodToObjC]): method that returns the method name
20947	for a DAV property implementation.
20948
20949	* SoObjects/SOGo/NSArray+Utilities.m: new extension module to
20950	NSArray.
20951	([NSArray -stringsWithFormat:format]): new method that returns
20952	formatted occurences of the strings stored in the array.
20953
20954	* SoObjects/SOGo/SOGoDAVRendererTypes.m ([SOGoDAVSet
20955	+davSetWithArray:newValuesofValuesTaggedAs:newValueTag]): a new
20956	subclass module of SoWebDAVValue that supports collections of
20957	properties of the same type.
20958
209592006-11-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20960
20961	* SoObjects/Mailer/SOGoMailAccount.m ([SOGoMailAccount
20962	-lookupFolder:ofClassNamed:inContext:]): added the ability to
20963	configure the name of the SOGoDraftFolders with the ud var
20964	"SOGoDraftsFolderName".
20965
209662006-11-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20967
20968	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
20969	-userTimeZone:username]): new method that returns the timezone for
20970	the specified user depending on his preferences and the server
20971	defaults
20972
20973	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
20974	-stringForData:partInfo:]): take the encoding into account and
20975	translate the text to "normal" before processing the charset data.
20976
209772006-11-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
20978
20979	* UI/WebServerResources/generic.js: the progress indicator is on
20980	when loading the page so we turn it off, and we turn it back on
20981	whenever we switch to another module...
20982
20983	* UI/WebServerResources/SchedulerUI.js: make sure the day view
20984	synchronization mechanism works everywhere.
20985
20986	* UI/WebServerResources/generic.js: the log window is not only
20987	visible when UIxDebugEnabled is set.
20988
20989	* UI/WebServerResources/SchedulerUI.js: the month overview's day
20990	cells are now initialized with the DOM event interface methods
20991	instead of with html attributes.
20992
20993	* UI/Templates/MailerUI/UIxMailView.wox: don't display useless
20994	headers (should be made configurable at some point)...
20995
20996	* OGoContentStore/sql/generate-folderinfo-sql-for-users.sh: drop
20997	"not null" constraint on startdate, enddate, isopaque,
20998	participants and partmails.
20999
210002006-11-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21001
21002	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
21003	-hoursToDisplay]): prevent a crash by retaining the
21004	"hoursToDisplay" array after it's created.
21005	([UIxCalDayTable -clickableHourCellClass]): new method for the new
21006	clickable hours DIV.
21007
21008	* UI/WebServerResources/SchedulerUI.js: made the event
21009	participation status modification asynchronous, which also fixes a
21010	bug where the window would sometimes close before the accept or
21011	decline action was completed. Also, adapted the event handling
21012	related to the days or weeks view with the new DIV-based layout.
21013
21014	* UI/Scheduler/UIxCalInlineAptView.m: same as the first below...
21015
21016	* UI/Scheduler/UIxCalDayTable.m: enhanced to provide the new
21017	DIV-based presentation of the days and weeks.
21018
21019	* SoObjects/Appointments/SOGoTaskObject.m: same as below...
21020
21021	* SoObjects/Appointments/SOGoAppointmentObject.m: lookupName:...
21022	might return an exception so we have to handle it if we don't
21023	wanna crash...
21024
210252006-11-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21026
21027	* UI/WebServerResources/SchedulerUI.js: updated the list
21028	initialization code to use the new event management scheme, adding
21029	what was missing to be able to delete events and tasks again.
21030
21031	* UI/WebServerResources/MailerUI.js: added code to activate the
21032	"Get mails" button. Fixed a bug which prevented messages to be
21033	deleted.
21034
21035	* UI/WebServerResources/UIxFreeBusyUserSelector.js: handle tab
21036	navigation and focus handling of INPUTs.
21037
210382006-11-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21039
21040	* UI/WebServerResources/MailerUI.js: added code to handle the
21041	possible drag and drop events to manager in the mail module.
21042	Moving messages, opening parent folders, ...
21043
21044	* UI/WebServerResources/SOGoDragAndDrop.js: new file containing
21045	the drag and drop manager as well as the interface to HTMLElement
21046	to trigger drag and drop events.
21047
21048	* UI/MailerUI/UIxMailView.m ([UIxMailView -moveAction]): new
21049	action to move the current message to the mailbox named after the
21050	value of parameter "tofolder".
21051
21052	* SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject
21053	-moveToFolderNamed:folderNameinContext:]): new method base on
21054	-trashInContext:.
21055
210562006-11-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21057
21058	* UI/WebServerResources/generic.js: added and activated many
21059	"load" handlers to configure generic widgets used across the
21060	modules. More events are now handled in a DOM-fashion way instead
21061	of by setting the relative attributes in the templates.
21062
21063	* UI/Templates/UIxSortableTableHeader.wox: all the events are
21064	declared from the javascript DOM onload handlers.
21065
21066	* UI/Templates/UIxPageFrame.wox: load the new SOGoDragHandles.js
21067	library.
21068
21069	* UI/Templates/MailerUI/UIxMailListView.wox: all the events are
21070	declared from the javascript DOM onload handlers.
21071
21072	* UI/MailerUI/UIxMailListView.m: removed all the JS methods since
21073	we want everything to be separated from each other, as much as
21074	possible.
21075
21076	* UI/WebServerResources/SOGoDragHandles.js: new module containing
21077	the "SOGoDragHandlesInterface", implementing methods that can be
21078	attributed to DIV so that they can be used as drag handles.
21079
21080	* SoObjects/Mailer/SOGoDraftObject.m ([NSString
21081	-asQPSubjectString]): initialize the tmp strings with '0' to make
21082	sure they don't contain garbage.
21083
210842006-11-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21085
21086	* UI/WebServerResources/MailerUI.js: register the messageList
21087	table as a dragging source and the leaf of the navigation tree as
21088	dnd destinations to the DNDManager.
21089
21090	* UI/WebServerResources/generic.js: initialize tabs from the
21091	"unload" event listener that is added programmatically instead of
21092	from the template... Also, added the new DNDManager object.
21093
21094	* UI/WebServerResources/HTMLTableElement.js: added code to
21095	simulate XUL drag n drop events. This code will possibly be moved
21096	to HTMLElement.js instead later...
21097
21098	* SoObjects/Contacts/SOGoContactLDAPFolder.m
21099	([SOGoContactLDAPFolder -_qualifierForFilter:filter]): same as
21100	below.
21101
21102	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
21103	-_qualifierForFilter:filter]): only search records which starts
21104	with the specified pattern.
21105
211062006-11-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21107
21108	* SoObjects/Mailer/SOGoDraftObject.m ([NSString
21109	-asQPSubjectString]): new method that returns the special QP
21110	string with its qp declaration for email subjects.
21111	([SOGoDraftObject -bodyPartForText])
21112	([SOGoDraftObject -mimeMessageForContentWithHeaderMap:]): don't
21113	double-encode data in UTF-8.
21114
21115	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
21116	-newStartDate]): new method to determine the start date depending
21117	on the URL parameters, the current day and the current time.
21118	([UIxComponentEditor -toolbar]): new method to determine the
21119	filename of the toolbar that should be drawn depending on the
21120	ownership and the list of attendees of the task/event wrt to the
21121	current user...
21122
21123	* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
21124	-setDayStartHour:aStartHour]): adjust the minutes to the next
21125	quarter of hour, if not already set to a quarter.
21126
21127	* UI/WebServerResources/UIxAppointmentEditor.js,
21128	UI/WebServerResources/UIxTaskEditor.js: added code to manage start
21129	date change.
21130
211312006-11-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21132
21133	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
21134	-loadValuesFromComponent:component]): handles access class
21135	(privacy) and status.
21136
21137	* UI/Contacts/UIxContactsListViewContainer.m
21138	([UIxContactsListViewContainer -additionalFolders]): return nil if
21139	[self additionalAddressBooks] returns an empty string.
21140
211412006-11-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21142
21143	* UI/Scheduler/UIxCalMonthView.m ([UIxCalMonthView
21144	rangesOf7Days]): enhanced and debugged algorithm to feed the array
21145	with slices where the first day is still in the requested month.
21146
21147	* UI/Templates/UIxPageFrame.wox: the logConsole is created only on
21148	non-popup pages.
21149
21150	* UI/SOGoUI/SOGoAptFormatter.m: added code to handle the display
21151	of events in the day boxes of the calendar's monthly view.
21152
21153	* SoObjects/Appointments/SOGoTaskObject.m ([SOGoTaskObject
21154	-davContentType]): declare "text/calendar".
21155
21156	* SoObjects/Appointments/SOGoAppointmentObject.m
21157	([SOGoAppointmentObject -davContentType]): declare
21158	"text/calendar".
21159
21160	* SoObjects/Appointments/SOGoAppointmentFolder.m
21161	([SOGoAppointmentFolder -lookupName:inContext:acquire:]): certain
21162	HTTP methods are handled by SOPE and requires nil to be returned,
21163	this method now invokes the new
21164	"requestNamedIsHandledLater:inContext:" method to check that.
21165	([SOGoAppointmentFolder
21166	-requestNamedIsHandledLater:nameinContext:context]): new methods
21167	that returns "YES" only for the "OPTIONS" http method (for now...).
21168	([SOGoAppointmentFolder -davComplianceClassesInContext:]):
21169	overloaded method to append the "access-control" and
21170	"calendar-access" DAV abilities to the initial declaration.
21171
21172	* UI/Scheduler/UIxCalMonthView.[hm]: rewritten module entirely to
21173	imitate the look of Sunbird/Lightning's monthly view.
21174
21175	* UI/Scheduler/UIxCalMonthView.[hm]: renamed to
21176	UIxCalMonthViewOld.[hm].
21177
211782006-11-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21179
21180	* UI/Scheduler/UIxFreeBusyUserSelectorTable.m
21181	([UIxFreeBusyUserSelectorTable -currentContactHasStatus]): new
21182	method.
21183	([UIxFreeBusyUserSelectorTable -currentContactStatusImage]):
21184	returns an image name based on the participation status of the
21185	current attendee.
21186
21187	* UI/WebServerResources/SchedulerUI.js: same strip down as for
21188	generic.js below.
21189
21190	* UI/Contacts/UIxContactsListViewContainer.m ([UIxContactsListViewContainer -additionalAddressBooks])
21191	([UIxContactsListViewContainer -additionalFolders])
21192	([UIxContactsListViewContainer -setCurrentAdditionalFolder:newCurrentAdditionalFolder])
21193	([UIxContactsListViewContainer -currentAdditionalFolder]): new
21194	methods to handle the external addressbooks a user has subscribed
21195	too, by retriving them from his preferences.
21196
21197	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
21198	-updateAdditionalAddressBooksAction]): new method that updates the
21199	user settings with the list of addressbook he has subscribed to.
21200
21201	* UI/Contacts/UIxContactsAddressBooksSelection.m: new component
21202	module for the address book selector.
21203
21204	* UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
21205	a toolbar with two buttons ("add" and "remove") to manage the
21206	additional addressbooks a user might subscribe to.
21207
21208	* UI/WebServerResources/ContactsUI.js: added code to handle
21209	"external addressbooks" from the Javascript point-of-view, by
21210	extending existing methods and adding code for the "add ab" and
21211	"remove ab" buttons.
21212
21213	* UI/WebServerResources/generic.js: moved extensions methods to
21214	DOM elements to separate files for better clarity.
21215
21216	* UI/Common/UIxPageFrame.m ([UIxPageFrame -pageContentClasses]):
21217	new method that returns "pageContent" as class, but also "popup"
21218	for the DIV where the page content lies, so that we can manipulate
21219	the content of popup's with CSS identifiers.
21220
212212006-10-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21222
21223	* UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
21224	-displayStyle]): new method that returns a string containing the
21225	css style relative to the current appointment cell. This code is
21226	currently inactive but might be reused later.
21227
21228	* UI/WebServerResources/SchedulerUI.js: added code to handle the
21229	display of the selected day (the day pointed by the mouse, or the
21230	current day when changing the view).
21231
21232	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable
21233	-dayCellClasses]): new method that returns a string containing the
21234	css classes applicable to the current cell, depending on the
21235	position of the day in the week, the day of today and the
21236	requested day.
21237
21238	* UI/Scheduler/UIxCalCalendarsListView.m ([UIxCalCalendarsListView
21239	-currentContactAptBorder]): new method that returns the
21240	appropriate border color for the specified user.
21241
21242	* SoObjects/Appointments/SOGoAppointmentObject.m
21243	([SOGoAppointmentObject
21244	-saveContentString:contentStringbaseVersion:baseVersion]):
21245	overloaded method that parse new events and detects if they have
21246	an organizer or not. If they are new and have no organizer set
21247	(Sunbird/Lightning...), the owner of the event is set as
21248	organizer.
21249
21250	* SoObjects/Appointments/iCalEntityObject+Agenor.[hm]: new
21251	category that provides facility methods and interfaces to the
21252	AgenorUserManager.
21253
21254	* SoObjects/Contacts/product.plist: give full access to ANY
21255	authenticated user, not just the owner (to every objects...).
21256
212572006-10-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21258
21259	* UI/WebServerResources/UIxFreeBusyUserSelector.js: make sure
21260	every replica widgets are declared as such to their master
21261	counterpart. Take the days into account when displaying the time
21262	range taken by the appointment.
21263
21264	* UI/Scheduler/UIxComponent+Agenor.m ([UIxComponent
21265	-getICalPersonsFromValue:selectorValue]): method taken from
21266	UIxFreeBusyUserSelector, that is shared both by
21267	UIxFreeBusyUserSelector and UIxFreeBusyUserSelectorTable.
21268
21269	* SoObjects/Appointments/SOGoAppointmentFolder.m
21270	([SOGoAppointmentFolder
21271	-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.
21272
21273	* UI/Scheduler/UIxFreeBusyUserSelectorTable.[hm]: new subcomponent
21274	derived and taken as a subset of UIxFreeBusyUserSelector that
21275	implements the table part of the FreeBusy view. Most of the
21276	methods of UIxFreeBusyUserSelector relative to that table were
21277	moved into UIxFreeBusyUserSelectorTable, which can also be used as
21278	a standalone view for AJAX operations.
21279
212802006-10-27  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21281
21282	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21283	-vCard]): change reverted.
21284
21285	* UI/Contacts/UIxContactEditor.m: check whether the client contact
21286	folder has selector "globallyUniqueObjectId" before calling that
21287	method.
21288
21289	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21290	-vCard]): the "setVClass" NGVCard method really is "setClass"
21291	instead.
21292
21293	* SoObjects/Contacts/SOGoContactLDAPFolder.m
21294	([SOGoContactLDAPFolder -_searchAttributes]): fixed typo to
21295	request the "streetAddress" instead of the "streetaddress".
21296	([SOGoContactLDAPFolder -_qualifierForFilter:filter]): lookup
21297	mails that *contain*, and not just *start with* the search
21298	pattern.
21299
21300	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21301	-vCard]): mark address returned from LDAP as the work address.
21302
21303	* UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: made the whole
21304	span covered with the anchor, not only the textual information
21305	within.
21306
21307	* UI/Templates/SchedulerUI/UIxCalMainView.wox: specify the type
21308	argument (event or task) to newEvent in the appointmentListMenu.
21309	Make the appointmentsListView display the appointmentsListMenu.
21310
21311	* UI/SOGoUI/SOGoAptFormatter.m: enlarge the text size limit from
21312	12 to 50 before displaying "...".
21313	([SOGoAptFormatter -fullDetailsForApt::]): display location only
21314	if its length > 0, whether location itself is nil or not...
21315	([SOGoAptFormatter -tooltipForApt::_refDate]): display information
21316	of which the length > 0.
21317
213182006-10-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21319
21320	* UI/WebServerResources/UIxAppointmentEditor.js: correctly handles
21321	french and ISO dates.
21322
21323	* UI/Scheduler/UIxFreeBusyUserSelector.[hm]: added code an ivars
21324	from UIxContactSelector to handle contact lists (current and
21325	additional contacts).
21326
21327	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
21328	-_freeBusyAsText]): added handling of an "additional"-named query
21329	parameter that describe the number of additional days after
21330	enddate that should be returned.
21331
21332	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
21333	-_responseForResults:results]): give priority to results with
21334	"c_uid" fields. If none returned, use the first contact received.
21335
21336	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
21337	-extractQuickFieldsFromEvent:_event]): changed "TENTATIVE" code to
21338	2 and "CANCELLED" to 0.
21339
213402006-10-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21341
21342	* UI/WebServerResources/UIxAppointmentEditor.js: handle conversion
21343	of start and end dates to short string dates.
21344
21345	* UI/MainUI/SOGoUserHomePage.m ([SOGoUserHomePage
21346	-readFreeBusyAction]): new method that returns an array of numbers
21347	corresponding to the state in the freebusy of each "quarter of an
21348	hour" between the "sday" and "eday" date parameters passed in the
21349	url. This permits to handle the display of the freebusy with Ajax
21350	mechanisms.
21351	([SOGoUserHomePage -_freeBusyAsText]): add 2 days to the end date
21352	since the free busy displays 2 days ahead.
21353
21354	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
21355	-contactSearchAction]): new action that returns the uid and the
21356	username + email of the user whose name contain the value of the
21357	"search" url parameter.
21358
21359	* SoObjects/Appointments/SOGoAppointmentFolder.m
21360	([SOGoAppointmentFolder
21361	-fetchFreebusyInfosFrom:_startDateto:_endDate]): added fields
21362	useful for the computing of the status of the freebusy.
21363
21364	* UI/Scheduler/UIxFreeBusyUserSelector.m ([UIxFreeBusyUserSelector
21365	-init]): new component that incarnates a user selector for events
21366	inspired by the new one found in Thunderbird Lightning.
21367
213682006-10-23  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21369
21370	* UI/WebServerResources/generic.js: added code to enable or
21371	disable anchor visually (following our internal algorithm).
21372
21373	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor -init]):
21374	added new "url" ivar with its classic accessors.
21375	([UIxComponentEditor -urlButtonClasses]): new method that returns
21376	the class strings for the url button on the appointment/task
21377	editor (depending on the validity of the url).
21378
21379	* UI/Templates/SchedulerUI/UIxTaskEditor.wox,
21380	UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: start rewriting
21381	the template to match the Lightning's new task/appointment editor.
21382
21383	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor -saveValuesIntoAppointment:_appointment]): initialize url from the components'url.
21384
21385	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveValuesIntoTask:_task]): initialize url from the components'url.
21386
213872006-10-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21388
21389	* SoObjects/Contacts/SOGoContactLDAPFolder.m
21390	([SOGoContactLDAPFolder
21391	-lookupContactsWithFilter:filtersortBy:sortKeyordering:sortOrdering]): perform the searchs on objects which start with instead of contain the lookup key.
21392
21393	* SoObjects/Appointments/SOGoAptMailNotification.[hm]: work on
21394	iCalEntityObject instances instead of just iCalEvent's.
21395
21396	* SoObjects/Appointments/SOGoAppointmentFolder.m
21397	([SOGoAppointmentFolder
21398	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): set ownership of returned records by adding an "owner" key to the resulting dictionaries.
21399
21400	* SoObjects/SOGo/NSObject+Owner.[hm]: removed module since it's a
21401	bad way of handling ownership that way.
21402
21403	* SoObjects/Contacts/SOGoContactLDAPFolder.m
21404	([SOGoContactLDAPFolder -_qualifierForFilter:filter]): search also
21405	on "cn", just like Mozilla.
21406
214072006-10-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21408
21409	* UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]):
21410	"to" should be retained, otherwise it will be autoreleased and a
21411	crash will occur.
21412
21413	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
21414	-writeAction]): updated method to fetch the card before initing
21415	the snapshot.
21416
21417	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
21418	-extractQuickFieldsFromTodo:_task]): fixed to use NSNull instead
21419	of NSNotFound.
21420
21421	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor
21422	-iCalStringTemplate]): start and due date are now optional.
21423
21424	* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
21425	-setDayStartHour:aStartHour]):  added a new "isDisabled" ivar with
21426	appropriate accessors to be settable through the templates.
21427
21428	* UI/Scheduler/UIxDatePicker.m ([UIxDatePicker -init]): added a
21429	new "isDisabled" ivar with appropriate accessors to be
21430	settable through the templates.
21431
21432	* UI/Scheduler/UIxComponentEditor.m ([UIxComponentEditor
21433	-availableCalendars]): new method that list the calendars to which
21434	the user has subscribed.
21435	([UIxComponentEditor -componentOwner]): returns the owner of the
21436	editted object.
21437
21438	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
21439	-extractQuickFieldsFromTodo:_task]): set the start and enddate of
21440	quickentries to null whenever each or all of them are null, by
21441	providing an impossible timestamp from with NSNotFound as value.
21442
214432006-10-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21444
21445	* UI/WebServerResources/UIxMailEditor.js: update the algorithm
21446	that handles the creation of new fields with the new APIs and the
21447	new node structure on the page.
21448
21449	* UI/Scheduler/UIxAppointmentEditor.m,
21450	UI/Scheduler/UIxTaskEditor.m:
21451	refactored to user UIxComponentEditor as parent class.
21452
21453	* UI/Scheduler/UIxComponentEditor.[hm]: new class module
21454	containing the methods common to the UIxTaskEditor and the
21455	UIxAppointmentEditor.
21456
214572006-10-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21458
21459	* SoObjects/Appointments/SOGoAppointmentFolder.m
21460	([SOGoAppointmentFolder -doCalendarQuery:context]): now supports
21461	the handling of time-ranges.
21462
21463	* UI/WebServerResources/ContactsUI.js: specify a notification type as
21464	parameters when onConfirmContactSelection in invoked.
21465
21466	* UI/WebServerResources/generic.js: specify a notification type as
21467	parameters when onContactRemove in invoked.
21468
21469	* UI/WebServerResources/SchedulerUI.js: when the user deselects
21470	all calendars, select his entry.
21471
214722006-10-16  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21473
21474	* UI/WebServerResources/SchedulerUI.js: edit and delete events
21475	with their owner-relative urls. Generate a correct entry in the
21476	css color table when a user is added to the calendars list. Put
21477	the same color next to the user id.
21478
21479	* UI/WebServerResources/generic.js: implemented some new helper
21480	methods.
21481
21482	* SoObjects/Appointments/SOGoAppointmentFolder.m
21483	([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): don't delete
21484	entries if their owner is not the current user.
21485
21486	* UI/Scheduler/UIxCalInlineAptView.m ([UIxCalInlineAptView
21487	-displayClasses]): return the correct class for the current event
21488	representation depending on its owner.
21489
21490	* UI/Scheduler/UIxCalCalendarsListView.m: added method to create
21491	and associate a color for each user login depending on its
21492	position in the list.
21493
21494	* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView
21495	-currentRowCSSClass]): return the correct class for the current
21496	row depending on the owner of the event.
21497
21498	* UI/Contacts/UIxContactSelector.m ([UIxContactSelector
21499	-setColors:colors]): new method to associate a color table with
21500	each user in the list.
21501
21502	* SoObjects/Appointments/SOGoAppointmentFolder.m
21503	([SOGoAppointmentFolder
21504	-fetchFields:_fieldsfromFolder:_folderfrom:_startDateto:_endDatecomponent:_component]): associate each returned record with the owner of the table they are retrieved from.
21505
21506	* SoObjects/SOGo/NSObject+Owner.[hm]: new extension module to
21507	NSObject to associate an instance with a user.
21508
215092006-10-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21510
21511	* UI/WebServerResources/SchedulerUI.js: added handling of multiple
21512	calendars.
21513
21514	* UI/WebServerResources/ContactsUI.js: added handling of
21515	notification of changes to contact selectors.
21516
21517	* UI/WebServerResources/generic.js: added handling of notification
21518	of changes to contact selectors.
21519
21520	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
21521	-updateCalendarsAction]): proxy method to update the user
21522	preference table with the new selected calendar uids.
21523
21524	* UI/Contacts/UIxContactsListView.m ([UIxContactsListView
21525	-calendarsContactsAction]): new method.
21526
21527	* UI/Contacts/UIxContactSelector.m ([UIxContactSelector -setCheckedBoxes:boxes])
21528	([UIxContactSelector -setHasCheckBoxes:aBool])
21529	([UIxContactSelector -isCheckBoxChecked]): new accessors method to
21530	permit the drawing of checkboxes instead of card icons.
21531
21532	* UI/Scheduler/UIxCalCalendarsListView.m: new component class that
21533	wrap a selector the the "Calendars" tab.
21534
21535	* UI/Contacts/UIxContactsCalendarsSelection.m: buttons for the
21536	new user calendar selector.
21537
215382006-10-12  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21539
21540	* UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: time ranges
21541	may cover hour 0 to hour 23.
21542
21543	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
21544	-iCalStringFromQueryParameter:format:]): dates explicitly set to
21545	utc tz.
21546
21547	* UI/WebServerResources/SchedulerUI.js: manage both lists of
21548	objects wrt to the toolbar actions.
21549
21550	* UI/WebServerResources/generic.js: added code to the "String"
21551	class to decode number-encoded char entities.
21552
21553	* UI/Scheduler/UIxCalMainView.m ([UIxCalMainView
21554	-batchDeleteAction]): new method to delete selected entries in the
21555	lists.
21556
21557	* SoObjects/Appointments/SOGoAppointmentFolder.m
21558	([SOGoAppointmentFolder -deleteEntriesWithIds:ids]): new method
21559	that delete identified entries in batch.
21560
21561	* UI/SOGoUI/UIxComponent.m ([UIxComponent
21562	-jsCloseWithRefreshMethod:methodName]): new method with explicit purpose.
21563
21564	* UI/Scheduler/UIxTaskEditor.m ([UIxTaskEditor -saveAction]),
21565	UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
21566	-saveAction]), UI/MailerUI/UIxMailEditor.m ([UIxMailEditor
21567	-sendAction]), UI/Contacts/UIxContactEditor.m ([UIxContactEditor
21568	-saveAction]):
21569	return a UIxJSClose component if everything went fine.
21570
21571	* UI/Scheduler/UIxTaskEditor.h: interface extracted from
21572	UIxTaskEditor.m.
21573
21574	* UI/Scheduler/UIxAppointmentEditor.h: interface extracted from
21575	UIxAppointmentEditor.m.
21576
21577	* UI/Common/UIxJSClose.[hm]: new UIxComponent designed to display
21578	a very light page with javascript code to close a window, by
21579	calling a method on the opener if specified. This component is
21580	designed to work as a response to form postings.
21581
215822006-10-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21583
21584	* SoObjects/Appointments/SOGoTaskObject.[hm]: clone of
21585	SOGoAppointmentObject adapted for the handling of tasks.
21586
21587	* SoObjects/Appointments/NSArray+Appointments.[hm]: category
21588	extracted from SOGoAppointmentObject.
21589
21590	* UI/Scheduler/UIxAppointmentEditor.m ([UIxAppointmentEditor
21591	-saveUrl]): returns the url needed to POST the new form to.
21592	redirect the user to <aptid>/editAsAppointment instead of /edit,
21593	so that SOGoAppointmentFolder can return the correct object type.
21594
21595	* SoObjects/SOGo/NSObject+AptComparison.m ([NSObject
21596	-compareAptsAscending:_other]): accept empty start or end dates.
21597
21598	* SoObjects/Appointments/SOGoAppointmentFolder.m
21599	([SOGoAppointmentFolder
21600	-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.
21601	([SOGoAppointmentFolder -doCalendarQuery:context]): fetch
21602	components of type "vtodo" as well as "vevent".
21603	([SOGoAppointmentFolder -lookupName:inContext:acquire:]): if the
21604	url specified ends with AsTask or AsAppointment, returns the
21605	an object of the appropriate class, otherwise deduce it from its
21606	content if the HTTP method is "PUT", otherwise read its type from
21607	the quick table.
21608
21609	* OGoContentStore/OCSiCalFieldExtractor.m ([OCSiCalFieldExtractor
21610	-extractQuickFieldsFromTodo:_task]): extract quick fields from
21611	tasks.
21612
21613	* UI/Scheduler/UIxCalView.m ([UIxCalView
21614	-fetchCoreAppointmentsInfos]): replacement methods for
21615	fetchCoreInfos but by retrieving object with component "vevent".
21616	([UIxCalView -fetchCoreTasksInfos]): same as above for "vtodo"
21617	components.
21618
21619	* UI/Scheduler/UIxCalTasksListView.[hm]: clone of
21620	UIxCalAptListView adapted for the handling of tasks.
21621
21622	* UI/Scheduler/UIxTaskProposal.[hm],
21623	UI/Scheduler/UIxTaskView.[hm], UI/Scheduler/UIxTaskEditor.[hm]:
21624	clones of the UIxAppointment* classes for the handling of tasks.
21625
21626	* UI/WebServerResources/UIxTaskEditor.js: clone of
21627	UIxAppointmentEditor adapted for the handling of tasks.
21628
21629	* UI/WebServerResources/SchedulerUI.js: added support for tasks.
21630	Scroll the daily view to the appropriate hour when an appointment
21631	is selected in the appointments list.
21632
216332006-10-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21634
21635	* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
21636	-setDayStartHour:aStartHour]): specifies the user timezone on the
21637	given date.
21638
21639	* UI/Scheduler/UIxAppointmentEditor.m: indicate DTSTAMP with "GMT"
21640	as timezone.
21641
21642	* SoObjects/SOGo/NSCalendarDate+SOGo.m ([NSCalendarDate -adjustedDate])
21643	([NSCalendarDate -driftedDate]): methods made useless by a better
21644	comprehension of the NSTimeZone API...
21645
216462006-10-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21647
21648	* UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): call
21649	new methods from the NSCalendarDate methods.
21650
21651	* SoObjects/SOGo/NSCalendarDate+SOGo.m: module replacing and
21652	extending UI/Scheduler/NSCalendarDate+Scheduler.m.
21653	([NSCalendarDate
21654	+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).
21655	([NSCalendarDate -adjustedDate]): this method returns another
21656	instance set to the correct hour after the original date was set
21657	from a non-GMT timezone. This date can be used for storage.
21658	([NSCalendarDate -driftedDate]): this method does exactly the
21659	opposite of -adjutedDate, that is, it enables the method
21660	hourOfDay, minuteOfHour etc... to return the values according to
21661	the original date's timezone. This date CANNOT be used for storage.
21662
21663	* UI/Scheduler/NSCalendarDate+Scheduler.m ([NSCalendarDate
21664	-shortDateString]): new method that will return a "short date
21665	string" (yyyymmdd) from a calendar date object.
21666
21667	* UI/SOGoUI/UIxComponent.m ([UIxComponent
21668	-_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.
21669
21670	* Main/sogod.m (main): initialize the NSTimeZone's defaultTimeZone
21671	to the value of SOGoServerTimeZone or "Canada/Eastern" if not found.
21672
216732006-10-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21674
21675	* UI/WebServerResources/SchedulerUI.js: added code to scroll the
21676	view of the day at the height of hour 8:00.
21677
21678	* UI/Scheduler/UIxCalView.m ([UIxCalView -dayStartHour]): returns 0.
21679	([UIxCalView -dayEndHour]): returns 24.
21680
21681	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView -defaultAction])
21682	([UIxContactFoldersView -newAction]): invoke
21683	_selectActionForApplication: on self with the proper attribute too.
21684
21685	* UI/Contacts/UIxContactsSelectionViewContainer.m: removed since
21686	we now use the action mechanism in UIxContactsListView to keep the
21687	same view for the contact selectors and the regular contact view.
21688
21689	* UI/Contacts/UIxContactsListViewContainer.[hm]: replaces
21690	UIxContactsListViewContainerBase.[hm]
21691
21692	* UI/Contacts/UIxContactsListView.[hm]: replaces UIxContactsListViewBase.[hm]
21693
21694	* UI/WebServerResources/generic.js: generalized emailstring
21695	handling functions. Generalized address book access functions.
21696
21697	* UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
21698	-isPopup]): return YES if the "popup" query parameter is set.
21699
21700	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
21701	-defaultAction]): keep the url parameters when redirecting.
21702	([UIxContactFoldersView -selectForSchedulerAction])
21703	([UIxContactFoldersView -selectForMailerAction]): new action
21704	methods for the /scheduler-contacts and /mailer-contacts invocations.
21705
21706	* SoObjects/SOGo/SOGoObject.m: compose the action url using the
21707	newly available NSString+URL category.
21708
21709	* SoObjects/SOGo/NSDictionary+URL.m ([NSDictionary
21710	-asURLParameters]): handle dictionary entries which could be
21711	instances of NSArray rather than NSString.
21712
21713	* SoObjects/SOGo/NSString+URL.m ([NSString
21714	-composeURLWithAction:actionparameters:urlParametersandHash:useHash]): when composing the url, remove the encoded parameters first since they will be added later.
21715	([NSString -urlWithoutParameters]): new method that returns the
21716	url without its parameters.
21717
21718	* SoObjects/SOGo/NSString+iCal.h: deleted obsolete file.
21719
21720	* SoObjects/SOGo/NSDictionary+URL.[hm],
21721	UI/SOGoUI/NSString+URL.[hm]: moved from UI/SOGoUI/.
21722
21723	* UI/WebServerResources/UIxMailEditor.js: add support for
21724	additions of different types (to, cc, bcc) of recipients from the
21725	address book.
21726
21727	* UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): added the
21728	"<?xml..." header.
21729
21730	* UI/Contacts/UIxContactsMailerSelection.m,
21731	UI/Contacts/UIxContactsSchedulerSelection.m: classes replacing
21732	UI/Contacts/UIxContactsSelectionView.m to provide a different set
21733	of widgets depending on the application invoking the contact list.
21734
217352006-09-29  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21736
21737	* UI/WebServerResources/ContactsUI.js: hide the current contact
21738	whenever the user changes of contact folder.
21739
21740	* UI/WebServerResources/UIxContactEditor.js: the contact UID is
21741	now provided by the template when loading the page.
21742
21743	* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
21744	-iCalPersonWithUid:uid]): new method taken from removed module
21745	'iCalPerson+UIx';
21746
217472006-09-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21748
21749	* UI/Scheduler/UIxAppointmentView.m ([UIxAppointmentView
21750	-categoriesAsString]): same as below.
21751
21752	* UI/Scheduler/UIxAppointmentEditor.m: adapted by using the new
21753	vcalendar API's iCalEvent instead of the removed SOGoAppointment.
21754
21755	* SoObjects/Appointments/SOGoAppointmentObject.m
21756	([SOGoAppointmentObject -calendarFromContent:cnt]): new helper method.
21757	([SOGoAppointmentObject -firstEventFromCalendar:calendar]): new
21758	helper method.
21759
21760	* SoObjects/Appointments/SOGoAppointmentFolder.m
21761	([SOGoAppointmentFolder -doCalendarQuery:context]): added a
21762	hackish test to detect whether the request concernes VEVENT's or
21763	anything else. Return events only in the former case.
21764	([SOGoAppointmentFolder
21765	-fetchOverviewInfosFrom:_startDateto:_endDate]): retrieve the
21766	c_name quickfield so that the calendar list can identify the
21767	appointments with their complete "filename".
21768
21769	* OGoContentStore/OCSiCalFieldExtractor.m: use CardGroup's
21770	groupsOfClass:fromSource: to parse the given vcalendar.
21771
21772	* UI/Scheduler/iCalRecurrenceRule+SOGo.m: removed obsolete class.
21773
21774	* UI/Scheduler/SOGoAppointment+UIx.h: removed obsolete class.
21775
21776	* SoObjects/SOGo/SOGoAppointmentICalRenderer.[hm]: removed
21777	obsolete class.
21778
21779	* SoObjects/SOGo/SOGoAppointment.[hm]: removed obsolete class.
21780
217812006-09-26  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21782
21783	* SoObjects/Appointments/SOGoAppointmentFolder.m
21784	([SOGoAppointmentFolder -lookupName:inContext:acquire:]): be
21785	sensitive to the CalDAV method names.
21786	([SOGoAppointmentFolder -doCalendarQuery:context]): method for the
21787	"calendar-query" CalDAV method name.
21788
21789	* UI/WebServerResources/ContactsUI.js: removed a lot of useless
21790	code coming originally from MailerUI.js.
21791
21792	* UI/WebServerResources/UIxContactEditor.js: imitate the
21793	Thunderbird address book by completing the display name with the
21794	content of the first and last name fields, until the display name
21795	is modified manually.
21796
21797	* UI/WebServerResources/generic.js: added a "trim" method to the
21798	String class.
21799
21800	* UI/Contacts/UIxContactsListViewBase.m ([UIxContactsListViewBase
21801	-displayName]): new method that returns the display name from "cn"
21802	or from the "displayName" key if found.
21803
21804	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
21805	-initSnapshot]): check if "[card n]" returns anything to avoid a
21806	crash.
21807
21808	* UI/Common/UIxPageFrame.m ([UIxPageFrame -doctype]): new method
21809	that returns an unparsed doctype definition for the pages.
21810
21811	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21812	-vCard]): set the card's fn to attribute "displayName" if found
21813	before "cn".
21814
218152006-09-20  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21816
21817	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21818	-vCard]): handle the "streetAddress" and "l" fields.
21819
21820	* UI/Templates/MailerUI/UIxMailEditor.wox: arranged the message
21821	header fields by converting the tables to DIVs and SPANs.
21822
21823	* UI/WebServerResources/generic.css: attempted unification of font
21824	families and size across all the elements. changed the
21825	logConsole's "position" from "fixed" to "absolute" to avoid
21826	performance issues.
21827
218282006-09-19  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21829
21830	* UI/WebServerResources/ContactsUI.js (uixDeleteSelectedContacts):
21831	empty the contact view when the current contact is being deleted.
21832
21833	* UI/WebServerResources/MailerUI.js (newContactFromEmail): fully
21834	parse the email field and provide the address full name if found
21835	as the "contactFN" parameter.
21836
21837	* UI/WebServerResources/generic.js (openMailTo): do not give a
21838	name to the opened window so that serveral ones can be opened at
21839	the same time.
21840
21841	* UI/MailPartViewers/UIxMailPartTextViewer.m
21842	([UIxMailPartTextViewer -flatContentAsString]): override method by
21843	replacing carriage returns with "<br />" in the result string from
21844	super's implementation.
21845
21846	* UI/Contacts/UIxContactView.m ([UIxContactView
21847	-_urlOfType:aType]): don't manage non-mailto urls through
21848	javascript, let the user decide what's best for him.
21849
21850	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
21851	-newAction]): transfer all the query parameters by using the
21852	"asURLParameters"'s result string from [self queryParameters].
21853
21854	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor
21855	-initSnapshot]): retrieve "contactEmail" and "contactFN" from the
21856	query parameters and put their values (if any) into the snapshot.
21857
21858	* UI/Contacts/UIxContactView.m ([UIxContactView -note]): convert
21859	carriage-returns to "<br />".
21860	([UIxContactView -workCompany]): explicitly initialize company to
21861	nil if org is nil or empty.
21862
21863	* UI/WebServerResources/UIxContactEditor.js: updated validation
21864	code after we added and renamed some fields.
21865
21866	* UI/WebServerResources/ContactsUI.js: added code to cache contact
21867	cards and to handle card updates.
21868
218692006-09-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21870
21871	* UI/Contacts/UIxContactView.m ([UIxContactView -hasOtherInfos]):
21872	test the length of the returned string since they will never be
21873	nil.
21874
21875	* UI/Contacts/UIxContactEditor.m ([UIxContactEditor -saveAction]):
21876	return self if the process went successful, returns an exception
21877	otherwise (and only otherwise...).
21878
21879	* OGoContentStore/OCSContactFieldExtractor.m
21880	([OCSContactFieldExtractor -extractQuickFieldsFromVCard:_vCard]):
21881	adapted method to the new VCard api. Since the cards are stored in
21882	vcard format, we no longer deal with a dictionary but with a
21883	NGVCard object...
21884
218852006-09-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21886
21887	* UI/Contacts/UIxContactView.m ([UIxContactView -preferredEmail]):
21888	return a string with a "mailto" url.
21889	([UIxContactView -_urlOfType:aType]): generic method to return a
21890	url string with a html anchor pointing to it.
21891
21892	* UI/Contacts/UIxContactEditor.[hm]: UIxContactEditorBase renamed
21893	since subclass "UIxContactEditor" did nothing. Implemented code to
21894	display and modify the values parsed from the vcards, displayed in
21895	a way similar to the Thunderbird addressbook.
21896
21897	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21898	-save]): new dummy method.
21899
21900	* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
21901	-save]): made method void.
21902
219032006-09-13  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21904
21905	* UI/Contacts/UIxContactView.m: added many wrapper methods to
21906	display blocks of data à la Thunderbird Addressbook. If data is
21907	available, those wrappers (around the NGVCard methods) will
21908	enclose the results in a proper HTML output with the correct label
21909	(if present), otherwise it will return an empty string.
21910	([UIxContactView -vcardAction]): new action to return the contact
21911	as text/vcard (for exporting).
21912
21913	* SoObjects/Contacts/SOGoContactLDAPEntry.m ([SOGoContactLDAPEntry
21914	+contactEntryWithName:aNamewithLDAPEntry:anEntryinContainer:aContainer]): adapted the mapping of the LDIF data with the new NGVCard API.
21915
21916	* SoObjects/Contacts/SOGoContactGCSEntry.m ([SOGoContactGCSEntry
21917	-vCard]): create a new NGVCard instance when no data is available
21918	and retain it.
21919	([SOGoContactGCSEntry -save]): save the vCard using the new
21920	"versitString" API method/message.
21921
21922	* UI/Contacts/UIxContactView.h: separated interface from
21923	UIxContactView.m.
21924
21925	* UI/WebServerResources/ContactsUI.js: add-ed code to download card
21926	views and display them beneath the list.
21927
219282006-09-08  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21929
21930	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -userTimeZone]): retain
21931	the timezone even when it's the server timezone.
21932
21933	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
21934	-privateContacts:inContext:]): no long configure the calendar
21935	object with the user's timezone since it's now accessible
21936	application-wide throught the SOGoObject methods.
21937
21938	* UI/SOGoUI/UIxComponent.[hm]: removed the "viewTimeZone" ivar and
21939	method. Removed the "backendTimeZone" method.
21940
21941	* UI/MainUI/SOGoUserHomePage.[hm]: made a subclass of UIxComponent
21942	instead of SoComponent.
21943
21944	* SoObjects/Appointments/SOGoAppointmentObject.m:
21945	([SOGoAppointmentObject -viewTimeZoneForPerson:_person]): returns
21946	[self serverTimeZone] instead of "EST" (which was removed).
21947
21948	* SoObjects/Appointments/SOGoAppointmentFolder.[hm]: removed the
21949	"timeZone" ivar and its accessors.
21950
21951	* SoObjects/SOGo/SOGoObject.m ([SOGoObject -serverTimeZone]): new
21952	centralized method returing the timezone configured in the
21953	userdefaults db or "Canada/Eastern" if missing.
21954	([SOGoObject -userTimeZone]): new centralized method returing the
21955	timezone of the current user or the server timezone if missing
21956	from the user configuration table.
21957
219582006-09-07  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21959
21960	* UI/WebServerResources/SchedulerUI.js: implemented caching of
21961	date selectors.
21962
21963	* UI/SOGoUI/UIxComponent.m ([UIxComponent -userFolderPath]):
21964	return a path based on the object's context instead of the first
21965	level in SOGo's object hierarchy...
21966
219672006-09-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21968
21969	* UI/Templates/SchedulerUI/UIxCalDayTable.wox: day columns can now
21970	be clicked.
21971
21972	* UI/Templates/SchedulerUI/UIxCalDateSelector.wox: pass the user's
21973	timezone ([self viewTimeZone]) to the WEMonthOverview component to
21974	avoid a confusion with the days.
21975
21976	* UI/Templates/SchedulerUI/UIxCalInlineAptView.wox: appointments
21977	can now be clicked.
21978
21979	* UI/WebServerResources/SchedulerUI.js: implemented a mechanism to
21980	imitate Sunbird's synchronization between the 3 visible views.
21981
21982	* UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): make
21983	sure the numbers in dateString are formatted so as to take 4 chars
21984	for the year and 2 for the day and the month, otherwise
21985	NSCalendarDate will return a nil date.
21986	([UIxComponent -applicationPath]): return a path based on the
21987	object's context instead of the second level in SOGo's object
21988	hierarchy...
21989
219902006-09-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
21991
21992	* UI/SOGoUI/UIxComponent.m ([UIxComponent -selectedDate]): add the
21993	user's timezone abbreviation to the date string passed as parameter to
21994	NSCalendarDate to generate an accurate date instance. Do the same
21995	when no date is specified and today is chosen.
21996
21997	* UI/WebServerResources/UIxAppointmentEditor.js: convert the
21998	form's time values to integers before comparing them.
21999
22000	* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -currentStartTime])
22001	([UIxCalAptListView -currentEndTime]): initialize the resulting
22002	dates timezone with [self viewTimeZone].
22003
22004	* UI/SOGoUI/UIxComponent.m ([UIxComponent -init]): new
22005	"viewTimeZone" ivar destined to hold an instance of the user's
22006	timezone in memory.
22007	([UIxComponent -viewTimeZone]): take the timezone from the user's
22008	prefs.
22009
220102006-08-30  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22011
22012	* UI/Templates/SchedulerUI/UIxAppointmentEditor.wox: completely
22013	rearranged the layout.
22014
22015	* UI/WebServerResources/UIxAppointmentEditor.js: added code to
22016	manage showing and hiding appointment details.
22017
22018	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
22019	-privateContacts:inContext:]): init the SOGoAppointmentFolder's
22020	timezone by taking the current user's timezone setting.
22021
22022	* SoObjects/Appointments/SOGoAptMailNotification.m: same as below.
22023
22024	* SoObjects/Appointments/SOGoAppointmentObject.m
22025	([SOGoAppointmentObject -changeParticipationStatus:inContext:]):
22026	set default timezone to EST, although this code should be
22027	rewritten to handle a system and a user default value.
22028
22029	* UI/Scheduler/UIxTimeDateControl.m ([UIxTimeDateControl
22030	-takeValuesFromRequest:_rqinContext:_ctx]): enhanced method to
22031	take the values from the hour and minute INPUTs when data is
22032	POSTed since we no longer use the UIxTimeSelector component.
22033	([UIxTimeDateControl -selectableHours])
22034	([UIxTimeDateControl -selectableMinutes]): new methods used by the
22035	template SELECTs to display reasonable and acceptable values
22036	instead of all the possibilities.
22037
22038	* UI/WebServerResources/generic.js: adapted code for the new
22039	implementation of the UIxContactSelector component (added a
22040	"remove" button, removed the previous INPUT and replaced them with
22041	links of class "button").
22042
22043	* UI/Scheduler/UIxTimeDateControl.h: separated interface from
22044	UIxTimeDateControl.m.
22045
22046	* UI/Scheduler/UIxCalDayTable.m ([UIxCalDayTable -currentAppointmentDay])
22047	([UIxCalDayTable -currentAppointmentHour]): new methods that
22048	returns correctly formatted values used as attributes for JS code.
22049
22050	* UI/Contacts/UIxContactSelector.m ([UIxContactSelector
22051	-initialContactsAsString]): renamed implementation of
22052	initialParticipants.
22053	([UIxContactSelector -currentContactId])
22054	([UIxContactSelector -currentContactName]): new methods used when
22055	listing the initial contacts in the widget. Currently, both return
22056	the person's cn but the latter should ultimately return a user
22057	fullname.
22058
22059	* UI/Contacts/UIxContactSelector.h: separated interface from
22060	UIxContactSelector.m.
22061
22062	* UI/Scheduler/UIxDatePickerScript.[hm]: component removed since
22063	all javascript code is now put in Scheduler.js/generic.js.
22064
22065	* UI/Scheduler/NSCalendarDate+UIx.[hm]: category removed, code
22066	moved into NSCalendarDate+Scheduler instead.
22067
22068	* SoObjects/Appointments/SOGoAppointmentFolder.m
22069	([SOGoAppointmentFolder -setTimeZone:newTZ]): new method to
22070	configure the timezone from SOGoUserFolder when the instance is
22071	being created.
22072	([SOGoAppointmentFolder -viewTimeZone]): MET was removed. Returns
22073	the value of the new "timezone" ivar.
22074
220752006-08-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22076
22077	* UI/WebServerResources/SchedulerUI.{css,js}: added a tabview with
22078	the date selector in the first page and the container of the
22079	future calendar selector in the second page.
22080
22081	* UI/WebServerResources/generic.js: added code for handling tabbed
22082	views.
22083
22084	* UI/Common/UIxPageFrame.m ([UIxPageFrame -productFrameworkName]):
22085	returns the bundle name associated to the current running product.
22086
220872006-08-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22088
22089	* UI/WebServerResources/UIxAppointmentEditor.js: fixed the AJAX
22090	exception by invoking a timeout on the opener rather than invoking
22091	the list refresh method.
22092
22093	* UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]):
22094	removed method.
22095
22096	* UI/Scheduler/UIxCalWeekView.m ([UIxCalWeekView -weekBeforePrevWeekQueryParameters])
22097	([UIxCalWeekView -prevWeekQueryParameters])
22098	([UIxCalWeekView -nextWeekQueryParameters])
22099	([UIxCalWeekView -weekAfterNextWeekQueryParameters]): new methods
22100	that return the dates relatively to the current day.
22101	([UIxCalWeekView -lastWeekName])
22102	([UIxCalWeekView -currentWeekName])
22103	([UIxCalWeekView -nextWeekName])
22104	([UIxCalWeekView -weekAfterNextWeekName])
22105	([UIxCalWeekView -_weekNumberWithOffsetFromToday:offset]): new
22106	methods that returns the label for the corresponding weeks.
22107
22108	* UI/Scheduler/UIxCalDayTable.[hm]: new class module/component
22109	used by UIxCalDayView and UIxCalWeekView to display the events
22110	occuring in one or more days.
22111
221122006-08-22  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22113
22114	* UI/Scheduler/UIxCalMainView.m: extended class to populate the
22115	entries in the new "monthMenu" and "yearMenu".
22116
22117	* UI/Scheduler/UIxCalDayView.m ([UIxCalDayView -labelForDay]): new
22118	method to return the current day as a string formatted depending
22119	on the current locale.
22120
22121	* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
22122	([UIxCalAptListView -endDate]): "today" is now the default filter
22123	for displayed events.
22124	([UIxCalAptListView -currentSerialDay]): new method returning the
22125	date of the current enumerated appointment in serial form
22126	(yyyymmdd).
22127
22128	* UI/WebServerResources/SchedulerUI.js: added code to select the
22129	relevant day when an appointment is selected. Added code to popup
22130	a month and a year menu whenever the header entries are clicked in
22131	the calendar widget.
22132
22133	* UI/WebServerResources/generic.js: made addClassName and
22134	removeClassName methods of HTMLElement.
22135
221362006-08-21  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22137
22138	* UI/WebServerResources/MailerUI.js: fixed the contact creation
22139	from email addresses.
22140
22141	* UI/WebServerResources/generic.js: centralized the search-related
22142	functions here since the same code was used across the 3
22143	applications.
22144
22145	* UI/Scheduler/UIxCalAptListView.m ([UIxCalAptListView -startDate])
22146	([UIxCalAptListView -endDate]): return the required dates needed
22147	depending on the value given to the "filterpopup" url parameter.
22148
22149	* UI/Common/UIxToolbar.m ([UIxToolbar -buttonLabel]): reduced the
22150	code by invoking UIxComponent's labelForKey:.
22151
22152	* UI/SOGoUI/UIxComponent.m ([UIxComponent -labelForKey:]): use
22153	[self pageResourceManager] instead of [self resourceManager].
22154
22155	* UI/Contacts/UIxContactEditorBase.m: invokes
22156	globallyUniqueObjectId on the clientobject's class instead of the
22157	hardcoded "SOGoFolder".
22158
22159	* UI/Contacts/UIxContactFoldersView.m ([UIxContactFoldersView
22160	-newAction]): redirect the "new" action to the personal (default)
22161	contact folder.
22162
22163	* SoObjects/SOGo/SOGoObject.m ([SOGoObject
22164	+objectWithName:inContainer:]): new constructor.
22165
22166	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
22167	-lookupContactWithId:recordId]): always create a contact object,
22168	even if it does not exist.
22169
221702006-08-18  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22171
22172	* UI/Scheduler/UIxCalMainView.[hm]: new class to serve as a pseudo
22173	component that lays out the different components of SOGoCalendar.
22174	Only serves as an Objective-C counterpart to its xml template.
22175
22176	* UI/Scheduler/UIxCalInlineMonthOverview.h: interface extracted
22177	from its .m file.
22178
22179	* UI/Scheduler/UIxCalFilterPanel.[hm]: new class designed to
22180	display a widget to handle the information displayed in the
22181	appointments list. Not currently used, lacks implementation.
22182
22183	* UI/Scheduler/UIxCalDateSelector.[hm]: new class designed to
22184	display a calendar as a dynamic widget from where one can select
22185	the current visible day.
22186
22187	* UI/Scheduler/NSCalendarDate+Scheduler.[hm]: category code
22188	extracted from UIxCalInlineMonthOverview.m.
22189
22190	* UI/Scheduler/UIxDatePicker.m: removed the jsPopup, jsCode and
22191	calendarPageURL methods. The javascript code is handled by .js
22192	files as much as possible...
22193
22194	* UI/WebServerResources/ContactsUI.js,
22195	UI/WebServerResources/MailerUI.js: adapted to the code refactoring
22196	in generic.js.
22197
22198	* UI/WebServerResources/SchedulerUI.js: implemented functions to
22199	handle the new widgets. XmlHTTPRequest code taken from
22200	MailerUI.js.
22201
22202	* UI/WebServerResources/generic.js: put some functions related to
22203	element selections as methods to HTMLElement and HTMLTableElement.
22204
22205	* UI/Scheduler/UIxCalAptListView.[hm]: new class designed to
22206	display the list of appointments (embodies the code-size of
22207	UIxCalAptListView; answers to the "aptlist" method).
22208
222092006-08-15  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22210
22211	* UI/Scheduler/UIxCalWeekOverview.m ([UIxCalWeekOverview
22212	-correctURLAction]): new short action method replacing the method
22213	below by taking far less code.
22214
22215	* SoObjects/Appointments/SOGoAppointmentFolder.m
22216	([SOGoAppointmentFolder -GETAction:]): removed method. Replaced
22217	with an action in the view-related code.
22218
22219	* UI/Scheduler/UIxAppointmentEditor.m: invoke
22220	"stringByEscapingHTMLString" on the resulting value to avoid
22221	issues with accented characters.
22222	([-jsCode]): removed method since the javascript code was merged
22223	into SchedulerUI.js.
22224
222252006-08-14  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22226
22227	* UI/Scheduler/iCalPerson+UIx.m ([iCalPerson +personWithUid:]):
22228	new class method that returns an iCalPerson based on the UID given
22229	as param.
22230
22231	* UI/Contacts/UIxContactsListViewContainerBase.m:
22232	UIxContactsListViewContainer renamed to serve as a base class for
22233	the contact lists in both the contact editor and the contact
22234	selectors.
22235
22236	* SoObjects/Contacts/SOGoContactLDAPFolder.m
22237	([SOGoContactLDAPFolder
22238	-LDAPSetHostname:setPort:setBindDN:setBindPW:setContactIdentifier:
22239	setUserIdentifier:setRootDN:]): an LDAP field specifying the
22240	loginname of the users can now be specified.
22241
22242	* UI/WebServerResources/generic.js: added code to manage contact
22243	lists through the new implementation of the UIxContactSelector.
22244
22245	* UI/Templates: put the templates related to SchedulerUI in its
22246	own directory.
22247
22248	* SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
22249	-asDictionaryWithAttributeNames:withUID:andCName:cName]): add an
22250	entry for "uid" with the field name representing the login name of
22251	the user in the corresponding LDAP branch.
22252
222532006-08-10  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22254
22255	* SoObjects/Contacts/SOGoContactGCSFolder.m ([SOGoContactGCSFolder
22256	-lookupName:_keyinContext:_ctxacquire:_flag]): when the HTTP
22257	request is a PUT, always create an entry, even if we're not sure
22258	it does exist.
22259
222602006-08-09  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22261
22262	* UI/WebServerResources/ContactsUI.js: implemented live-search.
22263
22264	* SoObjects/Contacts/SOGoContactFolders.m ([SOGoContactFolders
22265	-appendSystemSourcesInContext:context]): populated method with
22266	code that creates entries mapped to instances SOGoContactFolder,
22267	based on the configuration found in the NSUserDefaults under the
22268	key "SOGoLDAPAddressBooks".
22269	([SOGoContactFolders
22270	-lookupName:nameinContext:contextacquire:acquire]):
22271	"contactsources" do not exist anymore, SOGoContactFolder was split
22272	into two classes: SOGoContactGCSFolder and SOGoContactLDAPFolder
22273	and one protocol: SOGOContactFolder, instead.
22274	([SOGoContactFolders -contactFolders]): new accessor used by the
22275	views of SOGoContactXXXFolder to list the possible sources.
22276
22277	* SoObjects/Contacts/SOGoContactObject.h: new protocol that
22278	defines the methods that UIxContactsView, ..Editor and so on...
22279	can expect.
22280
22281	* SoObjects/Contacts/SOGoContactFolder.h: new protocol that
22282	defines the methods that UIxContactsListViewBase expects as well
22283	as the data fields returned in the contact lists.
22284
22285	* SoObjects/Contacts/SOGoContactLDAPFolder.[hm]: new class that
22286	returns entries an LDAP server. Conforms to the new
22287	SOGOContactFolder protocol.
22288
22289	* SoObjects/Contacts/SOGoContactLDAPEntry.[hm]: new class that
22290	returns a vCard based on contact entries from an LDAP server.
22291	Conforms to the new SOGOContactObject protocol.
22292
22293	* SoObjects/Contacts/NGVCardSimpleValue+Contact.m
22294	([NGVCardSimpleValue -vCardEntryString]): generates the correct
22295	entry for the textual representation of the vCard.
22296
22297	* SoObjects/Contacts/NGVCardSimpleValue+Contact.[hm]: new class
22298	extension.
22299
22300	* SoObjects/Contacts/SOGoContactGCSEntry.[hm]: new module name of
22301	"SOGoContactObject".
22302
22303	* SoObjects/Contacts/NGVCard+Contact.m ([NGVCard -asString]): new
22304	method that generates a textual representation of the vcard.
22305
22306	* SoObjects/Contacts/NGVCard+Contact.[hm]: new class extension.
22307
22308	* SoObjects/Contacts/SOGoContactGCSFolder.[hm]: new module name of
22309	"SOGoContactFolder".
22310
22311	* SoObjects/Contacts/SOGoContactSource.h,
22312	SoObjects/Contacts/SOGoPersonalAB.[hm]: unused classes and
22313	protocols.
22314
22315	* SoObjects/Contacts/NGLdapEntry+Contact.m ([NGLdapEntry
22316	-singleAttributeWithName:key]): new method that returns the first
22317	object associated with an ldap key (where generally one value is
22318	returned by key).
22319	([NGLdapEntry
22320	-asDictionaryWithAttributeNames:attributeNamesandCName:cName]):
22321	map the entry into an NSDictionary for processing by
22322	UIxContactsListViewBase.m with the least possible overhead.
22323
22324	* SoObjects/Contacts/NGLdapEntry+Contact.[hm]: new class
22325	extension.
22326
223272006-08-04  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22328
22329	* SoObjects/SOGo/SOGoUserFolder.m ([SOGoUserFolder
22330	-privateContacts:inContext:]): now returns an instance of
22331	SOGoContactFolders.
22332
22333	* UI/Contacts/UIxContactsListViewContainer.m
22334	([UIxContactsListViewContainer -contactFolderName]): new method to
22335	return the absolute path to the current contact folder, called
22336	from within the template.
22337
22338	* UI/Templates/ContactsUI/UIxContactsListViewContainer.wox: added
22339	JS code to initialize the 'currentContactFolder' generic var.
22340
22341	* SoObjects/Contacts/SOGoContactFolder.m ([SOGoContactFolder
22342	+contactFolderWithSource:inContainer:andName:]): new class
22343	method meant to return an instance connected to the specified
22344	source. Currently useless but won't be anymore in the next few
22345	days.
22346
22347	* SoObjects/SOGo/SOGoUserFolder.h: commented out declaration of
22348	the "lookupFreeBusyObject" method since it does not exist.
22349
22350	* UI/Contacts/UIxContactFoldersView.[hm]: new class module serving
22351	as a "view" for the SOGoContactFolders object. Does nothing but
22352	redirect the browser to the URL of the personal address book of
22353	the user. It does not even have a template.
22354
22355	* SoObjects/Contacts/SOGoPersonalAB.[hm]: new class module
22356	implementing the SOGoContactSource protocol. Does nothing
22357	currently but will be used to implement access to the personal
22358	address book of the user stored in the SOGo database.
22359
22360	* SoObjects/Contacts/SOGoContactSource.h: new "SOGoContactSource"
22361	protocol defining an API common to all possible types of contact
22362	sources.
22363
22364	* SoObjects/Contacts/SOGoContactFolders.[hm]: new class module
22365	serving as the root of the contact folders available to the
22366	current user. Correctly lists the contact sources in webdav.
22367
223682006-08-03  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22369
22370	* UI/MailerUI/UIxMailAccountsView.m ([UIxMailAccountsView
22371	-composeAction]): new action method that permits external object
22372	to write a message from the default (primary) account.
22373
22374	* UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
22375	-initSnapshot]): new method with code taken from "defaultAction"
22376	but needed for others.
22377	([UIxContactEditorBase -writeAction]): new action designed to
22378	compose the correct URL needed to obtain the MailerUI's email
22379	editor with the correct "mailto" parameter.
22380
22381	* UI/Common/UIxSortableTableHeader.m: moved from MailerUI to
22382	Common so that other modules can use it.
22383
22384	* UI/Contacts/UIxContactsListViewContainer.m: container to make it
22385	easier to manage both ajax and non-ajax requests.
22386
22387	* UI/Contacts/UIxContactsFilterPanel.m: clone of
22388	UIxMailFilterPanel, but applicable to contact lists.
22389
22390	* SoObjects/Contacts/NSDictionary+Contact.m ([NSDictionary
22391	-vcardContentFromSOGoContactRecord]): use the new standard methods
22392	created for each type of entry. If a line is determined to not
22393	contain information, it will be skipped.
22394
22395	* SoObjects/SOGo/AgenorUserManager.m ([AgenorUserManager
22396	+initialize]): init defaultMailDomain with the user default
22397	"SOGoDefaultMailDomain".
22398
223992006-08-02  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22400
22401	* UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
22402	-saveAction]): reorganized methods to only have ONE return point.
22403	Invoke saveRecord: directly on the clientObject instead of
22404	saveContentString, which does the same thing anyway.
22405
22406	* SoObjects/Contacts/NSDictionary+Contact.m
22407	([NSDictionary -vcardContentFromSOGoContactRecord]): extension
22408	method to convert the dictionary returned with the user submission
22409	to a record in VCARD format to be stored in the database.
22410
224112006-08-01  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22412
22413	* UI/WebServerResources/MailerUI.js: when opening the context menu
22414	of the message list, select the message below the mouse cursor and
22415	deselect the other selected messages temporarily. This mimics the
22416	behaviour of Thunderbird for that matter and was already
22417	implemented for the entries of the folder tree.
22418
22419	* UI/MailerUI/UIxMailFolderMenu.m ([UIxMailFolderMenu
22420	-iconForMenuItem]): new method that returns the fully qualified
22421	relative URL to the icon representing the mailbox, or the default
22422	mailbox icon if needed.
22423
22424	* UI/SOGoUI/UIxComponent.m ([UIxComponent
22425	-urlForResourceFilename:filename]): automatically return an empty
22426	string whenever the filename passed as argument is nil.
22427
22428	* UI/WebServerResources/MailerUI.js: open the mailboxes with the
22429	"desc" parameter set to 1 so that they are sorted in descending
22430	order by default. Also, added "onHeaderClick()", triggered by
22431	clicking on the message list header elements.
22432
22433	* UI/MailerUI/UIxMailSortableTableHeader.m
22434	([UIxMailSortableTableHeader -isSortedDescending]): same as below.
22435
22436	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
22437	-isSortedDescending]): defaults to "YES" when the sort order is
22438	not specified.
22439
224402006-07-31  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22441
22442	* UI/WebServerResources/MailerUI.js:
22443	- message cache: set the max num of cached messages to 20. Limit
22444	the cached message size to 30000 bytes.
22445	- ajax: when a message request is called while one is already
22446	being performed, the latter will be cancelled. Idem when
22447	retrieving the content of a mailbox.
22448	- folder tree: when a mailbox is selected because of the URL
22449	requested (initMailboxSelection), the dtree is expanded throughout
22450	the mailbox entry's parent hierarchy to ensure it is made visible
22451	when the page is being displayed. (new function: expandUpperTree).
22452	- mailbox loading: when loading a mailbox where a message was
22453	previously selected, we invoke its url with the "pageforuid"
22454	parameter correctly specified. During callback processing, we scan
22455	the table for the related row and reselect it.
22456	Also, the message area is set blank before loading any mailbox.
22457
22458	* UI/MailerUI/UIxMailListView.m ([UIxMailListView
22459	-defaultAction]): if the "pageforuid" parameter is passed in the
22460	url, take its value and invoke [self firstMessageOfPageFor:]
22461	consequently to deduce the first message to display. Otherwise,
22462	set it to "idx", otherwise set it to 0.
22463	([UIxMailListView -firstMessageOfPageFor:]): new method
22464	that determines the first message of the page where the message
22465	passed as parameter is contained.
22466
22467	* UI/WebServerResources/UIxMailListView.js: removed this module,
22468	its code was put in MailerUI.js instead.
22469
224702006-07-28  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22471
22472	* UI/MailerUI/UIxMailFolderMenu.m: a descendent of UIxMailTree
22473	which returns the nodes for the parent specified in "parentMenu".
22474	Used to generate the javascript code for the folder dtree.
22475
22476	* UI/Templates/MailerUI/UIxMailPanelFrame.wox: the components
22477	using that container-template are now using UIxMailMainFrame
22478	since UIxMailPanelFrame had no real interest. File removed.
22479
22480	* UI/WebServerResources/dtree.{css,js}: new files to handle
22481	javascript-generated mailbox tree. Modified from original version
22482	by integrating the previous code with the one we are using for
22483	selections and mailbox handling. Minor visual enhancements too...
22484
224852006-07-25  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22486
22487	* SoObjects/Mailer/SOGoUser+Mail.m: if only one identity is to be
22488	returned, put it in an NSArray before returning it (fixes
22489	bug#217).
22490
224912006-07-24  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22492
22493	* UI/SOGoUI/NSString+URL.m ([NSString -hostlessURL]): new method
22494	that returns a url string stripped from its "http://hostname"
22495	prefix.
22496
22497	* UI/SOGoUI/NSDictionary+URL.[hm]: moved from UI/Common.
22498
22499	* UI/SOGoUI/NSString+URL.[hm]: moved from UI/Common.
22500
225012006-07-17  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22502
22503	* UI/MailerUI/WOContext+UIxMailer.m ([WOContext
22504	-mailDateFormatter]): retrieve the timezone from the user settings
22505	and pass it to the returned dateFormatter. Also, the dateFormatter
22506	is kept in a static variable to avoid useless
22507	creations/destructions.
22508
22509	* UI/MailerUI/UIxMailFormatter.m ([UIxMailDateFormatter
22510	-setTimeZone:newTimeZone]): new accessor to specify the timezone.
22511
22512	* UI/MailerUI/UIxMailFilterPanel.m ([UIxMailFilterPanel -setSearchCriteria:])
22513	([UIxMailFilterPanel -searchCriteria]): new methods, similar to
22514	s/Criteria/Text/ to handle the "criteria" form parameter.
22515
225162006-07-11  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22517
22518	* UI/WebServerResources/uix.css: enhanced the toolbar appearance
22519	to integrate better with the firefox look&feel. Added entries for
22520	the new "menu" DIV class (popup menus).
22521
22522	* UI/WebServerResources/generic.js: added "sanitizeMailTo" which
22523	takes any chunk of text as param, detects the user email and the
22524	optional first and last names and return them in a well-formatted
22525	way. Renamed "getSelection" to "getSelectedNodes" to avoid a
22526	namespace conflict. Added "onMenuClick(node, event, menuId)" to
22527	handle popup menus through "onclick" element attributes (node =
22528	this, event = event and menuId = name of the menu DIV id to
22529	popup).
22530
22531	* UI/Contacts/UIxContactEditorBase.m ([UIxContactEditorBase
22532	-snapshot]): add an entry for "email" into the snapshot
22533	dictionary if a "contactEmail" URL parameter was detected and if
22534	the entry for "email" is empty.
22535
22536	* UI/Contacts/Toolbars/SOGoContactFolder.toolbar: the "new card"
22537	button now invokes the newContact() js function in ContactsUI.js
22538	instead of opening "new" directly. newContact() pops up a window
22539	stripped from its navigation bar.
22540
22541	* UI/Contacts/ContactsUI.js: new module specific to the ContactsUI
22542	bundle (AddressBook).
22543
22544	* UI/Templates/MailerUI/UIxMailView.wox: added a div of class
22545	"menu" and id "addressMenu" have the header email addresses
22546	display it with the new menu code in generic.js.
22547
22548	* UI/Templates/MailerUI/UIxMailPanelFrame.wox: same as below +
22549	replaced the body tables with a div of class "pageContent"
22550	(standardization across the page templates).
22551
22552	* UI/Templates/MailerUI/UIxMailMainFrame.wox: include
22553	productJavaScriptURL and pageJavaScriptURL (conditionnally) since
22554	those are now inherited from UIxPageFrame.
22555
22556	* UI/MailerUI/UIxMailView.js: new file specific to UIxMailView.
22557
22558	* UI/MailerUI/UIxMailToSelection.m ([UIxMailToSelection -to]): if
22559	a "mailto" URL parameter is detected and the "to" array is empty,
22560	initialize "to" with the value of "mailto" before returning it.
22561
22562	* UI/MailerUI/UIxMailEditorAction.m ([UIxMailEditorAction
22563	-composeAction]): rewrote method in a cleaner way and with usage
22564	of the URL extensions to NSString and NSDictionary (see below).
22565	Also, if a "mailto" url parameter is detected, pass it to the
22566	redirected url.
22567
22568	* UI/MailerUI/UIxMailMainFrame.m: subclassed from UIxPageFrame to
22569	reduce code.
22570
22571	* UI/Common/NSDictionary+URL.m ([NSDictionary -asURLParameters]):
22572	returns a parameter string to add to a base URL.
22573
22574	* UI/Common/NSString+URL.m ([NSString
22575	-composeURLWithAction:parameters:andHash:useHash]): new method to
22576	compose a complete URL from an object URL with parameters and an
22577	optional '#' character.
22578
22579	* UI/Common/UIxPageFrame.h: separated interface from
22580	UIxPageFrame.m.
22581
225822006-07-07  Wsourdeau Sourdeau  <wsourdeau@inverse.ca>
22583
22584	* UI/Scheduler/UIxAppointmentEditor.m: returns yes to "isPopup";
22585
22586	* UI/WebServerResources/generic.js: added code to manage
22587	selections within HTML containers.
22588
22589	* UI/Common/UIxPageFrame.m ([UIxPageFrame -productJavaScriptURL]):
22590	added method to determine the possible URL for a product-specific
22591	javascript filename of the forme <productname>.js.
22592	([UIxPageFrame -hasProductSpecificJavaScript]): new method.
22593	([UIxPageFrame -isPopup]): new method to determine whether the
22594	application navigator bar should be displayed (main page) or not
22595	(popup page).
22596
22597	* SoObjects/SOGo/SOGoAuthenticator.m ([SOGoAuthenticator
22598	-LDAPCheckLogin:_loginpassword:_pwd]): new method to authenticate
22599	the user through LDAP.
22600
226012006-07-06  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22602
22603	* The toolbar code from the MailerUI product was taken, renamed as
22604	"UIxToolBar" and put into UI/Common. Toolbar plists were created
22605	for the Contacts and Scheduler products and put in their respectir
22606	Toolbars/ subdirectories. Finally,
22607	UI/Templates/{UIxToolbarButton,UIxToolbarSeparator}.wox, and
22608	UI/Common/{UIxToolbarButton,UIxToolbarSeparator}.m were removed
22609	and an invocation to the UIxToolbar component was put at the top
22610	of UI/Templaces/UIxPageFrame.wox.
22611
22612	* UI/Common/UIxToolbar.m: new "isLastGroup" method to determine
22613	within the templates whether a separator should be displayed.
22614
22615	* UI/Common/UIxToolbar.m ([UIxToolbar -hasButtons]): new method
22616	that returns NO if the toolbar is empty.
22617
226182006-07-05  Wolfgang Sourdeau  <wsourdeau@inverse.ca>
22619
22620	* UI/Templates/UIxPageFrame.wox: replaced central table with a DIV.
22621
22622	* UI/Common/UIxToolbarSeparator.m, UI/Common/UIxToolbarButton.m:
22623	new toolbar objects.
22624
22625	* UI/Templates/UIxPageFrame.wox: use the exact html code as below.
22626
22627	* UI/Templates/MailerUI/UIxMailMainFrame.wox: redone the
22628	linkbanner as a DIV instead of a TABLE.
22629
22630	* UI/MailerUI/UIxMailMainFrame.m [UIxMailMainFrame
22631	showLinkBanner]:
22632	returns 'YES' to request the display of the navigation bar between
22633	applets.
22634
226352006-06-15      ludovic@inverse.ca
22636
22637	* It's now possible to set the default
22638	domain using for email using the
22639	SOGoDefaultMailDomain preference key.
22640
226412006-06-15	ludovic@inverse.ca
22642
22643	* Initial import of SOGo from trunk.
22644
22645