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