CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2022-04-22T16:16:45Zhttps://lab.civicrm.org/dev/core/-/issues/3312A Contact with a Pending membership cannot be merged with another Contact due...2022-04-22T16:16:45Zjustinfreeman (Agileware)A Contact with a Pending membership cannot be merged with another Contact due to missing membership End DateA Contact with a Pending membership cannot be merged with another Contact due to missing membership End Date.
The membership End Date is not set on a pending membership.
The sequence of events is:
1. Contact signs up for new membership
...A Contact with a Pending membership cannot be merged with another Contact due to missing membership End Date.
The membership End Date is not set on a pending membership.
The sequence of events is:
1. Contact signs up for new membership
1. Contact already exists in CiviCRM (as a non-member) - or is similar contact
1. CiviCRM Admin tries to merge the two Contacts
1. The generic: DB Error: unknown error is then raised
Copy of error from CiviCRM logs.
```
Dec 06 12:32:20 [info] $Fatal Error Details = Array
(
[callback] => Array
(
[0] => CRM_Core_Error
[1] => handle
)
[code] => -1
[message] => DB Error: unknown error
[mode] => 16
[debug_info] => UPDATE civicrm_membership SET end_date = '' WHERE id=281 [nativecode=1292 ** Incorrect date value: '' for column 'end_date' at row 1]
[type] => DB_Error
[user_info] => UPDATE civicrm_membership SET end_date = '' WHERE id=281 [nativecode=1292 ** Incorrect date value: '' for column 'end_date' at row 1]
[to_string] => [db_error: message="DB Error: unknown error" code=-1 mode=callback callback=CRM_Core_Error::handle prefix="" info="UPDATE civicrm_membership SET end_date = '' WHERE id=281 [nativecode=12
92 ** Incorrect date value: '' for column 'end_date' at row 1]"]
)
```
Agileware Ref: CIVICRM-1122https://lab.civicrm.org/dev/core/-/issues/3309Deleting memberships does not delete its related line item.2023-12-30T05:03:26ZjitendraDeleting memberships does not delete its related line item.To replicate -
- Create a membership.
- A new row is inserted in civicrm_line_item.
- Delete the membership from civicrm.
- The line item row remains as it is and is never removed from the database.
@eileen @JoeMurray @monish.deb Do w...To replicate -
- Create a membership.
- A new row is inserted in civicrm_line_item.
- Delete the membership from civicrm.
- The line item row remains as it is and is never removed from the database.
@eileen @JoeMurray @monish.deb Do we really need this information in the table?jitendrajitendrahttps://lab.civicrm.org/dev/core/-/issues/3299Make alerts accessible2022-04-22T16:04:58ZJoeMurrayMake alerts accessibleFrom Clare comes a problem statement and some brainstorming ideas:
> A problem for our low vision users is alerts, their AT software doesn't recognise them, so they miss warnings and end up adding duplicates. It would be great to have s...From Clare comes a problem statement and some brainstorming ideas:
> A problem for our low vision users is alerts, their AT software doesn't recognise them, so they miss warnings and end up adding duplicates. It would be great to have some sort of per user control for setting how alerts display, perhaps even adding audio cues.
Use alert role approach suggested at https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/alert/index.html as this will allow audio cues to be given to users of screen readers.
Note more details at https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/#alert and also https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/#alertdialog
https://www.w3.org/TR/UNDERSTANDING-WCAG20/time-limits-no-exceptions.html indicates that there should be no time limits like quickly disappearing alerts.
As a first pass, let's implement a site wide setting to disable alerts from disappearing. We don't have a good design pattern currently for per user preferences. When we do move to per user preferences, the default should be to have alerts not disappear.justinfreeman (Agileware)justinfreeman (Agileware)https://lab.civicrm.org/dev/core/-/issues/3296Add aria-label (and label?) to form elements missing them2022-04-22T16:04:46ZJoeMurrayAdd aria-label (and label?) to form elements missing themUse accessible labels for all pages/forms following spec at https://www.w3.org/WAI/tutorials/forms/labels.
Tasks will include the following general points. Some details will change to ensure that ts() is handled properly, addField() is...Use accessible labels for all pages/forms following spec at https://www.w3.org/WAI/tutorials/forms/labels.
Tasks will include the following general points. Some details will change to ensure that ts() is handled properly, addField() is used appropriately, etc from comments below:
1. Label without control elements/text: In some pages/forms we are simply declaring labels under `<label>` tag against an element/text.
1. Remove tag when it is declared against a text as in
```
- <div class="label"><label>{ts}Contact{/ts}</label></div>
+ <div class="label">{ts}Contact{/ts}</div>
```
1. Add `aria-labelledby` attribute to tag
```
- <label>{ts}Contact{/ts}</label><input type="text" name="contact_id" id="contact_id">
+ <label aria-labelledby="contact_id">{ts}Contact{/ts}</label><input type="text" name="contact_id" id="contact_id">
```
1. Add aria-label attribute to QuickForm element when label is not declared in tpl: Say for example we are assigning a label to a QuickForm element
`$form->addElement('text', 'pledge_installments', ts('Installments'), array('size' => 3));` but not using it in tpl.
**Fix**: Add aria-label attribute to QuickForm element:
```
- $form->addElement('text', 'pledge_installments', ts('Installments'), array('size' => 3));
+ $form->addElement('text', 'pledge_installments', ts('Installments'), array('size' => 3, 'aria-label' => ts('Pledge Installments')));
```
1. Add aria-label attribute to form element via JS: A special case when after declaring this attribute didn't got added to the QuickForm element as in case of 'Credit card Expiration date' when this element got rendered in the quickform as `$form->add('date', 'credit_card_exp_date', ts('Expiration Date'), ['format' => M Y'])` and thus rendered into two select field without this attribute
**Fix**: Add `aria-label` attribute via JS instead. This might involve modifying $.fn.crmDatepicker in Common.js to add aria-labels to the autogenerated date elements it inserts.
1. Fix date fields.
Focus initially on public facing pages/forms:
1. [x] contribution page
1. [x] event registration page
1. [x] price field block
1. [x] newsletter signup
1. [x] user registration in CMS
1. [x] profile create/edit/search
1. [x] contact dashboard
1. [x] contact summary page
1. [ ] CiviReports
1. [ ] Search Forms
1. [ ] Backend registration forms
https://lab.civicrm.org/dev/core/-/issues/3293Make menu more accessible2022-04-22T16:04:20ZJoeMurrayMake menu more accessiblePreliminary tasks, many from https://lab.civicrm.org/dev/accessibility/issues/1#note_4855 below:
1. [x] Hide D7 menubar
1. [x] Fix for D8
1. [x] After getting focus into top menu, tabbing and back-tabbing revealed there was something hid...Preliminary tasks, many from https://lab.civicrm.org/dev/accessibility/issues/1#note_4855 below:
1. [x] Hide D7 menubar
1. [x] Fix for D8
1. [x] After getting focus into top menu, tabbing and back-tabbing revealed there was something hidden between Quick Search textbox and the CiviCRM icon. Opening submenus and back-tabbing revealed it was the search options for the Quick Search textbox. Please remove this from tab order.
1. [x] After getting focus into top menu, Space did not open (and when repeated, close) child menu on current item. It should act similarly to Return.
1. [x] When focus is on an item that could be selected to navigate somewhere, Return worked fine but Space did not replicate this.
1. [x] When on an open sub-submenu (eg Contributions > Accounting Batches with Open Batches with focus), using left arrow correctly moved focus to Accounting Batches, but it did not close the sub-submenu.
1. [x] When on a submenu, using left arrow should close the submenu and move focus to parent item. Instead it moved focus to menu item to left of parent item. The submenu was left open when it should have been closed.
~~1. [ ] When on a sub-submenu, escape should only close that level of menu but closes both the sub-submenu and the submenu.~~
1. [ ] "First item in menu bar should be in the tab order (tabindex=0)." (https://staff.washington.edu/tft/tests/menus/index.html). This may be a bit of work to implement in all CMSes but I think tabindex=0 for CiviCRM menu makes sense as the default on CiviCRM pages on default CMS installs. The CiviCRM Menu left item should be considered the QuickSearch. There appears to be an item for a div around the textarea and a separate way to focus on the textarea itself. The div around the textarea should be tabindex=0.
1. [ ] The cited spec is relatively silent, but other accessible menus have different implementations on the following: 1) When focus is on top menu item and its submenu is open, left and right cycle focus to left and right top menu items and shift which submenu is open to the one under the top menu focussed item. 2a) When focus is on a submenu item left closes the submenu, cycles focus to left on top menu and opens that top menu's submenu. 2b) When focus is on a submenu item without a subsubmenu, right similarly closes submenu, cycles focus right on top menu and opens that top menu item's submenu. 2c) When focus is on a submenu item with a subsubmenu, right opens the subsubmenu. Let's change behaviour 1), 2a) and 2b) to not opening new submenu. Leave 2c) as is.
~~1. [ ] When focus is not on the menu, cursor hovering over a menu item brings focus to it and opens submenu. Submenu should not open until click, return or space.~~
A user should be able to navigate the menu bar by use of the keyboard:
1. [ ] The menu bar should occupy one tab stop
1. [ ] When focused on a menu at the top level:
1. [ ] The right arrow key should move the user to the next top-level menu
1. [ ] The left arrow key should move the user to the previous top level menu
1. [ ] User focus should wrap to the beginning if the user advances past the final menu item. Likewise, if the user tries to navigate to the previous item from the first menu, focus should wrap to the last menu.
1. [ ] The down-arrow and ENTER keys should expand a child menu and focus the user on the first item
~~1. [ ] When a character is typed, the next menu item starting with that letter receives the focus, circling around to first when there are no more. If no menu item starts with the typed character, focus does not move. (deprecated by HTML 5.2 accesskey standard)~~
1. [ ] When focused on a child menu
1. [ ] The down arrow key should move the user to the next menu item
1. [ ] The up arrow key should move the user to the previous menu item
1. [ ] The right arrow key should expand a menu item with a submenu and place user focus on the first item in that submenu. If there is no submenu, then no action is taken.
1. [ ] The left arrow key should collapse a submenu and place user focus on the parent of that submenu
1. [ ] The ESC key should close the active child menu, and any submenus, and return user focus to the parent menu at the top level.
~~1. [ ] When a character is typed, the next child menu item starting with that letter receives the focus, circling around to first when there are no more. If no child menu item starts with the typed character, focus does not move. (deprecated by HTML 5.2 accesskey standard)~~
Test the menu works on default installs (ie default theme!) on
1. [x] Drupal 7
1. [x] WordPress
1. [x] Joomla
1. [x] Backdrop
1. [x] Drupal 8
(NB: deliberately ignoring support for Drupal 6.)
Test the menu works on:
1. [x] Drupal 7 site with shoreditch theme installed
1. [x] Drupal 7 site with mosaico installed, on a CiviMail mosaico page.
A more detailed functional spec is provided at http://lists.w3.org/Archives/Public/wai-xtech/2007Dec/att-0025/index.html#menu
A good implementation that might be useful for its implementation details (seeing View Source) is https://staff.washington.edu/tft/tests/menus/simplyaccessible/index.html. As there are no sub-submenus, I imagine the code implementation needs to be extended to opening sub-submenus properly.
Was https://issues.civicrm.org/jira/browse/CRM-20824
Original description from https://civicrm.stackexchange.com/questions/17735/access-for-blind-users-to-civicrm/17752#17752
The menu bar is keyboard accessible, but awkwardly. Generally I find it best to focus on the first item then TAB (as opposed to arrowing) to the top level menu the user wants to interact with before pressing ENTER to activate the pop-up menu. You will then have to locate the HTML list element containing the menu choices. Often this element appears after the menu bar, or at the bottom of the virtual document (sometimes depending on the CMS theme, sometimes depending on, seemingly, the browser’s mood). In either case, it will not appear immediately “under” the activated menu.https://lab.civicrm.org/dev/core/-/issues/3268Deprecate `getBasicContactFields` in favor of `getColumns('Contact')`2022-04-22T15:53:15ZJonGoldDeprecate `getBasicContactFields` in favor of `getColumns('Contact')`@eileen has ported some of the cleaner code for defining report specs from Extended Reports to core in the form of `getColumns()` and `getContactColumns()`. Since this appears to be the direction we're headed in, I think it makes sense ...@eileen has ported some of the cleaner code for defining report specs from Extended Reports to core in the form of `getColumns()` and `getContactColumns()`. Since this appears to be the direction we're headed in, I think it makes sense to deprecate `getBasicContactColumns()`, which does a similar job. However, `getBasicContactColumns()` adds a bunch of fields to core reports that `getContactColumns` doesn't.
My PR adds all the missing fields to `getContactColumns` (except for "Organization Name"; this seems unnecessary since it will virtually always match the display name). I also mark `getBasicContactFields()` as deprecated so future cleanup can target reports using it.5.12.0JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/3266Form-Builder-Based Custom Searches2022-04-22T15:53:12Zjoshjosh@civicrm.orgForm-Builder-Based Custom SearchesThis project will allow user-friendly search screens to be built with the Search-Builder UI. Presently, custom searches must be implemented via PHP code. Prerequisite is the Search Builder UI report#32
Tasks:
- Integrate custom search s...This project will allow user-friendly search screens to be built with the Search-Builder UI. Presently, custom searches must be implemented via PHP code. Prerequisite is the Search Builder UI report#32
Tasks:
- Integrate custom search schema with Form Builder UI
- Implement API for creating custom searches
- Bridge legacy custom searches with the new systemcolemanwcolemanwhttps://lab.civicrm.org/dev/core/-/issues/3265APIv4-Based Reports2022-04-22T15:53:11Zjoshjosh@civicrm.orgAPIv4-Based ReportsThis project will allow report templates to be built with the Search-Builder UI. Presently, report templates must be implemented via PHP code. Prerequisite is the Search-Builder UI report#32
Tasks:
- Integrate report schema with Form B...This project will allow report templates to be built with the Search-Builder UI. Presently, report templates must be implemented via PHP code. Prerequisite is the Search-Builder UI report#32
Tasks:
- Integrate report schema with Form Builder UI
- Re-implement report system with APIv4 backend
- Implement API for creating report templates
- Bridge legacy report templates with the new systemcolemanwcolemanwhttps://lab.civicrm.org/dev/core/-/issues/3264Transaction Date filter in Bookkeeping Transactions report2022-04-22T15:53:09ZMWestergaardTransaction Date filter in Bookkeeping Transactions reportIn the Bookkeeping Transactions report, the filter for Transaction Date does not include time values and leads to missing data. For example, if today is February 10 and I filter Transaction Date on "Yesterday", the WHERE clause looks li...In the Bookkeeping Transactions report, the filter for Transaction Date does not include time values and leads to missing data. For example, if today is February 10 and I filter Transaction Date on "Yesterday", the WHERE clause looks like:
> ( financial_trxn.trxn_date >= '20190209') AND ( financial_trxn.trxn_date <= '20190209' )
Only transactions that occurred exactly at midnight are included. Contrast that with the filter for Date Received:
> ( contribution.receive_date >= '20190209000000') AND ( contribution.receive_date <= '20190209235959' )
I verified on dmaster and wpmaster.5.12.0https://lab.civicrm.org/dev/core/-/issues/3245Include random as an option when sorting displays2022-04-22T15:52:35Zjoshjosh@civicrm.orgInclude random as an option when sorting displaysCurrently on SearchKit displays, users can sort by a designated field using either "ascending" or "descending". I propose that we include an option to sort data in a "random" format.
![Screenshot_2021-__1_](/uploads/02ac6ff8f5609eddc51d...Currently on SearchKit displays, users can sort by a designated field using either "ascending" or "descending". I propose that we include an option to sort data in a "random" format.
![Screenshot_2021-__1_](/uploads/02ac6ff8f5609eddc51d64629d9e1ca1/Screenshot_2021-__1_.png)https://lab.civicrm.org/dev/core/-/issues/3239Contribution reports don't include thank-you date2022-04-22T15:51:49ZJonGoldContribution reports don't include thank-you dateThis is an issue that a couple of people have noted [on Stack Exchange](https://civicrm.stackexchange.com/questions/15374/thank-you-letter-report/15377). However, this is the first time anyone has paid me to fix it :) PR incoming.This is an issue that a couple of people have noted [on Stack Exchange](https://civicrm.stackexchange.com/questions/15374/thank-you-letter-report/15377). However, this is the first time anyone has paid me to fix it :) PR incoming.JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/3236No pagination on Contribution Detail report2022-04-22T15:51:42ZJonGoldNo pagination on Contribution Detail reportThis seems to be a side effect of [this commit](https://github.com/civicrm/civicrm-core/commit/e6bab5eae9e7293dff9ecb9852f85e6aa01dad7f#diff-585f40aa84b2e15ef6b0768dd64bfd0c) fixing core#170. I'm not 100% sure why this isn't happening o...This seems to be a side effect of [this commit](https://github.com/civicrm/civicrm-core/commit/e6bab5eae9e7293dff9ecb9852f85e6aa01dad7f#diff-585f40aa84b2e15ef6b0768dd64bfd0c) fixing core#170. I'm not 100% sure why this isn't happening on the sandbox, but I'm reasonably certain it's because servers without Full Group By use a different code path.
There were 2.5 bugs that needed to be fixed:
* The first temp table for this report sets a limit of 50 rows - so the second time through `buildQuery()`, the SQL statement `SELECT * FROM civireport_contribution_detail_temp3 $this->_orderBy` will never return more than 50, so the pager won't be set.
* `setPager()` assumes that a) the last SQL statement executed includes `SQL_CALC_FOUND_ROWS`; b) that `$this->limit` is set.
Finally, I found a call to `setPager()` in a place where it would never be correct (on a temp table that's not the "final" temp table) so I removed it.JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/3231Correct Mailing Report unique Count2022-04-22T15:51:27ZsunilCorrect Mailing Report unique CountMailing -> Scheduled and Sent Mailings -> Report
Unique Opens -> Report
Total Opens -> Report
Both Report show same count.Mailing -> Scheduled and Sent Mailings -> Report
Unique Opens -> Report
Total Opens -> Report
Both Report show same count.5.10https://lab.civicrm.org/dev/core/-/issues/3224Search Kit doesn't display related contact custom fields2022-04-22T15:51:13ZJonGoldSearch Kit doesn't display related contact custom fieldsIf you have a Search Kit that includes a related contact, displaying the related contact's custom data will actually show the main contact's custom data.
See screenshots below. Teresa has a most important issue of "Education", Santina'...If you have a Search Kit that includes a related contact, displaying the related contact's custom data will actually show the main contact's custom data.
See screenshots below. Teresa has a most important issue of "Education", Santina's is "Social Justice". When I build a search and include both the `Constituent Information: Most Important Issue` and `Contact Related Contacts: Constituent Information: Most Important Issue` columns, they both have the same value.
![Selection_1184](/uploads/ba7c2f496b001f8bd86536d9419b0035/Selection_1184.png)
![Selection_1185](/uploads/d28c833e256a6dcc091d5f1629a124f2/Selection_1185.png)
![Selection_1186](/uploads/65af3fd4f21cb09b60274a700ee2f580/Selection_1186.png)5.42.0https://lab.civicrm.org/dev/core/-/issues/3214Query scheduling & delivered results2022-04-30T09:08:20Zjoshjosh@civicrm.orgQuery scheduling & delivered resultsThis project will allow APIv4 queries to run in the background and notify or deliver results when complete. It supplements the Search-Builder UI project, making complex searches more manageable.
Tasks:
- Add background options to Search...This project will allow APIv4 queries to run in the background and notify or deliver results when complete. It supplements the Search-Builder UI project, making complex searches more manageable.
Tasks:
- Add background options to Search-Builder UI
- Implement queue runner service
- Implement delivery servicecolemanwcolemanwhttps://lab.civicrm.org/dev/core/-/issues/3212Participant Listing report filters incorrectly on role ID2023-12-24T05:03:20ZJonGoldParticipant Listing report filters incorrectly on role IDThis issue is identical to [CRM-18803](https://issues.civicrm.org/jira/browse/CRM-18803) except that CRM-18803 affected all other CiviReports with fields that stored values separated by `CRM_Core_DAO::VALUE_SEPARATOR`. Those were fixed ...This issue is identical to [CRM-18803](https://issues.civicrm.org/jira/browse/CRM-18803) except that CRM-18803 affected all other CiviReports with fields that stored values separated by `CRM_Core_DAO::VALUE_SEPARATOR`. Those were fixed everywhere else by [this PR](https://github.com/civicrm/civicrm-core/pull/8650). However, since the `where()` in this report is overridden, it has its own copy of the regex which wasn't fixed.
I grepped and confirmed this is the only place where this needs to be fixed, and applied the same regex as the commit above.
To replicate this bug, you need at least ten participant roles. The first one's value should be `1`. Searching on this value will return any participant whose role BEGINS with a `1` (i.e. `10`, `11`, `100`, etc.) rather than just records whose participant role value IS 1.JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/3206Cannot save a copy of a report without the "administer reports" permission2023-12-21T05:03:20ZbgmCannot save a copy of a report without the "administer reports" permissionTo reproduce:
* Create a user with the following permissions
* access CiviReport
* access Report Criteria
* save Report Criteria
* Go to an existing report (or a template)
* Refresh the results
* Under Actions, click "save as"
Re...To reproduce:
* Create a user with the following permissions
* access CiviReport
* access Report Criteria
* save Report Criteria
* Go to an existing report (or a template)
* Refresh the results
* Under Actions, click "save as"
Result: javascript error: "TypeError: $refresh_field.html() is undefined"
![report-saveas-2021-08-05_14-45](/uploads/fe812c8f50c77c51a5a010987cd9b86d/report-saveas-2021-08-05_14-45.png)https://lab.civicrm.org/dev/core/-/issues/3181PHP 8.12023-07-21T14:03:03ZJoeMurrayPHP 8.1We should support PHP 8.1.
The deprecations and breaking changes are listed in the release notes at https://www.php.net/releases/8.1/en.php#deprecations_and_bc_breaks
Here are the backward compatibility issues:
1. [ ] Tentative return...We should support PHP 8.1.
The deprecations and breaking changes are listed in the release notes at https://www.php.net/releases/8.1/en.php#deprecations_and_bc_breaks
Here are the backward compatibility issues:
1. [ ] Tentative return types in PHP built-in class methods
1. [ ] HTML entity en/decode functions process single quotes and substitute by default
1. [ ] $GLOBALS variable restrictions.
1. [ ] MySQLi: Default error mode set to exceptions
I am most worried about HTML encode/decode.
[ ] create edge test setup for PHP 8.1seamusleeseamusleehttps://lab.civicrm.org/dev/core/-/issues/2977When adding custom data set change default selected option2021-12-14T22:43:19ZBarijohnWhen adding custom data set change default selected optionOverview
----------------------------------------
Currently when adding a custom data set I always swap the default settings for showing the set. So I untick the Collapse this set on initial display and tick Collapse this set in Advanced...Overview
----------------------------------------
Currently when adding a custom data set I always swap the default settings for showing the set. So I untick the Collapse this set on initial display and tick Collapse this set in Advanced Search.
In my experience if I kept the default settings my Advanced Search can get out of control quite quickly but when looking at a summary page I have to keep clicking to open up the data set.
Current behaviour
----------------------------------------
![Screenshot_2021-12-02_at_13.32.34](/uploads/0ddb75a1bfa2571771c69fdd1a923e17/Screenshot_2021-12-02_at_13.32.34.png)
Proposed behaviour
----------------------------------------
![Screenshot_2021-12-02_at_13.32.57](/uploads/3de94103ee8053082d5da96bac3f092c/Screenshot_2021-12-02_at_13.32.57.png)
Comments
----------------------------------------
This might be something unique to how I like to set custom data sets up. So would be good to find the community consensus.5.46.0https://lab.civicrm.org/dev/core/-/issues/2949Saving "Debugging and Error Handling" screen sets "Disable outbound mail" for...2023-10-22T05:03:22ZBobSSaving "Debugging and Error Handling" screen sets "Disable outbound mail" for non-Production environmentsOverview
----------------------------------------
Saving the **Debugging and Error Handling** screen while the **Environment** field indicates Staging or Production sets the **Select Mailer** option on the **Settings - Outbound Maif** sc...Overview
----------------------------------------
Saving the **Debugging and Error Handling** screen while the **Environment** field indicates Staging or Production sets the **Select Mailer** option on the **Settings - Outbound Maif** screen to **Disable outbound mail**.
This occurs even when the **Environment** field is disabled due to the $civicrm_setting['domain']['environment'] variable in civicrm.settings.php.
Example use-case
----------------------------------------
1. Set **$civicrm_setting['domain']['environment']** to **Staging** or **Development**.
1. Click **Administer | System Settings | Outbound Email (SMTP/Sendmail)** and confirm that the selected **Select Mailer** option is not **Disable Outbound Mail**.
1. Click **Administer | System Settings | Debugging and Error Handling** and save the settings without making any changes.
1. Click **Administer | System Settings | Outbound Email (SMTP/Sendmail)** and observe that the **Select Mailer** option has changed to **Disable Outbound Mail**.
Current behavior
----------------------------------------
At the very least, this behavior is contrary to the note in the [documentation](https://docs.civicrm.org/sysadmin/en/latest/misc/staging-production/)
> This does NOT happen if you have set your Environment via civicrm.settings.php
This was particularly confusing for me because on my staging site, where in civicrm.settings.php the environment is set to Development and CIVICRM_MAIL_LOG is defined to route mail to a file, I went to the "Debugging and Error Handling" screen to simply enable debugging. Some time later I found that outbound mail had been disabled, and was clueless how that could have happened, as I had not changed either the environment mode or the outbound mail mode.
Proposed behavior
----------------------------------------
The state of the environment should not magically toggle other settings when saving the **Debugging and Error Handling** screen.
Non-Production environments should simply prevent internet email from being sent, while honoring the **CIVICRM_MAIL_LOG** variable.
Comments
----------------------------------------
_Anything else you would like the reviewer to note._