LocationType - Use standard delete function which calls hooks
[civicrm-core.git] / release-notes / 4.7.21.md
1 # CiviCRM 4.7.21
2
3 Released July 5, 2017
4
5 - **[Security advisories](#security)**
6 - **[Features](#features)**
7 - **[Bugs resolved](#bugs)**
8 - **[Miscellany](#misc)**
9 - **[Credits](#credits)**
10
11 ## <a name="security"></a>Security advisories
12
13 - **[CIVI-SA-2017-01](https://civicrm.org/advisory/civi-sa-2017-01-pingback-url-not-encrypted)** Pingback URL not encrypted
14 - **[CIVI-SA-2017-02](https://civicrm.org/advisory/civi-sa-2017-02-privilage-escalation-via-leaked-key)** Privilage escalation via leaked key
15 - **[CIVI-SA-2017-03](https://civicrm.org/advisory/civi-sa-2017-03-cross-site-scritping-in-the-recently-viewed-block)** Cross-site scripting in "Recently Viewed" block
16 - **[CIVI-SA-2017-04](https://civicrm.org/advisory/civi-sa-2017-04-incorrect-escaping-for-on-behalf-of-block)** Incorrect escaping for "On Behalf Of" block
17 - **[CIVI-SA-2017-05](https://civicrm.org/advisory/civi-sa-2017-05-incorrect-escaping-for-search-results-column)** Incorrect escaping for "Search Results" column
18 - **[CIVI-SA-2017-06](https://civicrm.org/advisory/civi-sa-2017-06-incorrect-escaping-in-drupal-views-integration)** Incorrect escaping in Drupal Views integration
19 - **[CIVI-SA-2017-07](https://civicrm.org/advisory/civi-sa-2017-07-insuffient-permission-check-in-mailing-report)** Insuffient permission-check in mailing report
20 - **[CIVI-SA-2017-08](https://civicrm.org/advisory/civi-sa-2017-08-upgrade-multiple-js-libraries)** Upgrade multiple JS libraries
21
22
23 ## <a name="features"></a>Features
24
25 ### Core CiviCRM
26
27 - **[CRM-18081](https://issues.civicrm.org/jira/browse/CRM-18081) Allow search
28 of active relationships during a custom range of dates
29 ([10333](https://github.com/civicrm/civicrm-core/pull/10333))**
30
31 It is now possible to filter on the active dates of a relationship in Advanced
32 Search and the Relationship Report. If relationship start and end dates are
33 filled accurately, this allows finding active relationships at a specified
34 point in time.
35
36 - **[CRM-20692](https://issues.civicrm.org/jira/browse/CRM-20692) Support jQuery
37 options in AngularJS `crm-ui-tab-set`
38 ([10477](https://github.com/civicrm/civicrm-core/pull/10477))**
39
40 jQuery UI supports various tab set options. This change allows for the
41 options to be passed through from `crm-ui-tab-set` `<div>` elements in
42 AngularJS.
43
44 - **[CRM-20680](https://issues.civicrm.org/jira/browse/CRM-20680) Make the
45 CiviCRM logo spin while waiting for next page to load
46 ([10465](https://github.com/civicrm/civicrm-core/pull/10465))**
47
48 The spinning logo in the navigation menu provides visual indication that a new
49 page is loading.
50
51 - **[CRM-20679](https://issues.civicrm.org/jira/browse/CRM-20679) Make the
52 CiviCRM logo spin while quicksearch is running
53 ([10464](https://github.com/civicrm/civicrm-core/pull/10464))**
54
55 This provides confirmation that the search is running.
56
57 - **[CRM-20715](https://issues.civicrm.org/jira/browse/CRM-20715) Add index on
58 `is_deceased` column in `civicrm_contact`
59 ([10489](https://github.com/civicrm/civicrm-core/pull/10489))**
60
61 Queries filtering deceased contacts will have improved performance now that the `is_deceased` field is indexed.
62
63 - **[CRM-20552](https://issues.civicrm.org/jira/browse/CRM-20552) Task for "Add
64 Relationship - to individual" is missing
65 ([10360](https://github.com/civicrm/civicrm-core/pull/10360)) (completes prior
66 work)**
67
68 The various search result actions for adding relationships based on different
69 contact types are now abstracted to a single class.
70
71 - **[CRM-20684](https://issues.civicrm.org/jira/browse/CRM-20684) Standalone
72 form for contact bulk actions
73 ([10471](https://github.com/civicrm/civicrm-core/pull/10471))**
74
75 A number of search result actions for contacts can now be accessed directly
76 from their own URLs rather than solely from search results.
77
78 - **[CRM-20594](https://issues.civicrm.org/jira/browse/CRM-20594) Optimze
79 Relationship Count on Contact Summary View
80 ([10371](https://github.com/civicrm/civicrm-core/pull/10371))**
81
82 The relationship count for a contact is now calculated by using the `COUNT()`
83 SQL function rather than counting the number of rows in the query result.
84
85 - **[CRM-20238](https://issues.civicrm.org/jira/browse/CRM-20238) Hook for
86 inbound SMS messages
87 ([10347](https://github.com/civicrm/civicrm-core/pull/10347))**
88
89 See
90 [hook_civicrm_inboundSMS](https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_inboundSMS/)
91
92 - **[CRM-20575](https://issues.civicrm.org/jira/browse/CRM-20575) Allow user to
93 set created_id field for batch
94 ([10358](https://github.com/civicrm/civicrm-core/pull/10358))**
95
96 If custom code modifies the batch creation form, it can specify the contact ID
97 creating the batch.
98
99 - **[CRM-20091](https://issues.civicrm.org/jira/browse/CRM-20091) Case custom
100 fields blocks ([10540](https://github.com/civicrm/civicrm-core/pull/10540),
101 [10482](https://github.com/civicrm/civicrm-core/pull/10482), and
102 [10460](https://github.com/civicrm/civicrm-core/pull/10460)) (tangential work)**
103
104 A new CustomValue.getTree API action retrieves the labels and values for all
105 of an entity's custom fields, given the entity's type and ID.y54
106
107 - **[CRM-20600](https://issues.civicrm.org/jira/browse/CRM-20600) Expose
108 AngularJS screens to hooks
109 ([10085](https://github.com/civicrm/civicrm-core/pull/10085) and
110 [10381](https://github.com/civicrm/civicrm-core/pull/10381))**
111
112 HTML partials in AngularJS can now be modified using
113 `hook_civicrm_alterAngular`. In addition, manipulated and compiled HTML is
114 now cached in the files directory.
115
116 - **Surface errors from API calls to user on status page.
117 ([10380](https://github.com/civicrm/civicrm-core/pull/10380))**
118
119 API debug information in status checks now appear with the resulting message.
120
121 ### CiviCase
122
123 - **[CRM-20475](https://issues.civicrm.org/jira/browse/CRM-20475) People
124 involved tab ([10438](https://github.com/civicrm/civicrm-core/pull/10438))**
125
126 The phone number for related contacts is now avaiable in the API.
127
128 - **[CRM-20097](https://issues.civicrm.org/jira/browse/CRM-20097) Case action
129 menu ([10288](https://github.com/civicrm/civicrm-core/pull/10288)) (unrelated
130 fixes)**
131
132 The Case API now has better handling for activities with multiple related
133 cases.
134
135 ### CiviMail
136
137 - **[CRM-20309](https://issues.civicrm.org/jira/browse/CRM-20309) Ensure A/B
138 tests can be sent in parallel
139 ([10227](https://github.com/civicrm/civicrm-core/pull/10227))**
140
141 This change improves A/B testing where the test group is larger than the
142 mailer job size. In these cases, each mailer job is scheduled one second
143 after the prior one, ensuring that the first *A* job is followed by the first
144 *B* job, then the next *A* job, and so on.
145
146 - **[CRM-20370](https://issues.civicrm.org/jira/browse/CRM-20370) include
147 additional stats in mailing opened/click reports
148 ([10089](https://github.com/civicrm/civicrm-core/pull/10089))**
149
150 Open date and click date are now available as CiviMail reports.
151
152 ### Drupal Integration
153
154 - **[CRM-20462](https://issues.civicrm.org/jira/browse/CRM-20462) Add filter for
155 current employer in views
156 ([443](https://github.com/civicrm/civicrm-drupal/pull/443))**
157
158 This feature is now available in Drupal 6.x for CiviCRM 4.7.x. It was
159 previously added for other Drupal-CiviCRM version combinations.
160
161 - **[CRM-20205](https://issues.civicrm.org/jira/browse/CRM-20205) Expose current
162 employer id to views
163 ([434](https://github.com/civicrm/civicrm-drupal/pull/434) and
164 [433](https://github.com/civicrm/civicrm-drupal/pull/433))**
165
166 The current employer ID is now available as a display, contextual filter,
167 filter, and sort field in Views.
168
169 ### Joomla Integration
170
171 - **[CRM-12059](https://issues.civicrm.org/jira/browse/CRM-12059) Support
172 hook_civicrm_permissions on Joomla
173 ([10344](https://github.com/civicrm/civicrm-core/pull/10344) and
174 [43](https://github.com/civicrm/civicrm-joomla/pull/43))**
175
176 CiviCRM permissions in Joomla can now be defined dynamically, allowing
177 extensions using `hook_civicrm_permissions` to work properly
178
179 ## <a name="bugs"></a>Bugs resolved
180
181 ### Core CiviCRM
182
183 - **[CRM-20642](https://issues.civicrm.org/jira/browse/CRM-20642) Show/Hide Case
184 activity toggle
185 ([10451](https://github.com/civicrm/civicrm-core/pull/10451)) (preliminary
186 work)**
187
188 This fixes a bug in the Activity.get API where filtering on null case, tag, or
189 file ID would yield inconsistent results.
190
191 - **[CRM-20590](https://issues.civicrm.org/jira/browse/CRM-20590) Add pre and
192 post hook for EntityBatch
193 ([10366](https://github.com/civicrm/civicrm-core/pull/10366))**
194
195 - **[CRM-20588](https://issues.civicrm.org/jira/browse/CRM-20588) Pre and Post
196 hook for Batch ([10364](https://github.com/civicrm/civicrm-core/pull/10364))**
197
198 - **[CRM-20585](https://issues.civicrm.org/jira/browse/CRM-20585) Correct the
199 from and to accounts for deferred revenue transactions
200 ([10367](https://github.com/civicrm/civicrm-core/pull/10367))**
201
202 The from and to accounts for deferred revenue transactions were reversed. This
203 change corrects them moving forward, but it does not affect previously-created
204 transactions.
205
206 - **[CRM-20768](https://issues.civicrm.org/jira/browse/CRM-20768) Web-based
207 installation should accept non-standard MySQL port
208 ([10555](https://github.com/civicrm/civicrm-core/pull/10555))**
209
210 - **[CRM-20644](https://issues.civicrm.org/jira/browse/CRM-20644) Column names
211 on Advanced search results displayed on contacts are out of order.
212 ([10556](https://github.com/civicrm/civicrm-core/pull/10556))**
213
214 - **[CRM-18408](https://issues.civicrm.org/jira/browse/CRM-18408) SMTP
215 connection via SSL and TLS in PHP 5.6
216 ([10329](https://github.com/civicrm/civicrm-core/pull/10329)) (preliminary
217 work)**
218
219 This loads a more recent build of `cacert.pem` for use on hosts which lack one.
220
221 - **[CRM-20556](https://issues.civicrm.org/jira/browse/CRM-20556) DataTables
222 warning on merge screen
223 ([10503](https://github.com/civicrm/civicrm-core/pull/10503))**
224
225 This resolves a warning appearing on the duplicate contact merge listing
226 indicating that it could not reinitialize DataTable.
227
228 - **[CRM-20672](https://issues.civicrm.org/jira/browse/CRM-20672) Related Fields
229 don't populate for relationships with contact type "All Contacts" when mapping
230 an export ([10456](https://github.com/civicrm/civicrm-core/pull/10456))**
231
232 - **[CRM-20226](https://issues.civicrm.org/jira/browse/CRM-20226) Parent Group
233 do not inherit child group contacts
234 ([10428](https://github.com/civicrm/civicrm-core/pull/10428))**
235
236 A bug was fixed where members of smart groups would not appear as members of
237 parent groups of the smart group.
238
239 - **[CRM-20381](https://issues.civicrm.org/jira/browse/CRM-20381) Can't stop
240 geocoding on import
241 ([10181](https://github.com/civicrm/civicrm-core/pull/10181))**
242
243 This fixes a regression where imported contacts' addresses were geocoded
244 despite bypassing geocoding in the import settings.
245
246 - **[CRM-20655](https://issues.civicrm.org/jira/browse/CRM-20655) Notice error
247 on batch listing
248 ([10436](https://github.com/civicrm/civicrm-core/pull/10436))**
249
250 - **Add help text to civicrm.settings.php re: DSNs containing quotes/backslashes
251 ([10437](https://github.com/civicrm/civicrm-core/pull/10437))**
252
253 - **[CRM-20618](https://issues.civicrm.org/jira/browse/CRM-20618) Generate
254 contact image if contact id is present
255 ([10396](https://github.com/civicrm/civicrm-core/pull/10396))**
256
257 This prevents a contact image from being generated for a transaction unless
258 the transaction is actually related to a contact.
259
260 - **[CRM-20606](https://issues.civicrm.org/jira/browse/CRM-20606) Incorrect
261 state/province names for Austria
262 ([10391](https://github.com/civicrm/civicrm-core/pull/10391))**
263
264 Two states of Austria were missing umlauts.
265
266 - **[CRM-20589](https://issues.civicrm.org/jira/browse/CRM-20589) Warning on
267 Batch listing page
268 ([10365](https://github.com/civicrm/civicrm-core/pull/10365))**
269
270 - **Remove call to nonexistent method
271 ([10382](https://github.com/civicrm/civicrm-core/pull/10382))**
272
273 A failure in Redis caching would call a nonexistent cache method.
274
275 - **[CRM-20578](https://issues.civicrm.org/jira/browse/CRM-20578) Empty update
276 of Activity assignee/target results into DB error
277 ([10361](https://github.com/civicrm/civicrm-core/pull/10361))**
278
279 - **[CRM-19896](https://issues.civicrm.org/jira/browse/CRM-19896)
280 customTranslateFunction not mapped in MagicMerge
281 ([9790](https://github.com/civicrm/civicrm-core/pull/9790))**
282
283 - **[CRM-20740](https://issues.civicrm.org/jira/browse/CRM-20740) Api fails to
284 check on custom field is null in some cases
285 ([10512](https://github.com/civicrm/civicrm-core/pull/10512))**
286
287 - **[CRM-19610](https://issues.civicrm.org/jira/browse/CRM-19610) Fatal when
288 creating InnoDB fts indexes
289 ([10453](https://github.com/civicrm/civicrm-core/pull/10453) and
290 [10491](https://github.com/civicrm/civicrm-core/pull/10491))**
291
292 - **[CRM-20581](https://issues.civicrm.org/jira/browse/CRM-20581) Civi event
293 users do not have access to StateProvince entity via the API
294 ([10363](https://github.com/civicrm/civicrm-core/pull/10363))**
295
296 All contacts with "Access CiviCRM" permission now can access all states and
297 provinces.
298
299 ### CiviContribute
300
301 - **[CRM-20253](https://issues.civicrm.org/jira/browse/CRM-20253) backend
302 contribution receipt sent when option not selected
303 ([10502](https://github.com/civicrm/civicrm-core/pull/10502),
304 [10509](https://github.com/civicrm/civicrm-core/pull/10509),
305 [10508](https://github.com/civicrm/civicrm-core/pull/10508), and
306 [10506](https://github.com/civicrm/civicrm-core/pull/10506))**
307
308 - **[CRM-20718](https://issues.civicrm.org/jira/browse/CRM-20718) CiviCRM,
309 Contribution page, when using the "On behalf of" Organisation Profile,
310 fieldset title uses hardcoded "Organization Details"
311 ([10499](https://github.com/civicrm/civicrm-core/pull/10499))**
312
313 The on-behalf profile now uses the profile's name rather than "Organization
314 Details".
315
316 - **[CRM-20690](https://issues.civicrm.org/jira/browse/CRM-20690) No more than
317 25 Price Options listed
318 ([10476](https://github.com/civicrm/civicrm-core/pull/10476))**
319
320 This displays all options on a price field rather than the first 25.
321
322 - **[CRM-20706](https://issues.civicrm.org/jira/browse/CRM-20706) Notice error
323 on using Contribution.getfield API
324 ([10484](https://github.com/civicrm/civicrm-core/pull/10484))**
325
326 - **[CRM-20574](https://issues.civicrm.org/jira/browse/CRM-20574) Deprecated:
327 Group=''. Name='cvv_backoffice_required'.
328 ([10357](https://github.com/civicrm/civicrm-core/pull/10357))**
329
330 - **[CRM-20516](https://issues.civicrm.org/jira/browse/CRM-20516) Card type
331 widget appears on front end when a different processor selected
332 ([10375](https://github.com/civicrm/civicrm-core/pull/10375))**
333
334 - **[CRM-20564](https://issues.civicrm.org/jira/browse/CRM-20564) custom date
335 fields in on-behalf-of forms broken
336 ([10354](https://github.com/civicrm/civicrm-core/pull/10354))**
337
338 - **[CRM-20747](https://issues.civicrm.org/jira/browse/CRM-20747)
339 `{contribution.campaign}` token not working on Contribution ThankYou letter
340 ([10575](https://github.com/civicrm/civicrm-core/pull/10575))**
341
342 - **[CRM-20678](https://issues.civicrm.org/jira/browse/CRM-20678)
343 Repeattransaction produces contribution in default currency - instead of the
344 series' currency
345 ([10490](https://github.com/civicrm/civicrm-core/pull/10490))**
346
347 - **[CRM-19963](https://issues.civicrm.org/jira/browse/CRM-19963) Paypal Express
348 not working in German
349 ([9779](https://github.com/civicrm/civicrm-core/pull/9779))**
350
351 Various conditions were conditional upon the locally-translated label of
352 PayPal rather than the fixed name.
353
354 ### CiviEvent
355
356 - **[CRM-20611](https://issues.civicrm.org/jira/browse/CRM-20611) Cancelling a
357 line-item by changing fee selection of event, leads to incorrect financial
358 records ([10390](https://github.com/civicrm/civicrm-core/pull/10390))**
359
360 - **method cannot be a protected static
361 ([10404](https://github.com/civicrm/civicrm-core/pull/10404))**
362
363 The method CRM_Event_Form_Registration_Register::getRegistrationContactID was
364 marked as protected, even though it was called from
365 CRM_Event_Form_Registration_AdditionalParticipant.
366
367 - **[CRM-20613](https://issues.civicrm.org/jira/browse/CRM-20613) User
368 deprecated function: Deprecated function for New Participant
369 ([10392](https://github.com/civicrm/civicrm-core/pull/10392))**
370
371 This avoids notices when creating new participants from the backend.
372
373 - **[CRM-20562](https://issues.civicrm.org/jira/browse/CRM-20562) Wrong
374 Activities created during participant registration via completetransaction.
375 ([10362](https://github.com/civicrm/civicrm-core/pull/10362))**
376
377 ### CiviMail
378
379 - **[CRM-20694](https://issues.civicrm.org/jira/browse/CRM-20694) CiviMail
380 Report is missing Resubscribe Message
381 ([10479](https://github.com/civicrm/civicrm-core/pull/10479))**
382
383 - **[CRM-20660](https://issues.civicrm.org/jira/browse/CRM-20660) Mail Summary
384 Report showing same number for Total Opens and Unique Opens
385 ([10443](https://github.com/civicrm/civicrm-core/pull/10443))**
386
387 This resolves a problem where the Total Opens count was only querying
388 `DISTINCT` open results.
389
390 - **[CRM-20789](https://issues.civicrm.org/jira/browse/CRM-20789) Unsubscribing
391 from an AB test does not work in 4.7.21
392 ([10583](https://github.com/civicrm/civicrm-core/pull/10583))**
393
394 ### CiviMember
395
396 - **[CRM-20675](https://issues.civicrm.org/jira/browse/CRM-20675) Membership
397 status update creates renewal activity
398 ([10598](https://github.com/civicrm/civicrm-core/pull/10598))**
399
400 ### Backdrop Integration
401
402 - **[CRM-20612](https://issues.civicrm.org/jira/browse/CRM-20612) Error:
403 undefined function config() when installing on Backdrop
404 ([10389](https://github.com/civicrm/civicrm-core/pull/10389))**
405
406 ### Drupal Integration
407
408 - **[CRM-20698](https://issues.civicrm.org/jira/browse/CRM-20698) Make
409 "disabled" table rows appear greyed-out
410 ([10481](https://github.com/civicrm/civicrm-core/pull/10481))**
411
412 CSS in the Seven theme conflicts with CiviCRM's CSS, preventing rows of
413 disabled records from having grey text.
414
415 - **Improve Views checkbox value handling
416 ([448](https://github.com/civicrm/civicrm-drupal/pull/448) and
417 [449](https://github.com/civicrm/civicrm-drupal/pull/449))**
418
419 - **[CRM-19303](https://issues.civicrm.org/jira/browse/CRM-19303) CKEditor
420 configuration can't be edited on a Drupal multisite installation
421 ([10577](https://github.com/civicrm/civicrm-core/pull/10577) and
422 [10511](https://github.com/civicrm/civicrm-core/pull/10511))**
423
424 ## <a name="misc"></a>Miscellany
425
426 - **[CRM-20744](https://issues.civicrm.org/jira/browse/CRM-20744) Use
427 bower_compoents images for datatable rather than packages
428 ([10520](https://github.com/civicrm/civicrm-core/pull/10520))**
429
430 - **[CRM-20561](https://issues.civicrm.org/jira/browse/CRM-20561) Load
431 Net_SMTP, Auth_SASL, Net_Socket via Composer
432 ([10384](https://github.com/civicrm/civicrm-core/pull/10384),
433 [3](https://github.com/seamuslee001/civicrm-core/pull/3),
434 [4](https://github.com/seamuslee001/civicrm-core/pull/4),
435 [10385](https://github.com/civicrm/civicrm-core/pull/10385),
436 [185](https://github.com/civicrm/civicrm-packages/pull/185), and
437 [186](https://github.com/civicrm/civicrm-packages/pull/186))**
438
439 - **[CRM-20687](https://issues.civicrm.org/jira/browse/CRM-20687) Issue numbers
440 used as variables
441 ([10473](https://github.com/civicrm/civicrm-core/pull/10473))**
442
443 - **(NFC) re add in animated-overlay.gif is no longer provided by jquery-ui
444 ([10523](https://github.com/civicrm/civicrm-core/pull/10523))**
445
446 - **(NFC) Fix clearing messages to ensure test accuracy
447 ([10525](https://github.com/civicrm/civicrm-core/pull/10525))**
448
449 - **(NFC) Attribution Chirojeugd Vlaanderen
450 ([10519](https://github.com/civicrm/civicrm-core/pull/10519))**
451
452 - **[CRM-20620](https://issues.civicrm.org/jira/browse/CRM-20620) Use batch api
453 to retrieve all the batches
454 ([10397](https://github.com/civicrm/civicrm-core/pull/10397))**
455
456 When retrieving the list of transaction batches, the BAO now uses the API
457 rather than a direct SQL query.
458
459 - **API allows creating multiple addresses same location type
460 ([10510](https://github.com/civicrm/civicrm-core/pull/10510))**
461
462 This adds a test to confirm that two addresses with the same location type
463 *can* be added in APIv3, even though it is not the desired behavior in the
464 form layer or APIv4.
465
466 - **There's a better way to say it than "poor man's".
467 ([10500](https://github.com/civicrm/civicrm-core/pull/10500))**
468
469 Various comments referring to a "poor man's" version of something have been
470 modified to be more specific. Many contain implicit references to the Drupal
471 module [poormanscron](https://www.drupal.org/project/poormanscron), which has
472 less to do with poverty or masculinity than checking periodically for the
473 duration since the previous run of a task.
474
475 - **[CRM-20651](https://issues.civicrm.org/jira/browse/CRM-20651) Change
476 partial_amount_pay to partial_amount_to_pay for Partial Payment workflow
477 ([10433](https://github.com/civicrm/civicrm-core/pull/10433))**
478
479 - **(NFC) Civi\API\Kernel - Add more docblocks
480 ([10416](https://github.com/civicrm/civicrm-core/pull/10416))**
481
482 - **Fix passing null object
483 ([452](https://github.com/civicrm/civicrm-drupal/pull/452))**
484
485 - **Legacy function param cleanup
486 ([30](https://github.com/civicrm/civicrm-backdrop/pull/30))**
487
488 ## <a name="credits"></a>Credits
489
490 This release was developed by the following code authors:
491
492 Agileware - Agileware Team; Arkadiusz Rzadkowolski; Arun Singh; Australian
493 Greens - Seamus Lee; Blackfly Solutions - Alan Dixon; British Humanist
494 Association - Andrew West; Circle Interactive - Dave Jenkins; CiviCRM - Coleman
495 Watts, Tim Otten; CiviDesk - Yashodha Chaku; CompuCorp - Camilo Rodriguez,
496 Michael Devery; Coop SymbioTIC - Mathieu Lutfy; Effy Elden; Eli Lisseck;
497 Francesc Bassas i Bullich; Freeform Solutions - Herb van den Dool; Fuzion -
498 Chris Burgess, Eileen McNaughton, Jitendra Purohit; Ginkgo Street Labs - Frank
499 Gómez; JMA Consulting - Monish Deb, Pradeep Nayak; Joinery - Allen Shaw; Jon
500 Goldberg; Lemniscus - Noah Miller; Lighthouse Design and Consulting - Brian
501 Shaughnessy; Oxfam Germany - Thomas Schüttler; Progressive Technology Project -
502 Jamie McClelland; Redfin Solutions - Chris Wells; Romain Thouvenin; Sean Madsen;
503 Systopia - Björn Endres; Web Access - Kurund Jalmi; Wikimedia Foundation -
504 Eileen McNaughton
505
506 Most authors also reviewed code for this release; in addition, the following
507 reviewers contributed their comments:
508
509 Alcohol Justice - Bruce Wolfe; Alex Block; Andy Clarke; Blackfly Solutions -
510 Alan Dixon; Bob Silvern; Bob Vincent; Business & Code - Alain Benbassat; Circle
511 Interactive - Martin Castle; CiviDesk - Nicolas Ganivet; CiviHosting - Hershel
512 Robinson; CompuCorp - Guanhuan Chen, Mirela Stanila; Donald Hirst; Fuzion -
513 Peter Davis; Ginkgo Street Labs - Dan O'Brien; James van der Hoven; JMA
514 Consulting - Joe Murray; Joanne Chester; Johan Vervloet; Korlon - Stuart Gaston;
515 MC3 - Graham Mitchell; Michal Mach; Milton Zurita; MJW Consulting - Matthew
516 Wire; Nubay Services - David Tarrant; Registered Nurses' Association of Ontario -
517 Thomas Mannell; Richard van Oosterhout; Semper IT - Karin Gerritsen; Skvare -
518 Mark Hanna; Systopia - Fabian Schuttenberg; Tech To The People - Xavier Dutoit;
519 Web Access - Rohan Chavan; Wim De Craene