CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2023-03-20T01:39:56Zhttps://lab.civicrm.org/dev/core/-/issues/1921Remove unneccessary isoToDate function2023-03-20T01:39:56ZeileenRemove unneccessary isoToDate function**[CQ] Let's celebrate the recent 6 year anniversary of making isoToData unnecessary by getting it out of the code**
Prior to July 2014 the following would fail
```
$contribution->fetch();
$contribution->save();
```
because the fetch ...**[CQ] Let's celebrate the recent 6 year anniversary of making isoToData unnecessary by getting it out of the code**
Prior to July 2014 the following would fail
```
$contribution->fetch();
$contribution->save();
```
because the fetch format for dates was invalid for save.
However, that all changed once this was merged https://github.com/civicrm/civicrm-packages/commit/283da6111677fc2b0176902b4c9a5cbcf668a258
Except for the bits that provide handling for it still litter our codehttps://lab.civicrm.org/dev/core/-/issues/1842Brief Description of Work Done during First Month of GSoC Project- Probots an...2022-06-24T03:30:58Zkartik1000Brief Description of Work Done during First Month of GSoC Project- Probots and GitLab to GitHub IntegrationHey All, I am Kartik and I had been selected for the GSoC Project Probots and Gitlab to GitHub Integration and so far I have completed 1 month of this project out of 3 months and I would like to share with the CiviCRM Community of the wo...Hey All, I am Kartik and I had been selected for the GSoC Project Probots and Gitlab to GitHub Integration and so far I have completed 1 month of this project out of 3 months and I would like to share with the CiviCRM Community of the work-done during this project. For more info. regarding project details, you can refer here https://civicrm.org/blog/kartik1000/gsoc-project-probots-and-gitlab-github-integration.
So, to begin with, one of the issues I faced, in the beginning, was how to test the working of the civi-bot that already exists in civi-core by adding more code to it related to issues I aimed to solve. So, with much discussion with @eileen and Saurabh, we decided to create a dev-bot from the forked repo of [probot-civicrm](https://github.com/civicrm/probot-civicrm) and use it for our purposes of testing. The code-repo for the same bot is present [here](https://github.com/kartik1000/civicrmdev-bot) with different issues I solved existing as different merged branches. Another issue I faced in setting up the dev-bot was hosting the bot. For the bot to be active always, we need to host it as a node-js application, the most suitable option for which are Heroku and glitch. For the simplicity of the glitch, I decided to use it for my purpose. The other issue that I faced was to keep the bot always active for that either one can use the ping method every 5 minutes or use the service of [uptime robot](https://uptimerobot.com/).
- The first issue I decided to complete was to make sure that we issue newcomer's message and information only to the new contributor and not keep posting the same message to every contributor. For this, I added simple logic of checking how many PRs have been made by the contributor, if the count is 1 then issue newcomer's message. It just required to fetch this information using the existing GitHub APIs. For the same reasons, I had to modify our existing template as well. The reviewing standards will be posted on every PR irrespective of it being a new contributor or not.
![Screenshot_2020-06-26_at_5.22.20_PM](/uploads/4f509c7f5511a91509d58084ba5fbb16/Screenshot_2020-06-26_at_5.22.20_PM.png)
This is an example of how a PR created by a new contributor looks like after making the required changes.
- The second issue I worked on is to merge the existing [stale-bot](https://probot.github.io/apps/stale/) with the existing civi-bot. Stale-bot closes PRs and issues which have been inactive for some time. It first labels PR as stale/wontfix and then after some-time, if the PR is still in-active then it closes the PR. This task was not too difficult as well since the entire open-source repo for the stale-bot already exists but since it is old many of its functions were depreciated and needed to be updated from the GitHub APIs and few other modifications were required. So, this task was also accomplished and tested as well.
![Screenshot_2020-06-26_at_5.36.20_PM](/uploads/05ecaa068e50f2e0ed89e43ddb68e81b/Screenshot_2020-06-26_at_5.36.20_PM.png)![Screenshot_2020-06-26_at_5.36.38_PM](/uploads/33aa7124ae2fd7757fa49cc723564f20/Screenshot_2020-06-26_at_5.36.38_PM.png)
Till now I have learnt a lot of new things from this project especially how powerful the GitHub APIs are which allow the user to receive almost any information regarding their repository. In the upcoming months, I hope to learn even more new things.
The entire code for the civicrmdev-bot is present in this [repository](https://github.com/kartik1000/civicrmdev-bot).
We plan to merge these features in the existing civi-bot in some time so that they can be used in CiviCRM-core.
I request to all the community members if you have any ideas or thoughts on what other things I can do to automate our workflow during the remaining project, please comment them on this issue and thanks to all!https://lab.civicrm.org/dev/core/-/issues/1379Status should be Pending Refund but stays at Completed2023-01-09T05:03:23Zmagnolia61Status should be Pending Refund but stays at CompletedTesting some more with price sets and recording refunds and payments I ran into the following issue, which is pretty specific but can be a symptom of something that should be changed.
STEPS:
1. Event registration with price set. Fee 50....Testing some more with price sets and recording refunds and payments I ran into the following issue, which is pretty specific but can be a symptom of something that should be changed.
STEPS:
1. Event registration with price set. Fee 50. Contribution status = pending
2. Record Payment of 50 euro. Contribution status = Completed
3. Change Event price set to Fee 25. Contribution status = Pending Refund
4. Record Refund of 25. Contribution status = Completed
All is well at this point. But check what happens next
5. Change Event price set to Fee 50. Contribution status should become: Partially Paid.
Instead it remains at completed. Event Balance = 25 (25 should still be paid).
Also the contribution amount should have become 50 again. But it remains to be 25.
Two observations:
a. When at step 5 a fee higher than the original 50 is selected (fi. 75 euro) then the contribution changes correctly to Partially Paid
b. Because the 'record payment' & 'record refund' buttons react to the contribution status rather than the Balance, they are not shown when the contribution has a false status of Completed.
As a sidenote I think the 'Record Payment' and 'Record Refund' buttons/links should always be available and other amounts than the full balance should be able to be refunded.
Tested this on the sandbox as shown below:
![Peek_2019-11-09_10-59](/uploads/7d6a80a12e83bf62c8fe30f534567399/Peek_2019-11-09_10-59.gif)https://lab.civicrm.org/dev/core/-/issues/2020Revert 20202022-10-11T14:54:01ZeileenRevert 2020Entirely. PleaseEntirely. Please2020-01-01https://lab.civicrm.org/dev/core/-/issues/723File custom fields cause a fatal error when trying to merge2019-05-30T21:47:13ZtommyboboFile custom fields cause a fatal error when trying to mergeIf you are trying to merge a contact with a custom field that is a file, if the contact that will be deleted is passing a file to the remain contact, the merge will fail, generate a fatal error, and lose all the custom data in the set in...If you are trying to merge a contact with a custom field that is a file, if the contact that will be deleted is passing a file to the remain contact, the merge will fail, generate a fatal error, and lose all the custom data in the set including the file.
To recreate:
1. Create a contact custom field that accepts a file.
2. Add files to one or two contact records.
3. Merge a contact with a file into another contact
4. Fatal Error occurs. All files are no longer attached to the custom fields. The contact to be deleted loses all the custom fields. While the remaining contact looses only the file.
If the contact that is to remain has no image the error message is
> **No record found for given file ID - 0 and entity ID - 203**
The Entity ID is the Contact ID of the remaining contact
> Feb 13 16:13:23 [info] $backTrace = #0 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Error.php(381): CRM_Core_Error::backtrace("backTrace", TRUE)
> #1 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/BAO/File.php(234): CRM_Core_Error::fatal("No record found for given file ID - 0 and entity ID - 203")
> #2 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Dedupe/Merger.php(1723): CRM_Core_BAO_File::deleteFileReferences(NULL, "203", 9)
> #3 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Contact/Form/Merge.php(289): CRM_Dedupe_Merger::moveAllBelongings("203", "204", (Array:11))
> #4 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Form.php(489): CRM_Contact_Form_Merge->postProcess()
> #5 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/StateMachine.php(160): CRM_Core_Form->mainProcess()
> #6 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/QuickForm/Action/Next.php(61): CRM_Core_StateMachine->perform(Object(CRM_Contact_Form_Merge), "next", "Next")
> #7 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/HTML/QuickForm/Controller.php(203): CRM_Core_QuickForm_Action_Next->perform(Object(CRM_Contact_Form_Merge), "next")
> #8 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/HTML/QuickForm/Page.php(103): HTML_QuickForm_Controller->handle(Object(CRM_Contact_Form_Merge), "next")
> #9 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Controller.php(351): HTML_QuickForm_Page->handle("next")
> #10 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Wrapper.php(113): CRM_Core_Controller->run()
> #11 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(282): CRM_Utils_Wrapper->run("CRM_Contact_Form_Merge", "Merge Contact", (Array:0))
> #12 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(84): CRM_Core_Invoke::runItem((Array:13))
> #13 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(52): CRM_Core_Invoke::_invoke((Array:3))
> #14 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm.php(1240): CRM_Core_Invoke::invoke((Array:3))
> #15 /srv/www/demo19/public_html/wp-includes/class-wp-hook.php(298): CiviCRM_For_WordPress->invoke("")
> #16 /srv/www/demo19/public_html/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters("", (Array:1))
> #17 /srv/www/demo19/public_html/wp-includes/plugin.php(453): WP_Hook->do_action((Array:1))
> #18 /srv/www/demo19/public_html/wp-admin/admin.php(222): do_action("toplevel_page_CiviCRM")
> #19 {main}
If the remaining contact has a file that will be overwritten.
>** DB Error: syntax error**
> [code] => -2
> [message] => DB Error: syntax error
> [mode] => 16
> [debug_info] => UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE entity_id = 203' at line 1]
> [type] => DB_Error
> [user_info] => UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE entity_id = 203' at line 1]
> [to_string] => [db_error: message="DB Error: syntax error" code=-2 mode=callback callback=CRM_Core_Error::handle prefix="" info="UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'WHERE entity_id = 203' at line 1]"]
> )
> #1 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/PEAR.php(921): CRM_Core_Error::handle(Object(DB_Error))
> #2 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB.php(985): PEAR_Error->__construct("DB Error: syntax error", -2, 16, (Array:2), "UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [native...")
> #3 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/PEAR.php(575): DB_Error->__construct(-2, 16, (Array:2), "UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [native...")
> #4 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/PEAR.php(223): PEAR->_raiseError(Object(DB_mysqli), NULL, -2, 16, (Array:2), "UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [native...", "DB_Error", TRUE)
> #5 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/common.php(1907): PEAR->__call("raiseError", (Array:7))
> #6 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/mysqli.php(933): DB_common->raiseError(-2, NULL, NULL, "UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203 [native...", "1064 ** You have an error in your SQL syntax; check the manual that correspon...")
> #7 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/mysqli.php(403): DB_mysqli->mysqliRaiseError()
> #8 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/common.php(1216): DB_mysqli->simpleQuery("UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203")
> #9 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/DataObject.php(2415): DB_common->query("UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203")
> #10 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/DataObject.php(1607): DB_DataObject->_query("UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203")
> #11 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/DAO.php(438): DB_DataObject->query("UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203")
> #12 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/DAO.php(1413): CRM_Core_DAO->query("UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203", TRUE)
> #13 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Dedupe/Merger.php(1736): CRM_Core_DAO::executeQuery("UPDATE civicrm_value_test_info_4 SET image_9 = WHERE entity_id = 203")
> #14 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Contact/Form/Merge.php(289): CRM_Dedupe_Merger::moveAllBelongings("203", "204", (Array:10))
> #15 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Form.php(489): CRM_Contact_Form_Merge->postProcess()
> #16 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/StateMachine.php(160): CRM_Core_Form->mainProcess()
> #17 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/QuickForm/Action/Next.php(61): CRM_Core_StateMachine->perform(Object(CRM_Contact_Form_Merge), "next", "Next")
> #18 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/HTML/QuickForm/Controller.php(203): CRM_Core_QuickForm_Action_Next->perform(Object(CRM_Contact_Form_Merge), "next")
> #19 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/packages/HTML/QuickForm/Page.php(103): HTML_QuickForm_Controller->handle(Object(CRM_Contact_Form_Merge), "next")
> #20 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Controller.php(351): HTML_QuickForm_Page->handle("next")
> #21 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Wrapper.php(113): CRM_Core_Controller->run()
> #22 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(282): CRM_Utils_Wrapper->run("CRM_Contact_Form_Merge", "Merge Contact", (Array:0))
> #23 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(84): CRM_Core_Invoke::runItem((Array:13))
> #24 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(52): CRM_Core_Invoke::_invoke((Array:3))
> #25 /srv/www/demo19/public_html/wp-content/plugins/civicrm/civicrm.php(1240): CRM_Core_Invoke::invoke((Array:3))
> #26 /srv/www/demo19/public_html/wp-includes/class-wp-hook.php(298): CiviCRM_For_WordPress->invoke("")
> #27 /srv/www/demo19/public_html/wp-includes/class-wp-hook.php(323): WP_Hook->apply_filters("", (Array:1))
> #28 /srv/www/demo19/public_html/wp-includes/plugin.php(453): WP_Hook->do_action((Array:1))
> #29 /srv/www/demo19/public_html/wp-admin/admin.php(222): do_action("toplevel_page_CiviCRM")5.15.0https://lab.civicrm.org/dev/core/-/issues/2Display Inbound Email: linefeed suppressed2024-03-26T10:22:28ZDetlev SieberDisplay Inbound Email: linefeed suppressedWhen viewing an activity of type inbound email, the text is displayed in "details". However, althought the database contains it in plain text and html, it is displayed as plain text without LFs, what makes it hardly readable.When viewing an activity of type inbound email, the text is displayed in "details". However, althought the database contains it in plain text and html, it is displayed as plain text without LFs, what makes it hardly readable.4.7.31https://lab.civicrm.org/dev/core/-/issues/3338Add 'membership start date' as an option when creating Scheduled Reminder bas...2022-04-22T16:17:42ZjitendraAdd 'membership start date' as an option when creating Scheduled Reminder based on MembershipThis is what we get as options
![image](/uploads/022c3bd1a4f8dbb12a4b6f034de33c55/image.png)
This ticket aims to add membership start date to the option list.
@eileen @totten I don't see any logical reason for not including it before....This is what we get as options
![image](/uploads/022c3bd1a4f8dbb12a4b6f034de33c55/image.png)
This ticket aims to add membership start date to the option list.
@eileen @totten I don't see any logical reason for not including it before. Have I missed something? Do you see any downsides on adding start date as an option?jitendrajitendrahttps://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/3579Add pause/resume functionality to civicrm bulk mailing.2022-06-11T14:54:43ZjitendraAdd pause/resume functionality to civicrm bulk mailing.Scenario
Site admin is sending out a big blast but want to send out a press release without waiting for first job to end.Scenario
Site admin is sending out a big blast but want to send out a press release without waiting for first job to end.5.4.0https://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/3320Admin Membership type is displayed on Public contribution page.2022-04-22T16:17:02ZjitendraAdmin Membership type is displayed on Public contribution page.When visibility of membership type is updated to `Admin`, it is still displayed on front-end contribution pages. Steps to replicate -
- Create a membership type.
- Add it to a contribution page.
- Set visibility of the type to `Admin`.
...When visibility of membership type is updated to `Admin`, it is still displayed on front-end contribution pages. Steps to replicate -
- Create a membership type.
- Add it to a contribution page.
- Set visibility of the type to `Admin`.
- Navigate to contribution page - the membership type is still displayed on the page.jitendrajitendrahttps://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/6Add help text for "is public" setting on form to edit custom field sets2023-06-23T17:54:21ZSean ColsenAdd help text for "is public" setting on form to edit custom field setsThere's a new setting for making custom field sets public/private. I think it needs some help text.
![mockup](https://user-images.githubusercontent.com/42411/36987279-f763aae0-2069-11e8-99c8-b3dd9953a895.png)
How exactly does CiviCRM c...There's a new setting for making custom field sets public/private. I think it needs some help text.
![mockup](https://user-images.githubusercontent.com/42411/36987279-f763aae0-2069-11e8-99c8-b3dd9953a895.png)
How exactly does CiviCRM change its behavior based on this setting?
As far as I can tell, this setting has only two effects:
* Custom fields attached directly to *events* are hidden from the event info page if they are part of a private custom field set
* from https://github.com/civicrm/civicrm-core/pull/10028
* Custom fields attached to some other entities (e.g. participation, contribution, etc... *not sure of comprehensive list*) are displayed in the registration email sent to participants, but only when this email comes from a back-office registration. These fields will be hidden if they're part of a private set.
* from https://github.com/civicrm/civicrm-core/pull/106615.8https://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/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/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/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/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/10Enabling plugin in CKEditor Default doesn't enable it in Civimail despite sho...2023-06-23T17:54:21Zluke.stewartEnabling plugin in CKEditor Default doesn't enable it in Civimail despite showing it as enabledWhen enabling a CKEditor plugin at: civicrm/admin/ckeditor if you add it to "Default" and press save.
At this point the plugin shows up on all three tabs, (Default, Civimail, CiviEvent) however the plugin doesn't appear on a new mail des...When enabling a CKEditor plugin at: civicrm/admin/ckeditor if you add it to "Default" and press save.
At this point the plugin shows up on all three tabs, (Default, Civimail, CiviEvent) however the plugin doesn't appear on a new mail despite clearing caches, and force refreshing the browser.
Navigating to the "Civimail" tab and pressing save there as well gives the desired behaviour that the plugin is enabled.![CKEditor](/uploads/5c8b21a886fbf4b0eb27cd0a0ba0d09d/CKEditor.png)
Tested on 4.7.27 and 4.7.31RC
To reproduce:
1. Navigate to civicrm/admin/ckeditor
1. Select a plugin from the plugin dropdown on the default tab
1. Obeserve additional component appears in preview
1. Click Save
1. Clear caches civicrm/admin/setting/updateConfigBackend
1. Create an new email -> civicrm/mailing/send?reset=1
1. Observe additional component that it doesn't show in the toolbar.
1. Return to civicrm/admin/ckeditor
1. Shift to the Civi mail tab. Observe the plugin is listed.
1. Scratch head.
1. Press save.
1. Create a new mail.
1. You now have the required plugin.
I haven't tested behaviour with regards to the event tab.https://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/11Email - send now error screen should display earlier2023-06-23T17:54:21ZJchesterEmail - send now error screen should display earlierIn Advanced Search if you are displaying results as contacts and then:
* select more than 50 of the results
* select **Email - send now (to 50 or less)**
you see the Error message telling you that you can't email more than 50 contac...In Advanced Search if you are displaying results as contacts and then:
* select more than 50 of the results
* select **Email - send now (to 50 or less)**
you see the Error message telling you that you can't email more than 50 contacts this way and the process stops
However, if you display the results as contributions or as memberships then
* select more than 50 of the results
* select **Email - send now (to 50 or less)**
you are taken to the email set up page. It is not until you click on Send Email on that page that you see the Error message telling you that you can't email more than 50 contacts this way and the process is stopped.
It would be a better user experience if the error message always appeared when **Email - send now (to 50 or less)** was selected.5.9https://lab.civicrm.org/dev/core/-/issues/3628Add pre/post hook for CRM_Mailing_BAO_MailingJob2022-06-15T11:19:25ZMonish DebAdd pre/post hook for CRM_Mailing_BAO_MailingJobThis ticket is about adding pre, post hook to MailingJob and it involve:
1. Call the pre/post hook inside `CRM_Mailing_BAO_MailingJob::create()`
2. Add `CRM_Mailing_BAO_MailingJob::deleteMailingJob` to delete Mailing Jobs and add pre/pos...This ticket is about adding pre, post hook to MailingJob and it involve:
1. Call the pre/post hook inside `CRM_Mailing_BAO_MailingJob::create()`
2. Add `CRM_Mailing_BAO_MailingJob::deleteMailingJob` to delete Mailing Jobs and add pre/post delete hook
3. Replace all the DAO call with corresponding create and delete fn in the codebase.Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/3542Move the cache for `CRM_Extension_Browser` out of the filesystem and use a `S...2022-06-16T02:21:42ZtiotsopMove the cache for `CRM_Extension_Browser` out of the filesystem and use a `SqlGroup` insteadThe current code in `CRM_Extension_Browser` is coded specifically for an adhoc, file-based caching logic. The recommendation standard is basically to change the backing/storage from a JSON file to the civicrm_cachetable (at least, for th...The current code in `CRM_Extension_Browser` is coded specifically for an adhoc, file-based caching logic. The recommendation standard is basically to change the backing/storage from a JSON file to the civicrm_cachetable (at least, for the typical usage).
Ref [#2](https://lab.civicrm.org/dev/cloud-native/issues/2#note_4790)5.52.0tiotsoptiotsophttps://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/3522Soften messages for read-only extensionsDir2022-06-11T14:41:07ZtiotsopSoften messages for read-only extensionsDirImprove messaging when someone has a different policy for managing `extensionsDir`.This a continuation of this [PR](https://github.com/civicrm/civicrm-core/pull/11895). Most of the messaging update has already been done. There is only on...Improve messaging when someone has a different policy for managing `extensionsDir`.This a continuation of this [PR](https://github.com/civicrm/civicrm-core/pull/11895). Most of the messaging update has already been done. There is only one message ("Read-Only Extensions"). It still encourages web-writable policy, but it lowers the severity and presents it a choice ("if you want X, do Y").
Probably, changing the `warning` into a `notice` is the only thing to update:- a `warning` implies something is wrong, while a `notice` says it's merely out of the ordinary.5.9tiotsoptiotsophttps://lab.civicrm.org/dev/core/-/issues/57On Behalf Of fails to populate in Email Receipt2022-01-04T06:27:07ZddoligalskiOn Behalf Of fails to populate in Email ReceiptWhen a Contribution is submitted and "On Behalf Of" is specified, the section on the emailed receipt does not render the On Behalf Of profile information.
We did a little digging, and it appears that the getOnbehalfIds() function is fai...When a Contribution is submitted and "On Behalf Of" is specified, the section on the emailed receipt does not render the On Behalf Of profile information.
We did a little digging, and it appears that the getOnbehalfIds() function is failing, attempting to get the relevant contact_id from the activity record, which has not yet been written.
We have seen this in 4.7.26, 4.7.27, and 4.7.29 and 5.x with both Drupal and WordPress.5.27.0https://lab.civicrm.org/dev/core/-/issues/3557Preview screen doesn't open until recipients list is built on mail compose sc...2022-06-11T14:51:02ZMonish DebPreview screen doesn't open until recipients list is built on mail compose screenTo replicate the issue:
1. Create a new mailing and fill out everything but not the Recipients field.
2. Now select a recipients group that is either very large or is based on a complex smart group. after selecting it -- click preview...To replicate the issue:
1. Create a new mailing and fill out everything but not the Recipients field.
2. Now select a recipients group that is either very large or is based on a complex smart group. after selecting it -- click preview HTML/Text.
The preview window will not open until the recipient count query has completed. This can also be replicated by setting up a mailing with a large/complex group, saving it, then continuing it and immediately clicking preview. the window will not open until the query completes.Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/3544Bounce processing doesn't catch pattern "user doesn't exist"2022-06-11T14:50:31ZDetlev SieberBounce processing doesn't catch pattern "user doesn't exist"CiviCRM bounce processing analyzes the bounce text patterns, and decides what kind of bounce type it is. This is a fragile process, but there seems to be no better solution, since there is no general standardization of bounce patterns.
...CiviCRM bounce processing analyzes the bounce text patterns, and decides what kind of bounce type it is. This is a fragile process, but there seems to be no better solution, since there is no general standardization of bounce patterns.
Some email providers throw the bounce pattern "user doesn't exist", which is not found, and therefore results in bounce_type "syntax". However, this bounce pattern should result in immediately switching the email address to "inactive".
Solution is:
> insert into civicrm_mailing_bounce_pattern (bounce_type_id, pattern) values (6, 'user doesn\'t exist');
5.9Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/3632Mass SMS not sent to contacts whose mobile phone is not their Primary phone2022-06-12T21:25:03ZkenMass SMS not sent to contacts whose mobile phone is not their Primary phoneI have just upgraded to CiviCRM 5.3.2 and have found that Mass SMS are not being delivered to contacts where the mobile phone is not the Primary phone.
The change was made in this commit https://github.com/civicrm/civicrm-core/commit/6f...I have just upgraded to CiviCRM 5.3.2 and have found that Mass SMS are not being delivered to contacts where the mobile phone is not the Primary phone.
The change was made in this commit https://github.com/civicrm/civicrm-core/commit/6f3a35e0986bc21ffbf730c7d3f20f2894c1bb58#diff-8c026e80a2f25f46826dd9568bc301b0 in this PR https://github.com/civicrm/civicrm-core/pull/11558 as a result of this refactoring https://issues.civicrm.org/jira/browse/CRM-21316.
It seems from the unit test case that the code handles the case where a contact has multiple Mobile phones and chooses the Primary phone over the non-Primary phone.
But the code fails if the Primary phone is not the Mobile one.
What is needed is something similar to the Mass Email case. For emails, CRM_Mailing_BAO_Mailing::getLocationFilterAndOrderBy() generates a WHERE clause and an ORDER BY clause that ensures the right emails are selected and preferred.https://lab.civicrm.org/dev/core/-/issues/3608getRecipients() appears to use a WHERE clause as an ORDER BY clause2022-06-11T14:55:55ZkengetRecipients() appears to use a WHERE clause as an ORDER BY clauseSee https://github.com/civicrm/civicrm-core/commit/906298d3f63825adbee0e85963d89354edf8acf1#r30370554See https://github.com/civicrm/civicrm-core/commit/906298d3f63825adbee0e85963d89354edf8acf1#r303705545.8https://lab.civicrm.org/dev/core/-/issues/3634When using a smart group as a mailing list, users who unsubscribe from the sm...2022-06-11T14:57:45Ztom.mWhen using a smart group as a mailing list, users who unsubscribe from the smart group are still included in the mailing.It looks like in CRM/MailingBAO/Mailing.php, is not taking into account those who have been removed from the smart group. Civi version 5.3.
```
if (count($includeSmartGroupIDs)) {
$query = CRM_Utils_SQL_Select::from($contact)
...It looks like in CRM/MailingBAO/Mailing.php, is not taking into account those who have been removed from the smart group. Civi version 5.3.
```
if (count($includeSmartGroupIDs)) {
$query = CRM_Utils_SQL_Select::from($contact)
->select("$contact.id as contact_id, $entityTable.id as $entityColumn")
->join($entityTable, " INNER JOIN $entityTable ON $entityTable.contact_id = $contact.id ")
->join('gc', " INNER JOIN civicrm_group_contact_cache gc ON $contact.id = gc.contact_id ")
->join('mg', " INNER JOIN civicrm_mailing_group mg ON gc.group_id = mg.entity_id AND mg.search_id IS NULL ")
->join('temp', " LEFT JOIN $excludeTempTablename temp ON $contact.id = temp.contact_id ")
->where('gc.group_id IN (#groups)')
->merge($criteria)
->replaceInto($includedTempTablename, array('contact_id', $entityColumn))
->param('#groups', $includeSmartGroupIDs)
->param('#mailingID', $mailingID)
->execute();
}
```https://lab.civicrm.org/dev/core/-/issues/30Exporting master address contact even if no master address contact is defined2023-04-28T01:39:33ZsamuelsovExporting master address contact even if no master address contact is definedExporting "Master address contact" should give the master contact only if there is a master_id defined for this address but currently, if there is no master_id, the first master address id found for this contact is used.
```php
class C...Exporting "Master address contact" should give the master contact only if there is a master_id defined for this address but currently, if there is no master_id, the first master address id found for this contact is used.
```php
class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact {
...
public static function getMasterDisplayName($masterAddressId = NULL, $contactId = NULL) {
$masterDisplayName = NULL;
$sql = NULL;
if (!$masterAddressId && !$contactId) {
return $masterDisplayName;
}
if ($masterAddressId) {
$sql = "
SELECT display_name from civicrm_contact
LEFT JOIN civicrm_address ON ( civicrm_address.contact_id = civicrm_contact.id )
WHERE civicrm_address.id = " . $masterAddressId;
}
// ==> is there any reason to do that ?
elseif ($contactId) {
$sql = "
SELECT display_name from civicrm_contact cc, civicrm_address add1
LEFT JOIN civicrm_address add2 ON ( add1.master_id = add2.id )
WHERE cc.id = add2.contact_id AND add1.contact_id = " . $contactId;
}
$masterDisplayName = CRM_Core_DAO::singleValueQuery($sql);
return $masterDisplayName;
}
```5.3.0https://lab.civicrm.org/dev/core/-/issues/3572Deduping test email is case sensitive2022-06-11T14:54:27ZMartinDeduping test email is case sensitiveTested on 4.6.38 and 5.6.1.
When composing a mailing, the email address used in the "send test email to" field at the bottom is deduped. This is case sensitive, so fails to match emails that are the same but have different upper/lower c...Tested on 4.6.38 and 5.6.1.
When composing a mailing, the email address used in the "send test email to" field at the bottom is deduped. This is case sensitive, so fails to match emails that are the same but have different upper/lower case combinations. In this case, it will create a new contact with this interesting property: the value in the "email" field shows with the email address flattened to all lowercase, but the display name for the contact shows with the upper/lower case mix used when it was entered to test the mailing.
The upshot of all this is that if I'm putting together a mailing and send 6 test to the same email address (with an uppercase letter), I get 6 new duplicate contacts because it fails to match it each time.
Request to make the dedupe test for this mailing field case insensitive, since in general civi seems to want email addresses to be lowercase when they're used.
I can potentially make this change if someone can point me in the right direction.
Thanks!5.11https://lab.civicrm.org/dev/core/-/issues/35avoid template variable leakage when processing more than one recurring contr...2023-04-28T01:39:33Zjamieavoid template variable leakage when processing more than one recurring contribution in a sessionThis bug happens if you have more than one iATS recurring contribution and an earlier contribution is assigned to a soft credit, but one or more later contributions are not assigned to a soft credit.
The later contributions have the sof...This bug happens if you have more than one iATS recurring contribution and an earlier contribution is assigned to a soft credit, but one or more later contributions are not assigned to a soft credit.
The later contributions have the soft credit information inserted into their receipt because the email message template variables are not properly cleared.
iATS processes multiple recurring contributions in a single session via a cron job, so may be uniquely triggering this error (although the bug is with CiviCRM Core).5.3.0https://lab.civicrm.org/dev/core/-/issues/3566Public View link does not show from Scheduled and Sent screen2022-06-11T14:54:15ZseamusleePublic View link does not show from Scheduled and Sent screenWhen you view a list of scheduled and sent mailings you cannot access the Public View url link even tho the code suggests it should be availableWhen you view a list of scheduled and sent mailings you cannot access the Public View url link even tho the code suggests it should be available5.10https://lab.civicrm.org/dev/core/-/issues/389When using custom fields for smart group criteria with relative dates the gro...2019-12-03T07:22:12ZjasonobrownWhen using custom fields for smart group criteria with relative dates the group does not respect the relative date over timeIf you create a smart group using the relative (dynamic, rolling, "this week", etc...) dates for a custom field, once you save the smart group the dates are no longer relative. It creates/updates the group with static dates that match yo...If you create a smart group using the relative (dynamic, rolling, "this week", etc...) dates for a custom field, once you save the smart group the dates are no longer relative. It creates/updates the group with static dates that match your relative dates at the time you save it.
https://issues.civicrm.org/jira/browse/CRM-20499e5.8https://lab.civicrm.org/dev/core/-/issues/3600Bounce processing fails for 4-byte unicode characters2022-06-11T14:55:27ZtschuettlerBounce processing fails for 4-byte unicode charactersWhen the bounced message contains any 4-byte unicode character, it cannot be saved to the database due to the currently missing support for utf8mb4 in CiviCRM.
Error Log:
```
[info] $backTrace = #0 /opt/buildkit/build/dmaster/sites/all...When the bounced message contains any 4-byte unicode character, it cannot be saved to the database due to the currently missing support for utf8mb4 in CiviCRM.
Error Log:
```
[info] $backTrace = #0 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/CRM/Core/Error.php(948): CRM_Core_Error::backtrace("backTrace", TRUE)
#1 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/PEAR.php(921): CRM_Core_Error::exceptionHandler(Object(DB_Error))
#2 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB.php(985): PEAR_Error->__construct("DB Error: unknown error", -1, 16, (Array:2), "INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...")
#3 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/PEAR.php(575): DB_Error->__construct(-1, 16, (Array:2), "INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...")
#4 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/PEAR.php(223): PEAR->_raiseError(Object(DB_mysqli), NULL, -1, 16, (Array:2), "INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...", "DB_Error", TRUE)
#5 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB/common.php(1907): PEAR->__call("raiseError", (Array:7))
#6 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB/mysqli.php(933): DB_common->raiseError(-1, NULL, NULL, "INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...", "1366 ** Incorrect string value: '\xF0\x9F\x8C\xB4' for column 'bounce_reason'...")
#7 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB/mysqli.php(403): DB_mysqli->mysqliRaiseError()
#8 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB/common.php(1216): DB_mysqli->simpleQuery("INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...")
#9 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB/DataObject.php(2415): DB_common->query("INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...")
#10 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/packages/DB/DataObject.php(1040): DB_DataObject->_query("INSERT INTO civicrm_mailing_event_bounce (event_queue_id , bounce_type_id , b...")
#11 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/CRM/Core/DAO.php(571): DB_DataObject->insert()
#12 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/CRM/Mailing/Event/BAO/Bounce.php(87): CRM_Core_DAO->save()
#13 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/api/v3/Mailing.php(349): CRM_Mailing_Event_BAO_Bounce::create((Array:7))
#14 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/API/Provider/MagicFunctionProvider.php(100): civicrm_api3_mailing_event_bounce((Array:7))
#15 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/API/Kernel.php(169): Civi\API\Provider\MagicFunctionProvider->invoke((Array:9))
#16 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/API/Kernel.php(100): Civi\API\Kernel->runRequest((Array:9))
#17 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/api/api.php(23): Civi\API\Kernel->runSafe("Mailing", "event_bounce", (Array:6), NULL)
#18 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/CRM/Utils/Mail/EmailProcessor.php(341): civicrm_api("Mailing", "event_bounce", (Array:6))
#19 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/CRM/Utils/Mail/EmailProcessor.php(59): CRM_Utils_Mail_EmailProcessor::_process(TRUE, Object(CRM_Core_DAO_MailSettings), 0)
#20 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/api/v3/Job.php(403): CRM_Utils_Mail_EmailProcessor::processBounces(0)
#21 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/API/Provider/MagicFunctionProvider.php(100): civicrm_api3_job_fetch_bounces((Array:3))
#22 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/API/Kernel.php(169): Civi\API\Provider\MagicFunctionProvider->invoke((Array:9))
#23 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/API/Kernel.php(100): Civi\API\Kernel->runRequest((Array:9))
#24 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/api/api.php(23): Civi\API\Kernel->runSafe("job", "fetch_bounces", (Array:2), NULL)
#25 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/Test/Api3TestTrait.php(262): civicrm_api("job", "fetch_bounces", (Array:2))
#26 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/Civi/Test/Api3TestTrait.php(151): CiviUnitTestCase->civicrm_api("job", "fetch_bounces", (Array:2))
#27 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/tests/phpunit/CRM/Utils/Mail/EmailProcessorTest.php(78): CiviUnitTestCase->callAPISuccess("job", "fetch_bounces", (Array:2))
#28 [internal function](): CRM_Utils_Mail_EmailProcessorTest->testBounceProcessingUTF8mb4()
#29 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/Framework/TestCase.php(1062): ReflectionMethod->invokeArgs(Object(CRM_Utils_Mail_EmailProcessorTest), (Array:0))
#30 /opt/buildkit/build/dmaster/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php(196): PHPUnit_Framework_TestCase->runTest()
#31 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/Framework/TestCase.php(913): CiviUnitTestCase->runTest()
#32 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/Framework/TestResult.php(686): PHPUnit_Framework_TestCase->runBare()
#33 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/Framework/TestCase.php(868): PHPUnit_Framework_TestResult->run(Object(CRM_Utils_Mail_EmailProcessorTest))
#34 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/Framework/TestSuite.php(733): PHPUnit_Framework_TestCase->run(Object(PHPUnit_Framework_TestResult))
#35 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/TextUI/TestRunner.php(517): PHPUnit_Framework_TestSuite->run(Object(PHPUnit_Framework_TestResult))
#36 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/TextUI/Command.php(186): PHPUnit_TextUI_TestRunner->doRun(Object(PHPUnit_Framework_TestSuite), (Array:54), TRUE)
#37 phar:///opt/buildkit/extern/phpunit5/phpunit5.phar/phpunit/TextUI/Command.php(116): PHPUnit_TextUI_Command->run((Array:11), TRUE)
#38 /opt/buildkit/extern/phpunit5/phpunit5.phar(598): PHPUnit_TextUI_Command::main()
#39 {main}
```5.11https://lab.civicrm.org/dev/core/-/issues/38Recurring Contribution Information on Membership Modal2018-05-29T18:22:20ZCamilo RodríguezRecurring Contribution Information on Membership Modal## Overview
Currently, when viewing a membership from contact's detailed view (on memberships tab), it is hard to tell if a membership has any recurring contributions associated to it, even though you can see all payments done for the me...## Overview
Currently, when viewing a membership from contact's detailed view (on memberships tab), it is hard to tell if a membership has any recurring contributions associated to it, even though you can see all payments done for the membership. It would be good if you could see both payments and recurring contributions associated to the membership, similar to how both are shown on Contact's contribution tab.
## How it Works Currently
1. Go to a contact with that has memberships, contributions and recurring contributions.
2. Click on memberships tab.
3. Click the **view** action on a membership.
4. Membership details are shown, including payments. Recurring contributions are not shown.
## How it Should Work
1. Go to a contact with that has memberships, contributions and recurring contributions.
2. Click on memberships tab.
3. Click the **view** action on a membership.
4. Membership details are shown, including payments. Recurring contributions are also shown, just after the table with membership contributions.
## Accepatance Criteria
* Relabel the "Related Contributions" accordion to "Related Contributions and Recurring Contributions".
* A contributions section is shown on the accordion showing a table of all contributions that are linked to the membership.
* A recurring contribution section showing a table of all recurring contributions that are linked to the membership.
* The recurring contributions section should reuse the recurring contribution table structure in Contact's contribution tab.
* Actions for recurring contributions work as in contributions Tab.5.3.0https://lab.civicrm.org/dev/core/-/issues/41Search Builder: Not empty with date or integer custom fields gives a sql warning2019-03-07T19:25:44ZsamuelsovSearch Builder: Not empty with date or integer custom fields gives a sql warningMentioned by @bgm for a contact reference in mattermost https://chat.civicrm.org/civicrm/pl/49hcecoy5bb9mmsnrfzuzt9a4y and reproduced with a date custom field.
To reproduce :
* create a contactReference custom field or a date custom ...Mentioned by @bgm for a contact reference in mattermost https://chat.civicrm.org/civicrm/pl/49hcecoy5bb9mmsnrfzuzt9a4y and reproduced with a date custom field.
To reproduce :
* create a contactReference custom field or a date custom field
* populate some data on a few records
* use the Search Builder to search on that field, with condition "where [field] is not empty"
Here is an example of query that Mysql doesn't like :
```sql
CREATE TEMPORARY TABLE civicrm_temp_group_contact_cache1062 (SELECT 16 as group_id, contact_a.id as id FROM civicrm_contact contact_a
LEFT JOIN civicrm_value_cfa_contact_2 ON civicrm_value_cfa_contact_2.entity_id = `contact_a`.id WHERE ( ( contact_a.contact_type = "individual" AND (NULLIF(civicrm_value_cfa_contact_2.date_de_validation_manuelle_23, '') IS NOT NULL) ) ) AND (contact_a.is_deleted = 0) AND contact_a.id NOT IN (
SELECT contact_id FROM civicrm_group_contact
WHERE civicrm_group_contact.status = "Removed"
AND civicrm_group_contact.group_id = 16 ) );
```
The warning is :
```sql
SHOW warnings;
+---------+------+------------------------------+
| Level | Code | Message |
+---------+------+------------------------------+
| Warning | 1292 | Incorrect datetime value: '' |
+---------+------+------------------------------+
1 row in set (0.00 sec)
```5.4.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/3553Preview as HTML doesn't open window at all2022-06-11T14:50:54ZscardiniusPreview as HTML doesn't open window at allCRM_Mailing_BAO_TrackableURL::getTrackerURL() requires id of mailing but after https://lab.civicrm.org/dev/mail/issues/20 mailing_id is removed from params to Mailing.preview
https://github.com/civicrm/civicrm-core/commit/0075b0cb75e542...CRM_Mailing_BAO_TrackableURL::getTrackerURL() requires id of mailing but after https://lab.civicrm.org/dev/mail/issues/20 mailing_id is removed from params to Mailing.preview
https://github.com/civicrm/civicrm-core/commit/0075b0cb75e5422660366acf280538167369d8ba#diff-d08e5d3ceca1972df6d467b2824ffab5R279
errors from api rest
```
{"error_code":"unknown error","sql":"INSERT INTO civicrm_mailing_trackable_url (url ) VALUES ('https:\/\/onet.pl' )
[nativecode=1364 ** Field 'mailing_id' doesn't have a default value]",
"tip":"add debug=1 to your API call to have more info about the error",
"is_error":1,
"error_message":"DB Error: unknown error",
"debug_information":"INSERT INTO civicrm_mailing_trackable_url (url ) VALUES ('https:\/\/onet.pl' ) [nativecode=1364 ** Field 'mailing_id' doesn't have a default value]"}
```5.12.3https://lab.civicrm.org/dev/core/-/issues/43Google geocoding now seems to require an API key, settings page text needs up...2018-05-29T23:12:10ZlarsssandergreenGoogle geocoding now seems to require an API key, settings page text needs updateThe explanatory text on the geocoding settings page indicates that Google doesn't need an API key, but geocoding will no longer work without an API key:
https://developers.google.com/maps/documentation/geocoding/get-api-key
(and I can ...The explanatory text on the geocoding settings page indicates that Google doesn't need an API key, but geocoding will no longer work without an API key:
https://developers.google.com/maps/documentation/geocoding/get-api-key
(and I can verify that it does not work until you put in an API key). You also do need to enter your API key in the second set of fields (contra the text "You can leave the Geocoding fields blank if you are using Google as your mapping provider.")
Suggest changing the text on the settings page to reflect the update.5.3.0https://lab.civicrm.org/dev/core/-/issues/44admin price field options should be suppressed in event info page2018-12-08T09:38:52Zlcdwebadmin price field options should be suppressed in event info pageTo recreate:
1. create a price set with an option list price field (select/radio/checkbox)
2. set one of the options to visibility = admin
3. create an event and select this price set
4. view the event info page as a public (unauthe...To recreate:
1. create a price set with an option list price field (select/radio/checkbox)
2. set one of the options to visibility = admin
3. create an event and select this price set
4. view the event info page as a public (unauthenticated) user
The admin price field option should be suppressed but is incorrectly exposed.5.6lcdweblcdwebhttps://lab.civicrm.org/dev/core/-/issues/47Add "clone" functionality to scheduled jobs2018-06-17T23:18:56Zmattwiremjw@mjwconsult.co.ukAdd "clone" functionality to scheduled jobsThis adds a "clone" or "copy" function to the scheduled jobs page. It is implemented as an API (job.clone) which can be called via a link from the scheduled jobs listing.
Ref https://github.com/civicrm/civicrm-core/pull/11945This adds a "clone" or "copy" function to the scheduled jobs page. It is implemented as an API (job.clone) which can be called via a link from the scheduled jobs listing.
Ref https://github.com/civicrm/civicrm-core/pull/119455.4.0https://lab.civicrm.org/dev/core/-/issues/50Create Sub-tabs Under Contributions Tab for Contributions and Recurring Contr...2018-06-18T20:13:42ZCamilo RodríguezCreate Sub-tabs Under Contributions Tab for Contributions and Recurring Contributions## Overview
Currently, when viewing contributions on a contact's summary view, there are two tables being shown: one for contributions, the second for recurring contributions. The problem is when a contact has a lot of contributions, rec...## Overview
Currently, when viewing contributions on a contact's summary view, there are two tables being shown: one for contributions, the second for recurring contributions. The problem is when a contact has a lot of contributions, recurring contributions kind of get lost within the page, having to scroll down quite a bit to get to the required information. We'd like to have two subtabs within the contributions tab, so that we can choose either contributions or recurring contributions as needed. Furthermore, we'd also like to separate active from inactive recurring contributions within the recurring contributions tab, to have easier access to the information that is most likely to be needed.
## How it Works Currently
1. Go to a contact with that has contributions and recurring contributions.
2. Click on contributions tab.
3. Two tables are shown: first, contributions, and after it, recurring contributions.
## How it Should Work
1. Go to a contact with that has contributions and recurring contributions.
2. Click on contributions tab.
3. Two subtabs are shown within the page, one for contributions, the second for recurring contributions.
4. Contributions tab is selected by default, showing the contributions table.
5. Clicking on the recurring contributions tab shows two recurring contributions tables, the first one for active contributions, the second for inactive contributions.
## Acceptance Criteria
* Loading **Contributions** tab shows two subtabs, **Contributions** and **Recurring Contributions**.
* **Contributions** subtab is loaded by default.
* **Recurring Contributions** subtab has two tables, one for active contributions, the other one for inactive contributions.5.4.0https://lab.civicrm.org/dev/core/-/issues/55Hide Adding Option Link for Locked Option Groups2018-05-17T10:55:18ZmichaelHide Adding Option Link for Locked Option GroupsYou can edit option values from a few different places:
1. `civicrm/admin/options?gid=<option_group_id>`
1. `civicrm/admin/options/<option_group_name>`
1. `civicrm/admin/custom/group/field/option?action=browse&gid=<custom_group_id>&fid=...You can edit option values from a few different places:
1. `civicrm/admin/options?gid=<option_group_id>`
1. `civicrm/admin/options/<option_group_name>`
1. `civicrm/admin/custom/group/field/option?action=browse&gid=<custom_group_id>&fid=<custom_field_id>`
When "is_locked" = 1 only the first method hides the button to add new option values.
The button to add an option value should be hidden for the two places where it is highlighted in the above screenshots
##### From Option Group Edit Page Using Group ID
This works as expected and the button to add a new option is hidden
![image](/uploads/4a3567b69cc961cd2e6b580c60e62f30/image.png)
##### From Custom Field Edit page
![image](/uploads/c2a00e7f49e59eea7b6b3efe6720e7e6/image.png)
##### From Option Group Edit Page Using Group Name
![image](/uploads/9e1d94a9f3f729dbc88cdf92760108a9/image.png)5.3.0https://lab.civicrm.org/dev/core/-/issues/56Cancel Recurring Contribution activity should has a source record id2018-06-18T20:14:06ZscardiniusCancel Recurring Contribution activity should has a source record idMethod `CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution()` creates new activity with type "Cancel Recurring Contribution". Field source_record_id should contains id of recurring contribution but it doesn't
```php
// curren...Method `CRM_Contribute_BAO_ContributionRecur::cancelRecurContribution()` creates new activity with type "Cancel Recurring Contribution". Field source_record_id should contains id of recurring contribution but it doesn't
```php
// current, invalid
'source_record_id' => CRM_Utils_Array::value('source_record_id', $activityParams),
// fixed
'source_record_id' => $dao->recur_id,
```
https://github.com/civicrm/civicrm-core/blob/9a05ea5249f290bd92f813cfdb301b03b8186007/CRM/Contribute/BAO/ContributionRecur.php#L2855.4.0https://lab.civicrm.org/dev/core/-/issues/61Split edit message templates permission2018-10-05T01:39:35ZajesamsonSplit edit message templates permissionThe `edit message templates` permission currently grants access to user-driven messages and system workflow message. The implication of this is that, there is no way of restricting a particular user to just user-driven messages or system...The `edit message templates` permission currently grants access to user-driven messages and system workflow message. The implication of this is that, there is no way of restricting a particular user to just user-driven messages or system workflow messages.
It is therefore better to split `edit message templates` into two granular permissions (`edit user-driven message templates` and `edit system workflow message templates`) so that user access can be better managed.
![before](/uploads/896ebbdb81b419fb607750667c569486/before.gif)5.3.0https://lab.civicrm.org/dev/core/-/issues/65When creating a manual event registration, the notes section (source) has a c...2018-04-23T04:52:53Zfreeform.stephWhen creating a manual event registration, the notes section (source) has a character limit but doesn't check for oneAttempted to manually add a participant to an event using the "Add event registration" tab on their CiviCRM profile, but the screen wouldn't save, the page just stays frozen and fails to complete.
Looking at the error log:
...[nativeco...Attempted to manually add a participant to an event using the "Add event registration" tab on their CiviCRM profile, but the screen wouldn't save, the page just stays frozen and fails to complete.
Looking at the error log:
...[nativecode=1406 ** Data too long for column 'source' at row 1]"]...
The 'source' field in table 'civicrm_participant' is the 'Notes' field that appears when you manually create an event entry, it has a character limit of 128, client attempted to insert a note that was 161 characters. The limit of this field should be checked before attempting to save to the DB.
---
**Full backtrace:**
```
Apr 17 09:54:57 [info] $Fatal Error Details = Array
(
[callback] => Array
(
[0] => CRM_Core_Error
[1] => handle
)
[code] => -1
[message] => DB Error: unknown error
[mode] => 16
[debug_info] => INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id , register_date , source , fee_level , fee_amount , discount_id , fee_currency ) VALUES ( 475 , 2 , 1 , '1' , 20180417095400 , 'Manual input of cc info for member who called from Mexico and had troubles with cards before deadline. I charged early bird rate. See transaction ID AAB156B9 -MW' , '�Regular (Includes automatic member discount of: $ 159.00 Discount for Regular SSC Members) - 1�Salmon - 1 Participant Count -1�' , 555.00 , NULL , 'CAD' ) [nativecode=1406 ** Data too long for column 'source' at row 1]
[type] => DB_Error
[user_info] => INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id , register_date , source , fee_level , fee_amount , discount_id , fee_currency ) VALUES ( 475 , 2 , 1 , '1' , 20180417095400 , 'Manual input of cc info for member who called from Mexico and had troubles with cards before deadline. I charged early bird rate. See transaction ID AAB156B9 -MW' , '�Regular (Includes automatic member discount of: $ 159.00 Discount for Regular SSC Members) - 1�Salmon - 1 Participant Count -1�' , 555.00 , NULL , 'CAD' ) [nativecode=1406 ** Data too long for column 'source' at row 1]
[to_string] => [db_error: message="DB Error: unknown error" code=-1 mode=callback callback=CRM_Core_Error::handle prefix="" info="INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id , register_date , source , fee_level , fee_amount , discount_id , fee_currency ) VALUES ( 475 , 2 , 1 , '1' , 20180417095400 , 'Manual input of cc info for member who called from Mexico and had troubles with cards before deadline. I charged early bird rate. See transaction ID AAB156B9 -MW' , '�Regular (Includes automatic member discount of: $ 159.00 Discount for Regular SSC Members) - 1�Salmon - 1 Participant Count -1�' , 555.00 , NULL , 'CAD' ) [nativecode=1406 ** Data too long for column 'source' at row 1]"]
)
Apr 17 09:54:57 [info] $backTrace = #0 /sites/all/modules/contrib/civicrm/CRM/Core/Error.php(235): CRM_Core_Error::backtrace("backTrace", TRUE)
#1 [internal function](): CRM_Core_Error::handle(Object(DB_Error))
#2 /sites/all/modules/contrib/civicrm/packages/PEAR.php(931): call_user_func((Array:2), Object(DB_Error))
#3 /sites/all/modules/contrib/civicrm/packages/DB.php(976): PEAR_Error->PEAR_Error("DB Error: unknown error", -1, 16, (Array:2), "INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id ...")
#4 /sites/all/modules/contrib/civicrm/packages/PEAR.php(564): DB_Error->DB_Error(-1, 16, (Array:2), "INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id ...")
#5 /sites/all/modules/contrib/civicrm/packages/DB/common.php(1905): PEAR->raiseError(NULL, -1, NULL, NULL, "INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id ...", "DB_Error", TRUE)
#6 /sites/all/modules/contrib/civicrm/packages/DB/mysql.php(895): DB_common->raiseError(-1, NULL, NULL, NULL, "1406 ** Data too long for column 'source' at row 1")
#7 /sites/all/modules/contrib/civicrm/packages/DB/mysql.php(328): DB_mysql->mysqlRaiseError()
#8 /sites/all/modules/contrib/civicrm/packages/DB/common.php(1216): DB_mysql->simpleQuery("INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id ...")
#9 /sites/all/modules/contrib/civicrm/packages/DB/DataObject.php(2442): DB_common->query("INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id ...")
#10 /sites/all/modules/contrib/civicrm/packages/DB/DataObject.php(1060): DB_DataObject->_query("INSERT INTO civicrm_participant (contact_id , event_id , status_id , role_id ...")
#11 /sites/all/modules/contrib/civicrm/CRM/Core/DAO.php(442): DB_DataObject->insert()
#12 /sites/all/modules/contrib/civicrm/CRM/Event/BAO/Participant.php(141): CRM_Core_DAO->save()
#13 /sites/all/modules/contrib/civicrm/CRM/Event/BAO/Participant.php(204): CRM_Event_BAO_Participant::add((Array:44))
#14 /sites/all/modules/contrib/civicrm/CRM/Event/Form/Participant.php(1280): CRM_Event_BAO_Participant::create((Array:44))
#15 /sites/all/modules/contrib/civicrm/CRM/Core/Form.php(345): CRM_Event_Form_Participant->postProcess()
#16 /sites/all/modules/contrib/civicrm/CRM/Core/QuickForm/Action/Upload.php(166): CRM_Core_Form->mainProcess()
#17 /sites/all/modules/contrib/civicrm/CRM/Core/QuickForm/Action/Upload.php(133): CRM_Core_QuickForm_Action_Upload->realPerform(Object(CRM_Event_Form_Participant), "upload")
#18 /sites/all/modules/contrib/civicrm/packages/HTML/QuickForm/Controller.php(203): CRM_Core_QuickForm_Action_Upload->perform(Object(CRM_Event_Form_Participant), "upload")
#19 /sites/all/modules/contrib/civicrm/packages/HTML/QuickForm/Page.php(103): HTML_QuickForm_Controller->handle(Object(CRM_Event_Form_Participant), "upload")
#20 /sites/all/modules/contrib/civicrm/CRM/Core/Controller.php(353): HTML_QuickForm_Page->handle("upload")
#21 /sites/all/modules/contrib/civicrm/CRM/Event/Page/Tab.php(118): CRM_Core_Controller->run()
#22 /sites/all/modules/contrib/civicrm/CRM/Event/Page/Tab.php(175): CRM_Event_Page_Tab->edit()
#23 /sites/all/modules/contrib/civicrm/CRM/Core/Invoke.php(312): CRM_Event_Page_Tab->run((Array:4), NULL)
#24 /sites/all/modules/contrib/civicrm/CRM/Core/Invoke.php(86): CRM_Core_Invoke::runItem((Array:12))
#25 /sites/all/modules/contrib/civicrm/CRM/Core/Invoke.php(54): CRM_Core_Invoke::_invoke((Array:4))
#26 /sites/all/modules/contrib/civicrm/drupal/civicrm.module(482): CRM_Core_Invoke::invoke((Array:4))
#27 [internal function](): civicrm_invoke("contact", "view", "participant")
#28 /includes/menu.inc(527): call_user_func_array("civicrm_invoke", (Array:3))
#29 /index.php(21): menu_execute_active_handler()
#30 {main}
```seamusleeseamusleehttps://lab.civicrm.org/dev/core/-/issues/66Refactor addAddressColumns in the report2018-11-04T20:34:30ZjaapjansmaRefactor addAddressColumns in the reportAs the discussion in this closed pr (https://github.com/civicrm/civicrm-core/pull/11980) there is a need to refactor addAddressColumns in the reports in core.
The extended report extension has a working implementation.As the discussion in this closed pr (https://github.com/civicrm/civicrm-core/pull/11980) there is a need to refactor addAddressColumns in the reports in core.
The extended report extension has a working implementation.5.8https://lab.civicrm.org/dev/core/-/issues/68DB Error on 'Find Participant' page when MySQL FULL_GROUP_BY_MODE is enabled2018-05-17T11:38:27ZMonish DebDB Error on 'Find Participant' page when MySQL FULL_GROUP_BY_MODE is enabledSteps to replicate:
1. Ensure that FULL_GROUP_BY_MODE is enabled in MySQL
2. Go to 'Find Participant' search form and do a simple search
This leads to
DB Error - https://pastebin.com/jxbaAbpSSteps to replicate:
1. Ensure that FULL_GROUP_BY_MODE is enabled in MySQL
2. Go to 'Find Participant' search form and do a simple search
This leads to
DB Error - https://pastebin.com/jxbaAbpS5.1.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/71Add Print/Merge Letter functionality for activity searches2020-02-27T20:19:41Zaydunsaidan.saunders@squiffle.ukAdd Print/Merge Letter functionality for activity searchesMost of the standard searches provide an action to create a PDF or Word document - except Activities.Most of the standard searches provide an action to create a PDF or Word document - except Activities.5.23.0aydunsaidan.saunders@squiffle.ukaydunsaidan.saunders@squiffle.ukhttps://lab.civicrm.org/dev/core/-/issues/73Add invoice number to bookkeeping report2018-04-28T07:06:34ZyashodhaAdd invoice number to bookkeeping reportAdd invoice number to bookkeeping reportAdd invoice number to bookkeeping reportyashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/74'Price Set Details for Event Participants' gives DB error if the price fields...2018-11-18T21:07:07Zyashodha'Price Set Details for Event Participants' gives DB error if the price fields are disabled.Steps to replicate:
-------------------
1. Create a price set and associate with an event.
2. Register a participant with the event.
3. Disable the price fields.
4. Go to Custom Searches > Price Set Details for Event Participants, sear...Steps to replicate:
-------------------
1. Create a price set and associate with an event.
2. Register a participant with the event.
3. Disable the price fields.
4. Go to Custom Searches > Price Set Details for Event Participants, search with the said event.
It throws DB error
> DB Error: syntax error
> Error Details
> Database Error Code: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE participant_id = 52' at line 3, 1064
> Additional Details:
> Array
> (
> [callback] => Array
> (
> [0] => CRM_Core_Error
> [1] => handle
> )
>
> [code] => -2
> [message] => DB Error: syntax error
> [mode] => 16
> [debug_info] =>
> UPDATE civicrm_temp_custom_c87e02e10a4041be20a9ae7529218687
> SET
> WHERE participant_id = 52;
> [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE participant_id = 52' at line 3]
> [type] => DB_Error
> [user_info] =>
> UPDATE civicrm_temp_custom_c87e02e10a4041be20a9ae7529218687
> SET
> WHERE participant_id = 52;
> [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE participant_id = 52' at line 3]
> [to_string] => [db_error: message="DB Error: syntax error" code=-2 mode=callback callback=CRM_Core_Error::handle prefix="" info="
> UPDATE civicrm_temp_custom_c87e02e10a4041be20a9ae7529218687
> SET
> WHERE participant_id = 52;
> [nativecode=1064 ** You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE participant_id = 52' at line 3]"]
> )yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/78Incorrect Payment Processor for Recurring Payments2018-11-17T02:47:01ZjitendraIncorrect Payment Processor for Recurring PaymentsThe issue arises due to there being two AuthNet payment processors, one for both A1 and A2. And the CiviCRM code is (naively) written assuming there'd be a maximum of one. So when AuthNet calls into CiviCRM to notify it of a successful r...The issue arises due to there being two AuthNet payment processors, one for both A1 and A2. And the CiviCRM code is (naively) written assuming there'd be a maximum of one. So when AuthNet calls into CiviCRM to notify it of a successful recurring payment, for the A1 payments it is loading the A2 payment processor — and then failing.
The attached patch uses information from the address that AuthNet posts its updates to, which can signal which payment processor to use.5.2.0https://lab.civicrm.org/dev/core/-/issues/80Current Employer is not reset after relationship is updated2018-05-14T22:46:20ZjitendraCurrent Employer is not reset after relationship is updatedReplicated on dmaster.
- Add an employer relationship for a contact.
- Current Employer is correctly set.
- Edit the relationship to some other type eg. "Volunteer For" -> Save.
- Current Employer Field is still set to the previous value.Replicated on dmaster.
- Add an employer relationship for a contact.
- Current Employer is correctly set.
- Edit the relationship to some other type eg. "Volunteer For" -> Save.
- Current Employer Field is still set to the previous value.5.3.0jitendrajitendrahttps://lab.civicrm.org/dev/core/-/issues/81Warnings from CustomGroup and CustomField create functions2018-04-30T22:08:39ZmichaelWarnings from CustomGroup and CustomField create functionsBoth CustomGroup and CustomField seem to treat `create` as a method only for creating new entities. Although updates do work, a few places in the code expect that you have included some value in the params that you don't intend to update...Both CustomGroup and CustomField seem to treat `create` as a method only for creating new entities. Although updates do work, a few places in the code expect that you have included some value in the params that you don't intend to update.
For example:
```
$params = ['id' => 1, 'is_active' => 0];
civicrm_api3('CustomField', 'create', $params);
```
Will produce a warning (from a test I wrote for this):
```
Failure in api call for CustomGroup create: Undefined index: extends
#0 /repos/civicrm-core/CRM/Core/BAO/CustomGroup.php(64): PHPUnit_Util_ErrorHandler::handleError(8, 'Undefined index...', '/repos/civicrm-...', 64, Array)
```
---
https://github.com/civicrm/civicrm-core/pull/12033/files5.2.0https://lab.civicrm.org/dev/core/-/issues/84Error when searching for Participants2018-04-28T07:22:36ZPradeep Nayakpradpnayak@gmail.comError when searching for Participantshttps://civicrm.stackexchange.com/questions/24671/error-when-searching-for-participants
It seems that there is regression because of https://github.com/civicrm/civicrm-core/pull/11706
Commenting line 4912(self::getGroupByFromOrderBy($g...https://civicrm.stackexchange.com/questions/24671/error-when-searching-for-participants
It seems that there is regression because of https://github.com/civicrm/civicrm-core/pull/11706
Commenting line 4912(self::getGroupByFromOrderBy($groupBy, $orderBys);) in CRM/Contact/BAO/Query.php seems to fix the issue.https://lab.civicrm.org/dev/core/-/issues/86CIVICRM_MAIL_LOG_AND_SEND does not work properly2018-11-18T21:03:25Zmattwiremjw@mjwconsult.co.ukCIVICRM_MAIL_LOG_AND_SEND does not work properlyIn the packages/Mail it is mistyped as "CIVICRM_MAIL_LOG_AND SEND" (ie. missing an underscore): https://github.com/civicrm/civicrm-packages/pull/204
In CiviCRM core the administrator is not notified if it is set: https://github.com/civi...In the packages/Mail it is mistyped as "CIVICRM_MAIL_LOG_AND SEND" (ie. missing an underscore): https://github.com/civicrm/civicrm-packages/pull/204
In CiviCRM core the administrator is not notified if it is set: https://github.com/civicrm/civicrm-core/pull/12037
In the docs it is missing altogether: https://github.com/civicrm/civicrm-dev-docs/pull/5265.2.0https://lab.civicrm.org/dev/core/-/issues/90Disable FULL GROUP BY where queries do not comply to allow for test runner to...2018-11-18T21:02:06ZseamusleeDisable FULL GROUP BY where queries do not comply to allow for test runner to switch to MySQL 5.7ping @eileen @monish.debping @eileen @monish.debseamusleeseamusleehttps://lab.civicrm.org/dev/core/-/issues/91Prevent un-workable searches in search builder (was search builder improvements)2018-05-03T23:37:58ZMonish DebPrevent un-workable searches in search builder (was search builder improvements)Earlier there was a requirement where we need to remove specific MySQL operators which are not valid for specific data type e.g. String type doesn't work with >, <, <= and >= operators. And here's the fix https://github.com/civicrm/civic...Earlier there was a requirement where we need to remove specific MySQL operators which are not valid for specific data type e.g. String type doesn't work with >, <, <= and >= operators. And here's the fix https://github.com/civicrm/civicrm-core/commit/759094bdfa40531e4ec0cf0a644d9edd6b9247cf done earlier as per which it is fetching all columns which are String type and passing them into a separate JSON string identified as ```stringFields``` and another formatted list of valid string operators as ```stringOperators```. Similarly to identify date fields and to do a specific operation on such fields we are passing another variable ```dateFields```. These JSON object in JS are later used to specific operations. Now on the other hand, recently, I encountered another issue where the Boolean type columns don't work with IS EMPTY/IS NOT EMPTY operator and eventually leads to DB syntax error. So if I follow the same approach I need to assign another JSON string, which won't be an ideal fix. This lead me to do following 3 changes to improve the code:
1. Assign a single list of all data columns which are either Boolean, String or Date (as currently, these are the only kind that needs attention)
2. Use this list (as ```fieldTypes```) in JS to filter the operator or do field specific operations like covert a input search field to datepicker if the chosen search field is date kind.
3. Reduce list of variable assignment.5.2.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/92Prevent deletion of groups which are used as search parameters of Smart Groups2023-04-20T08:59:49ZEvanPrevent deletion of groups which are used as search parameters of Smart GroupsIt seems that a group (static or Smart) being used a search parameter for a Smart Group can be deleted. Best case scenario is the Smart Group just has that many fewer contacts in it and we go on with life. We had an issue on a client sit...It seems that a group (static or Smart) being used a search parameter for a Smart Group can be deleted. Best case scenario is the Smart Group just has that many fewer contacts in it and we go on with life. We had an issue on a client site where there were so many contacts and so many groups, that rebuilding the Smart Group cache was causing a fatal DB error whether it (Updating Smart Group counts) was done manually or via the scheduled job. Proposed approach is to prevent deletion of groups that are dependencies for other groups. Example workflow:
1. A user with permissions to delete groups chooses to delete a group by selecting the "Delete" option from the "More" link on the Manage Groups page located here: Navigation Menu > Contacts > Manage Groups (this is the only place a user can delete a group, I believe)
1. The system (CiviCRM) does a check in the background to determine if the group being deleted is used as a search parameter in any active/non-deleted Smart Groups
1. If the group being deleted is determined to be "in use" by a Smart Group(s), don't allow the group to be deleted. Instead…
1. Show a message in the "Confirm Group Delete" notification that the group cannot be deleted as it's being used by a Smart Group(s). List the name of the Smart Group(s), preferably with the name(s) linked to that/those group(s)
I am inquiring with our client if they are willing to put funds (and how much) into fixing this. I have confirmed on demo master that one can delete a group that is a dependency for another group, though there were no ill effects. My assumption / theory is there just aren't enough contacts or groups for the rebuilding of Smart Group counts to fail.https://lab.civicrm.org/dev/core/-/issues/96Expose source column in booking report2018-06-29T18:52:04ZyashodhaExpose source column in booking reportExpose source column in booking report and as filter as well.Expose source column in booking report and as filter as well.5.4.0yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/3644Delivery summary doesn't show2022-06-11T14:58:02ZLoganBearDelivery summary doesn't showUpdated to CiviCRM 5.19 - ran one of our biweekly mailings last night and I wanted to check the open count. But Civi says that the mailing isn't completed,![Screen_Shot_2019-11-08_at_10.23.56_AM](/uploads/9723b265e4f977ffebce0033575d5291...Updated to CiviCRM 5.19 - ran one of our biweekly mailings last night and I wanted to check the open count. But Civi says that the mailing isn't completed,![Screen_Shot_2019-11-08_at_10.23.56_AM](/uploads/9723b265e4f977ffebce0033575d5291/Screen_Shot_2019-11-08_at_10.23.56_AM.png)
but the summary shows it's completed.![Screen_Shot_2019-11-08_at_10.23.41_AM](/uploads/24352601bef0fce245cc4198826cb937/Screen_Shot_2019-11-08_at_10.23.41_AM.png)5.19.1https://lab.civicrm.org/dev/core/-/issues/3589Report on scheduled mailing fails with Notice: Undefined property: CRM_Mailin...2022-06-11T14:55:03ZspalmstromReport on scheduled mailing fails with Notice: Undefined property: CRM_Mailing_BAO_Mailing::$mailing_job_start_date in <joomla_root>/administrator/components/com_civicrm/civicrm/CRM/Mailing/BAO/Mailing.php on line 2031This occurs in Joomla after upgrading to CiviCRM 5.19.0. Line 175 in /administrator/components/com_civicrm/civicrm/CRM/Mailing/DAO/MailingJob.php should read:
'start_date' => [
not
'mailing_job_start_date' => [This occurs in Joomla after upgrading to CiviCRM 5.19.0. Line 175 in /administrator/components/com_civicrm/civicrm/CRM/Mailing/DAO/MailingJob.php should read:
'start_date' => [
not
'mailing_job_start_date' => [5.19.1https://lab.civicrm.org/dev/core/-/issues/100Membership Detail report throw DB error2018-05-25T05:45:46ZyashodhaMembership Detail report throw DB errorMembership Detail report throw DB error due to acl clause applied twice.Membership Detail report throw DB error due to acl clause applied twice.5.3.0yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/101Allow further customization of search form in hooks2018-06-18T20:13:57ZmichaelAllow further customization of search form in hooksThe contact search form uses the template `templates/CRM/Contact/Form/Search/Criteria/Basic.tpl`. In the template there are already some conditionals to hide certain fields, such as
```
{if $form.group}
<td>
...
{/if}
```
However o...The contact search form uses the template `templates/CRM/Contact/Form/Search/Criteria/Basic.tpl`. In the template there are already some conditionals to hide certain fields, such as
```
{if $form.group}
<td>
...
{/if}
```
However only some fields are covered. For an extension developer who wants to hide more fields here it is difficult without causing warnings or breaking the layout.
It is now possible to override the fields on the basic search template by altering the fields array assigned to the template in a hook
---
Core PR: https://github.com/civicrm/civicrm-core/pull/120785.4.0https://lab.civicrm.org/dev/core/-/issues/105Manage PCP URL Wrong for the notification email under wordpress2018-05-15T07:19:09ZaniesshsethhManage PCP URL Wrong for the notification email under wordpress5.3.0https://lab.civicrm.org/dev/core/-/issues/107After creating a new case, the assignee for each activity must be selected ma...2022-09-13T05:03:46ZreneolivoAfter creating a new case, the assignee for each activity must be selected manually### Issue
After you create a new case multiples activities are created with it, but the assignee must be manually chosen for each one of them which takes considerable time since this must be done by editing each activity one at a time.
...### Issue
After you create a new case multiples activities are created with it, but the assignee must be manually chosen for each one of them which takes considerable time since this must be done by editing each activity one at a time.
![default-assignee-issue](/uploads/987455f62441d6f77bc1892b930b4a90/default-assignee-issue.png)
There are references for the roles and relationships that are interesting for the particular case, but those are there for reference, the assignee still must be selected manually.
### Solution
Allow administrators to define rules for selecting a default assignee for each one of the activities. The rules would be based on the following options:
* By relationship to case client (ex: parent, manager, or spouse of case client).
* User creating the case.
* Specific contact.
* No default assignee.
When creating a new case each case activity should be created and assigned based on these rules. The case manager could then modify the assignees as usual.
----
Core PR:
https://github.com/civicrm/civicrm-core/pull/11998https://lab.civicrm.org/dev/core/-/issues/110Fix in CRM-14065 for status/date mismatch warning on activities doesn't seem ...2019-03-26T04:18:10ZDaveDFix in CRM-14065 for status/date mismatch warning on activities doesn't seem to workAnd on the public demo it doesn't seem to work either. The problem is the use of setHours() in activityStatus in templates/CRM/Activity/Form/ActivityJS.tpl.
Where it says
` var
// Ignore time, only compare dates
today = new Date()....And on the public demo it doesn't seem to work either. The problem is the use of setHours() in activityStatus in templates/CRM/Activity/Form/ActivityJS.tpl.
Where it says
` var
// Ignore time, only compare dates
today = new Date().setHours(0,0,0,0),
activityStatusId = cj('#status_id').val();`
it should be
` var
// Ignore time, only compare dates
today = new Date(),
activityStatusId = cj('#status_id').val();
today.setHours(0,0,0,0);`
because setHours() returns a timestamp and updates the object directly, and doesn't return a new Date object.https://lab.civicrm.org/dev/core/-/issues/3599Test mailings create new contacts even when "Add Contacts" permission is not ...2022-06-11T14:55:17ZJonGoldTest mailings create new contacts even when "Add Contacts" permission is not present.### Overview
When sending a test mail, CiviCRM will check if the email matches an existing contact in the database. If it does, it uses that contact ID; if not, it creates a contact. However, it creates a contact without regard for wh...### Overview
When sending a test mail, CiviCRM will check if the email matches an existing contact in the database. If it does, it uses that contact ID; if not, it creates a contact. However, it creates a contact without regard for whether a user has permission to add contacts.
### Steps to replicate
* Create a user that does not have the "Add Contacts" permission.
* With that user, create a new mailing (traditional or Mosaico, doesn't matter).
* Send a test ("draft") mail to an email address that doesn't exist in the database.
### Expected behavior
No new contact is created.
### Actual behavior
A new contact is created.5.29.0JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/3581Email to activity processing: New feature to skip emails which do not have a ...2022-06-11T14:54:48ZJamie Novick - CompucoEmail to activity processing: New feature to skip emails which do not have a Case ID or Case token- As a CiviCRM administrator
- I would like to configure whether CiviCRM will process emails without a case ID (or case “token”) in the subject line
- so that I can ensure that emails which do not have a case ID are not filed on the con...- As a CiviCRM administrator
- I would like to configure whether CiviCRM will process emails without a case ID (or case “token”) in the subject line
- so that I can ensure that emails which do not have a case ID are not filed on the contact record outside the case by accident.
**How it works currently**
For those a little less familiar with email to activity processing:
CiviCRM will connect to a users MS exchange mailbox and create the following folder structure:
- Inbox
- /CiviCRM
- //CiviMail
- ///ignored
- ///processed
Notes:
- Users simply copy or move emails into the /civicrm folder in their inbox. CiviCRM has a scheduled job that can be configured to run periodically (say every hour) and poll the mailbox folder (Civimail) by IMAP in order to read and process the emails.
- By default CiviCRM will match any email from, to, cc fields to contacts in the CRM and file the email as an activity against those contacts (including recording any attachments as files).
- If however there is a case ID in the subject line (or a case ID "token"*) then CiviCRM will instead file the email straight onto the case itself. The format is: [case #1234] (see: https://issues.civicrm.org/jira/browse/CRM-21446)
- If the email is processed successfully it will be moved to the processed folder.
- If for any reason CiviCRM cannot file the email it will be moved to the ignored folder. This normally happens if the email address is invalid for some reason (please note: emails that are sent internally between staff on exchange server can sometimes have this problem as exchange doesn't always use the external email address but instead uses some local username/domain combination - this maybe something to test and see if it maybe a problem for NEU).
- Note: *When sending out emails from CiviCRM from CiviCase it appends a case ID token - which is a string of characters and not the exact Case ID. This is done to obscure the case ID number in the email. In effect you can have either this token or the case id in the subject line and CiviCRM will file the email correctly.
- More background: https://docs.civicrm.org/sysadmin/en/latest/setup/civimail/inbound/#autofiling-email-activities-via-emailprocessor
**Problem**
For multiple clients they want to use email to activity processing for their casework teams. However sometimes they forget to add the case ID to the subject line of the email and the system incorrectly files the email outside the case - which is a "security" risk as the emails can be sensitive.
As such they would like to be able to specify that the emails being filed from the casework team inbox will only be filed if there is a valid Case ID in the subject line and are skipped if not, and hence there is no risk of the email being filed outside of the case.
**Proposed improvement**
Approach:
When "Used For?" = Email to activity processing
Show an additional option:
- Skip emails which do not have a Case ID or Case token:
- Checkbox
- Help text:
- CiviCRM has functionality to file emails which contain the Case ID or Case Hash in the subject line in the format [case #1234] against a case record.
- Where the Case ID or Case Hash is not included CiviCRM will file the email against the contact record, by matching the email addresses on the email with any email addresses of Contact records in CiviCRM.
- Enabling this option will have CiviCRM skip any emails that do not have the Case ID or Case Hash so that the system will only process emails that can be placed on case records.
- Any emails that are not processed will be moved the ignored folder.
- Default null
- If checked:
- Emails which do not have a valid case ID or case token should be moved into the “ignored” folder. (See folders above) after processing and no Activity should be created.
Would be great to know if we can get the magical "concept approved" flag.
We need to work on this quite urgently so if there are no great concerns that would be much appreciated...5.31.0https://lab.civicrm.org/dev/core/-/issues/3550Email to activity processing: New feature to make the creation of new contact...2022-06-11T14:50:44ZJamie Novick - CompucoEmail to activity processing: New feature to make the creation of new contacts "optional"**User story:**
- As an administrator
- When filing inbound emails
- I would like to configure whether CiviCRM will create a new contact where a contact does not already exist within the system
- So that I can ensure that new contacts a...**User story:**
- As an administrator
- When filing inbound emails
- I would like to configure whether CiviCRM will create a new contact where a contact does not already exist within the system
- So that I can ensure that new contacts are not created in the system when filing an email.
- In the situation of a case email where the email has a valid Case ID or Case token in the subject line the email should still be filed to a case, even if no contacts are matched.
**How it works currently:**
Currently, when CiviCRM performs email to activity processing, Civi will search CiviCRM for a contact with the relevant email address in the From / To / CC fields and then assign the created activity accordingly.
When CiviCRM cannot find a contact with a relevant email address, it simply creates a new "stub" contact with the email address.
**The problem**
For multiple reasons this is might not be desirable behaviour:
This is a security risk, as in most cases CiviCRM email-activity processing works off a mailbox, that might need to be public. As such it is possible that an unscrupulous third party may chose to spam your mailbox and thus spam your CRM with unwanted emails and content. Whilst this can be mitigated by having your automated filing on a separate mailbox, it might be preferable to simply only file the emails for contacts who already exist in your system, and to selectively add the rest.
Also, from a GDPR perspective it may not be desirable to hold the details of the persons who sent an email, whilst the contents of the email might be important (i.e. the attachments) especially in a casework context.
**Proposed solution:**
Add an additional option to the email to activity processing configurations (civicrm/admin/mailSettings?action=add&reset=1)
- When "Used For?" = Email to activity processing
- Show an additional option:
- "Do not create new contacts when filing emails"
- Checkbox
- Default null
- Help:
- If this option is enabled, CiviCRM will not create new contacts when filing emails.
- The email should also always be filed as an activity.
If checked:
- When CiviCRM checks for a matching contact, if no matching contact is found it will not create one and the email is skipped
- unless the email has a valid Case ID or Case token in the subject line, in which it will still be filed against the case, but no contacts will be linked to the email.5.31.0https://lab.civicrm.org/dev/core/-/issues/115Proposal - create fields array standard & generic field template/s for it & f...2022-10-11T15:26:36ZeileenProposal - create fields array standard & generic field template/s for it & for fields, work towards generic entity form templateWe have a generalised issue where we want people to write extensions to alter CiviCRM but in many cases the way CiviCRM is structured makes that difficult and unmaintainable. As part of pushing people out to extensions we also need to wo...We have a generalised issue where we want people to write extensions to alter CiviCRM but in many cases the way CiviCRM is structured makes that difficult and unmaintainable. As part of pushing people out to extensions we also need to work to improve core code to support that purpose.
In the 5.x series we have made it easier for extension writers to store entity specific data by extending custom fields to (almost) all entities via the api*. However, it is still very difficult for extension writers to inject these fields, or other fields, into forms or to remove or re-order them. In general our approach has been to make things more metadata driven but we have not really standardised how to do this for templates. Conversely we already have examples in our code of templates that have been re-written to support output being modified by a php hook - (notably it is possible to alter the Billing fields on the payment form & the output columns in the contribution search from a php hook because metadata is assigned to the template & processed in the template) but we have not standardised those approaches into a recommendation.
To be clear - this proposal is NOT about going through all our forms and altering them to be more editable - it's about agreeing what we are working towards when we ARE editing forms. Currently it is possible to say
* "we are working towards replacing jcalendar.tpl with datepicker fields and when we touch date fields we should attempt to convert them"
* "we are working towards replacing non-metadata ways of adding fields to a form with addField and when we touch fields not added that way we should attempt to convert them"
Conversely we would say "if you are trying to fix the way a datefield is handling date defaults and the field is a jcalendar field we expect the fix to be converting it to a datepicker field rather than adding extra mangling for the legacy method".
In this case we would say
* "we are working towards assigning a standardised array of fields to a form & a tpl way of handling them and when we are working on a form we should seek to convert them"
(Generally we do require that PRs are improving the consistency & quality of our codebase & compliance with code-directions when we merge them)
I would note that complex forms like Contribution & Event forms might make poor candidates for tpl standardisation but a lot of our forms are simple settings forms or editing basic entities and these are good candidates for being generic & standardised. (This is allied with fixing the forms such that IF custom data is enabled on the entity THEN it can be altered via the form - which I will cover separately)
There are 2 open PRs which revolve around making tpls more generic, more metadata driven & more form-alterable
https://github.com/civicrm/civicrm-core/pull/12128/files#diff-1f76de158e02dfb7afa76303ef60e9ebR27
and https://github.com/civicrm/civicrm-core/pull/12078
The proposal would be that where it is possible to iterate through fields we assign them to the tpl in an array that looks like
```
$this-assign('entityFields', [
'field_1' => [
'name' => 'field_1',
'description' => ts("description to show below field"),
'help' => ['id' => 'id-field_1, 'file' => 'CRM/Contact/Form/Contact',
'is_add_translate_dialog' => 1,
],
'field_1' => ['name' => 'field_1'],
'money_field' => ['name' => 'money', 'formatter' => 'crmMoney'],
'weird_looking_field' => [
'name' => 'weird_looking_field',
'template' => CRM/Member/Form/MembershipType/weird_looking_field.tpl',
```
In practice some helpers would be involved in building the array so that fields like is_add_translate_dialog are derived from existing metadata. That would also potentially apply to keys like description, help & formatter. It is expected that if a field were to use a field specific template it would be under the path of the form.
The form template would then work towards looking more like
```
{foreach from=$entityFields item=fieldSpec}
{assign var=fieldName value=$fieldSpec.name}
<tr class="crm-{$entityInClassFormat}-form-block-{$fieldName}">
{include file="CRM/Core/Form/Field.tpl"}
</tr>
{/foreach}
```
With the tpl being
```
{if $fieldSpec.template}
{include file=$fieldSpec.template}
{else}
<td class="label">{$form.$fieldName.label}
{if $fieldSpec.help}{assign var=help value=$fieldSpec.help}{capture assign=helpFile}{if $fieldSpec.help}
{$fieldSpec.help}
{else}''{/if}
{/capture}{help id=$help.id file=$help.file}{/if}
{if $action == 2 && $fieldSpec.is_add_translate_dialog}{include file='CRM/Core/I18n/Dialog.tpl' table=$entityTable field=$fieldName id=$entityID}{/if}
</td>
<td>{if $form.$fieldName.html}{if $fieldSpec.formatter === 'crmMoney'}{$form.$fieldName.html|crmMoney}{else}{$form.$fieldName.html}{/if}{else}{$fieldSpec.place_holder}{/if}<br />
{if $fieldSpec.description}<span class="description">{$fieldSpec.description}</span>{/if}
</td>
{/if}
```
In some cases it might be too hard to make the form iterate through an array but individual fields could be converted - either in order to make that field hook alterable - (ie. the hook could then change the description metadata, or suppress a field) or as part of chipping away at the conversion
```
{assign var=fieldName value='my_converted_field'}
<tr class="crm-{$entityInClassFormat}-form-block-{$fieldName}">
{include file="CRM/Core/Form/Field.tpl"}
</tr>
```
* Note to enable custom data for a new type in an extension use code like the following
```
$optionValues = civicrm_api3('OptionValue', 'get', [
'option_group_id' => 'cg_extend_objects',
'name' => 'civicrm_relationship_type'
]);
if (!$optionValues['count']) {
civicrm_api3('OptionValue', 'create', [
'option_group_id' => 'cg_extend_objects',
'name' => 'civicrm_relationship_type',
'label' => ts('Relationship Type'),
'value' => 'RelationshipType',
]);
}
```https://lab.civicrm.org/dev/core/-/issues/116Search builder searches on primary addresses are producing unexpected results2018-05-21T11:34:30ZAndryg8Search builder searches on primary addresses are producing unexpected resultsLooking at civicrm.demo.civihosting.com v5.0.0. as well as our v5.2beta1 dev site, I am getting weird results for various search builder searches:
Contacts > Country > Primary is empty - returns many addresses, many of which have countr...Looking at civicrm.demo.civihosting.com v5.0.0. as well as our v5.2beta1 dev site, I am getting weird results for various search builder searches:
Contacts > Country > Primary is empty - returns many addresses, many of which have country field AND are set to primary
Contacts > Country > Home is empty - seems to behave correctly.
Contacts > Country > Primary is NULL - same as above
Contacts > Country > Primary is regex - produces an error:
`
^united$ is not of the type Positive`
Hope that's useful info! Our 5.2Beta1 site has the fixes for https://lab.civicrm.org/dev/core/issues/1065.3.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/117Remove usage of each() This is deprecated in php7.22018-05-28T02:48:08ZseamusleeRemove usage of each() This is deprecated in php7.2The following parts of the code still used each() which is an older format of foreach
```
CRM/Activity/BAO/Query.php: while (list(, $k) = each($value)) {
CRM/Activity/BAO/Query.php: while (list($k, $v) = each($value)...The following parts of the code still used each() which is an older format of foreach
```
CRM/Activity/BAO/Query.php: while (list(, $k) = each($value)) {
CRM/Activity/BAO/Query.php: while (list($k, $v) = each($value)) {
CRM/Case/XMLProcessor/Report.php: while (list($gid, $group_values) = each($groupTree)) {
CRM/Case/XMLProcessor/Report.php: while (list($id, $field_values) = each($group_values['fields'])) {
CRM/Event/Form/Participant.php: while (list($k, $dupeCheckContactId) = each($this->_contactIds)) {
CRM/Member/Form/MembershipView.php: $dir = each($relDirection);
CRM/Member/BAO/Membership.php: while (($available > 0) && ($params = each($queue))) {
CRM/Pledge/BAO/Pledge.php: list($field, $value) = each($startDate);
CRM/Pledge/BAO/PledgeBlock.php: list($field, $value) = each($date);
CRM/Report/Form/Contribute/Recur.php: while (list(, $suffix) = each($date_suffixes)) {
CRM/Report/Form/ActivitySummary.php: while (list(, $suffix) = each($date_suffixes)) {
CRM/Utils/Migrate/Import.php: while (list($group_id, $fields) = each($fields_indexed_by_group_id)) {
CRM/Utils/Migrate/Import.php: while (list(, $customFieldXML) = each($fields)) {
CRM/Utils/Token.php: while (list($key) = each($greetingTokens)) {
```
ping @eileen @monish.deb5.3.0https://lab.civicrm.org/dev/core/-/issues/118Fix where count() is used on an object that isn't an array nor implements Cou...2018-12-19T14:11:24ZseamusleeFix where count() is used on an object that isn't an array nor implements Countable for php7.2 (tested instances)```
<error type="PHPUnit_Framework_Error_Warning">CRM_Contribute_Import_Parser_ContributionTest::testImportParserWithSoftCreditsByExternalIdentifier with data set #0 ('.')
count(): Parameter must be an array or an object that...```
<error type="PHPUnit_Framework_Error_Warning">CRM_Contribute_Import_Parser_ContributionTest::testImportParserWithSoftCreditsByExternalIdentifier with data set #0 ('.')
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php:67
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
</testcase>
<testcase name="testImportParserWithSoftCreditsByExternalIdentifier with data set #1" assertions="8" time="0.685860">
<error type="PHPUnit_Framework_Error_Warning">CRM_Contribute_Import_Parser_ContributionTest::testImportParserWithSoftCreditsByExternalIdentifier with data set #1 (',')
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Contribute/Import/Parser/ContributionTest.php:67
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgePaymentTest::testRetrieveZeroPledeID
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgePaymentTest.php:100
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgePaymentTest::testRetrieveStringPledgeID
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgePaymentTest.php:113
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgePaymentTest::testRetrieveKnownPledgeID
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgePaymentTest.php:127
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgePaymentTest::testDeletePledgePaymentsNormal
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgePaymentTest.php:137
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgePaymentTest::testDeletePledgePaymentsNullId
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgePaymentTest.php:160
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgeTest::testRetrieveZeroPledeID
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php:106
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
</testcase>
<testcase name="testRetrieveStringPledgeID" class="CRM_Pledge_BAO_PledgeTest" file="/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php" line="112" assertions="1" time="0.143334">
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgeTest::testRetrieveStringPledgeID
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php:117
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
</testcase>
<testcase name="testRetrieveKnownPledgeID" class="CRM_Pledge_BAO_PledgeTest" file="/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php" line="123" assertions="1" time="0.165138">
<error type="PHPUnit_Framework_Error_Warning">CRM_Pledge_BAO_PledgeTest::testRetrieveKnownPledgeID
count(): Parameter must be an array or an object that implements Countable
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php:147
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
</testcase>
<testcase name="testGetPledgeStartDate" class="CRM_Pledge_BAO_PledgeTest" file="/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php" line="153" assertions="1" time="0.149295">
<error type="PHPUnit_Framework_Error_Deprecated">CRM_Pledge_BAO_PledgeTest::testGetPledgeStartDate
The each() function is deprecated. This message will be suppressed on further calls
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/CRM/Pledge/BAO/Pledge.php:1203
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Pledge/BAO/PledgeTest.php:163
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:182
/home/seamus/buildkit/bin/phpunit5:598
</error>
```
ping @eileen @monish.deb5.4.0https://lab.civicrm.org/dev/core/-/issues/122Wrong Action Links Shown for Reserved and Locked Option Groups2018-05-19T06:07:03ZmichaelWrong Action Links Shown for Reserved and Locked Option GroupsIn #55 I hid the "delete" link for options in a locked option group. This has a bug as it will already not have the "delete" link if the option value is reserved:
```
if ($dao->is_reserved) {
$action = CRM_Core_Action::UPDATE;
}
```
...In #55 I hid the "delete" link for options in a locked option group. This has a bug as it will already not have the "delete" link if the option value is reserved:
```
if ($dao->is_reserved) {
$action = CRM_Core_Action::UPDATE;
}
```
So subtracting the `CRM_Core_Action::DELETE` will result in a negative value for `$action` and more links than expected will be shown.
This can be fixed by first checking if the `CRM_Core_Action::DELETE` flag is active before unsetting it.
---
Link to PR: https://github.com/civicrm/civicrm-core/pull/12154/files5.3.0https://lab.civicrm.org/dev/core/-/issues/124Registration approval issues2018-06-17T23:18:36Zaydunsaidan.saunders@squiffle.ukRegistration approval issuesFor events requiring approval:
1) The confirmation screen generates a warning:
`Warning: A non-numeric value encountered in XXX/civicrm/CRM/Event/Form/Registration/Confirm.php on line 262`
2) The pre-approval confirmation and post-appr...For events requiring approval:
1) The confirmation screen generates a warning:
`Warning: A non-numeric value encountered in XXX/civicrm/CRM/Event/Form/Registration/Confirm.php on line 262`
2) The pre-approval confirmation and post-approval confirmation emails both have the subject 'Registration Confirmation' which is confusing to recipients.
3) The pre-approval confirmation mail includes a Fees section which shows fees of 0 since the fees have not been selected at this stage. So it would be better to remove the Fees section from the pre-approval confirmation (but not the post-approval confirmation)5.4.0aydunsaidan.saunders@squiffle.ukaydunsaidan.saunders@squiffle.ukhttps://lab.civicrm.org/dev/core/-/issues/125Invalid link to custom-fields documentation2018-12-15T22:50:50ZedgimarInvalid link to custom-fields documentationOn the `index.php?q=civicrm/admin/custom/group&reset=1` screen, the "learn more..." link appears to be broken -- this target of this link is currently https://docs.civicrm.org/user/en/latest/organising-your-data/custom-fields but should ...On the `index.php?q=civicrm/admin/custom/group&reset=1` screen, the "learn more..." link appears to be broken -- this target of this link is currently https://docs.civicrm.org/user/en/latest/organising-your-data/custom-fields but should instead be https://docs.civicrm.org/user/en/latest/organising-your-data/creating-custom-fields/.
Using CiviCRM 5.1.1.5.9https://lab.civicrm.org/dev/core/-/issues/126Soft Credit report redirect to Contribution Detail report doesn't filter cont...2018-05-21T12:01:59ZjrolfsSoft Credit report redirect to Contribution Detail report doesn't filter contact idIt looks like the names in the Soft Credit report no longer redirect to a Contribution Detail report that filters the results based on the contact's id. The same error occurs on dmaster.demo.civicrm.org.
![Snap_2018-05-17_at_16.53.45](/...It looks like the names in the Soft Credit report no longer redirect to a Contribution Detail report that filters the results based on the contact's id. The same error occurs on dmaster.demo.civicrm.org.
![Snap_2018-05-17_at_16.53.45](/uploads/229b8d3c6a85a76130928875c2616d94/Snap_2018-05-17_at_16.53.45.jpg)5.3.0https://lab.civicrm.org/dev/core/-/issues/133Reply-to field with empty string get saved in DB as NULL2018-06-18T20:41:13ZvarshithReply-to field with empty string get saved in DB as NULL**Issue:**
Somehow our client's mailing got saved with 'NULL' reply-to field and was causing problems.
On looking into it and trying to reproduce the issue, 'reply to' field can be NULL in the following case
- Add a new mailing (or reus...**Issue:**
Somehow our client's mailing got saved with 'NULL' reply-to field and was causing problems.
On looking into it and trying to reproduce the issue, 'reply to' field can be NULL in the following case
- Add a new mailing (or reuse one)
- Select a 'reply to' email (I had to enable "Enable Custom Reply-To" in 'civicrm/admin/mail')
- Fill in other fields as usual
- Under 'Responses' tab, check "Track Replies" checkbox. This brings up a warning message on the top right saying 'reply-to' has been cleared out (but still allows user to save mailing)
- Proceed to next step and save mailing
**Proposed Fix:**
I am not sure how to fix this as the user is expected to see the warning message and act accordingly. But I think we can check and not allow NULL values for reply-to in DB.
In CRM_Mailing_BAO_Mailing.php when adding a new mailing (add() method), there is a condition to check if 'reply-to' field is set and if it is not set, then 'from-email' is used.
here instead if using
if(\!isset($params['replyto_email']))...
we should use
if(empty($params['replyto_email']))...
so that empty string like '' will also be considered and reply-to could not be NULL5.4.0https://lab.civicrm.org/dev/core/-/issues/134Search Builder broken filter for Source Contact ID2018-06-08T04:12:28ZMonish DebSearch Builder broken filter for Source Contact IDSearch Builder lists the 'Source Contact ID' field but doesn't populate the information nor filter things appropriately. Use any filter in Search Builder with Activity >> Source Contact ID criteria, it will always show empty value below ...Search Builder lists the 'Source Contact ID' field but doesn't populate the information nor filter things appropriately. Use any filter in Search Builder with Activity >> Source Contact ID criteria, it will always show empty value below this column.
https://issues.civicrm.org/jira/secure/attachment/63475/Search%20Builder.pngMonish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/135Non Numeric value encountered in CRM_Batch_Form_entryTest on PHP7.1 and 7.22018-11-04T20:33:27ZseamusleeNon Numeric value encountered in CRM_Batch_Form_entryTest on PHP7.1 and 7.2```
<error type="PHPUnit_Framework_Error_Notice">CRM_Batch_Form_EntryTest::testMembershipRenewalDates
A non well formed numeric value encountered
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/CRM/Price/BAO/LineItem.php:...```
<error type="PHPUnit_Framework_Error_Notice">CRM_Batch_Form_EntryTest::testMembershipRenewalDates
A non well formed numeric value encountered
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/CRM/Price/BAO/LineItem.php:374
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/CRM/Price/BAO/PriceSet.php:747
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/CRM/Batch/Form/Entry.php:761
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/CRM/Batch/Form/Entry.php:922
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CRM/Batch/Form/EntryTest.php:256
/home/seamus/buildkit/build/47.demo/sites/all/modules/civicrm/tests/phpunit/CiviTest/CiviUnitTestCase.php:192
/home/seamus/buildkit/bin/phpunit5:598
</error>
```
The relevant code is here https://github.com/civicrm/civicrm-core/blob/master/CRM/Price/BAO/LineItem.php#L374 i'm guessing its most likely going to be $qty that is NULL maybe5.3.0https://lab.civicrm.org/dev/core/-/issues/137Possible regression on case search - placeholder2018-05-28T02:48:05ZeileenPossible regression on case search - placeholderMentioned here -
https://github.com/civicrm/civicrm-core/pull/11759#pullrequestreview-122555717
Opened this so we don;'t lose track of it
@monish.debMentioned here -
https://github.com/civicrm/civicrm-core/pull/11759#pullrequestreview-122555717
Opened this so we don;'t lose track of it
@monish.deb5.2.0https://lab.civicrm.org/dev/core/-/issues/138API Participant getcount limits at 252018-05-25T07:43:44ZpbatroffAPI Participant getcount limits at 25When making an API call on Participant with action 'getcount', the result is limited to 25 Participants, unless the option for result limit `'options' => array('limit' => 0),` is added.
This is easily reproduce able with a default inst...When making an API call on Participant with action 'getcount', the result is limited to 25 Participants, unless the option for result limit `'options' => array('limit' => 0),` is added.
This is easily reproduce able with a default installation and the example data. Select Participant, getcount and all Events. The API result is 25, but when the option is set it is 50. The API behaves correctly with Contacts - e.g. getcount Contacts (type Individuals) results in 161 contacts with the example data.
Tested with 4.7.18, and the newest 5.1.2.
I think the getcount action should behave consistently, and not be limited to 25.https://lab.civicrm.org/dev/core/-/issues/141Custom groups with different names but same title would not be saved2018-07-14T01:25:44ZjaapjansmaCustom groups with different names but same title would not be savedI have created two custom groups from within my extension:
* Name: group_areas, Title: Areas
* Name: contact_areas, Title: Areas
When I now edit the custom group it will fail because both custom groups have the same title but a differe...I have created two custom groups from within my extension:
* Name: group_areas, Title: Areas
* Name: contact_areas, Title: Areas
When I now edit the custom group it will fail because both custom groups have the same title but a different name.
Is this correct behaviour?
See this stack exchange question: https://civicrm.stackexchange.com/questions/25102/https-civicrm-org-extensions-areas-causing-error/25104#25104
Tested on CiviCRM version 5.0.0 and CiviCRM version 5.1.aplha15.5.0https://lab.civicrm.org/dev/core/-/issues/143Contact 'World Region' Field not functioning properly in Search Builder2018-05-28T02:48:08ZMonish DebContact 'World Region' Field not functioning properly in Search BuilderTo reproduce:
'Search' -> 'Search Builder'.
Search for 'Contacts' -> 'World Region' -> '='.
Upon doing the above, the user is presented with a text box instead of the expected dropdown <select> menu.
If the user proceeds to use the une...To reproduce:
'Search' -> 'Search Builder'.
Search for 'Contacts' -> 'World Region' -> '='.
Upon doing the above, the user is presented with a text box instead of the expected dropdown <select> menu.
If the user proceeds to use the unexpected textbox and manually type in the World Region they are searching for, they get an error of the following kind:
Europe and Central Asia is not of the type Positive
This has been reproduced successfully on the test site at http://wpmaster.demo.civicrm.org
JIRA - https://issues.civicrm.org/jira/browse/CRM-203955.3.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/147One of parameters is not of the type MysqlColumnNameOrAlias when using Non-AS...2019-04-29T20:20:11ZMonish DebOne of parameters is not of the type MysqlColumnNameOrAlias when using Non-ASCII display names.To reproduce, change Display Name of a location type (http://dmaster.demo.civicrm.org/civicrm/admin/locationType) to some Non-ASCII text (or just install civicrm on some Non-ASCII language, in my case Russian). When go to Search Builder ...To reproduce, change Display Name of a location type (http://dmaster.demo.civicrm.org/civicrm/admin/locationType) to some Non-ASCII text (or just install civicrm on some Non-ASCII language, in my case Russian). When go to Search Builder (http://dmaster.demo.civicrm.org/civicrm/contact/search/builder) and try to search contacts with phone, or email, or address of that location type.
Get an error message:
Sorry but we are not able to provide this at the moment.
One of parameters (value: Дом-email) is not of the type MysqlColumnNameOrAlias
Ref : https://issues.civicrm.org/jira/browse/CRM-19089Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/149Fatal Error on customvalue get api2018-06-01T12:12:09ZjitendraFatal Error on customvalue get apiReplicated on dmaster http://dmaster.demo.civicrm.org/civicrm/api#explorer
Entity = `CustomValue` Action = `get`
Fields to return => `custom_1`
Parameter => `entity_id = <any contact id>`
$result = civicrm_api3('CustomValue', 'get'...Replicated on dmaster http://dmaster.demo.civicrm.org/civicrm/api#explorer
Entity = `CustomValue` Action = `get`
Fields to return => `custom_1`
Parameter => `entity_id = <any contact id>`
$result = civicrm_api3('CustomValue', 'get', [
'sequential' => 1,
'return' => "custom_1",
'entity_id' => 202,
]];
Result -
"is_error": 1,
"error_message": "A fatal error was triggered: is not of type String"jitendrajitendrahttps://lab.civicrm.org/dev/core/-/issues/150Chain select for country/state in Search Builder does not stay within OR grou...2018-07-17T06:54:34ZAndie HuntChain select for country/state in Search Builder does not stay within OR groupingsdev/core#142 introduces a chained select for picking states from countries and picking counties from states. The changes there correctly limit the chaining to be within the same location type. However, picking a country will modify *al...dev/core#142 introduces a chained select for picking states from countries and picking counties from states. The changes there correctly limit the chaining to be within the same location type. However, picking a country will modify *all* state/province fields of that location type, even if they're in different "Also include contacts where" sections.
To recreate, let's say you are planning an event in Detroit:
1. Search for contacts in Michigan:
```
Contacts | Country | Home | = | United States
Contacts | State | Home | = | Michigan
```
2. Search for contacts in Ontario by clicking "Also include contacts where" and setting up:
```
Contacts | Country | Home | = | Canada
Contacts | State | Home | = | Ontario
```
Notice that the state dropdown where Michigan had been selected now has nothing selected and offers only Canadian provinces.
The same thing happens if you have a state field on its own (without country) and you pick a country in another `OR` grouping.5.5.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/151Action to Update Recurring Contributions From Membership View is Never Shown2018-06-20T20:41:20ZCamilo RodríguezAction to Update Recurring Contributions From Membership View is Never Shown## Overview
The table added to view recurring contributions form the membership details view (https://lab.civicrm.org/dev/core/issues/38) was never showing the 'Edit' action. The table shown when looking at recurring contributions from w...## Overview
The table added to view recurring contributions form the membership details view (https://lab.civicrm.org/dev/core/issues/38) was never showing the 'Edit' action. The table shown when looking at recurring contributions from within a membership should behave exactly as the table shown on a contact's **Contributions** tab.
## How it Works Currently
The table added to view recurring contributions form the membership details view was never showing the 'Edit' action, even though the user had all necessary permissions.
## How it Should Work
If the 'Edit' action is shown on the list of recurring contributions of a contact on **Contributions** tab, it should also be available on the list shown within a membership.
## Comments
Related to change introduced in #385.4.0https://lab.civicrm.org/dev/core/-/issues/153Pending Pay Later /w Custom payment method2020-11-19T07:07:10ZADG CreativePending Pay Later /w Custom payment methodCiviCRM 5.1.2
Joomla 3.8.7
(Replicated on civicrm.demo.civihosting.com - CiviCRM 5.0.0 - Drupal)
Create a custom Payment Method (ie. Undetermined), with Financial Account = Accounts Receivable
On the administrative side, register contac...CiviCRM 5.1.2
Joomla 3.8.7
(Replicated on civicrm.demo.civihosting.com - CiviCRM 5.0.0 - Drupal)
Create a custom Payment Method (ie. Undetermined), with Financial Account = Accounts Receivable
On the administrative side, register contact for an event with Payment Method=Undetermined, Payment Status=Pending
Go to the Contribution tab, the contribution is Pending Pay Later
Do Record Payment, Payment Method=Check, Add Check #, Payment Status=Complete, (Full Amount Paid)
The Contribution will be marked with a Payment Status of Partially Paid
Admin can edit the contribution and mark it as Payment Status = Complete, but...
Expand the payment information, Record Payment links are still visible, but will throw an error if clicked
civicrm_contribution.payment_instrument_id = Undetermined (Although payment method was set to Check)
civicrm_financial_trxn.from_financial_account_id = Accounts Receivable
civicrm_financial_trxn.to_financial_account_id = Accounts Receivable
Contribution not listed in Bookkeeping Report
Also cannot find contribution by Check# in Contributions->Find Contributions (Not sure if related or separate issue)
![CompletedMarkedasPartiallyPaid](/uploads/26c971d0956ac4c6abd40cb6933fd917/CompletedMarkedasPartiallyPaid.jpg)5.9https://lab.civicrm.org/dev/core/-/issues/154Can't edit related records when current employer has a pending membership2018-06-06T08:42:12ZUpperholmeCan't edit related records when current employer has a pending membershipI originally posted this in https://lab.civicrm.org/dev/core/issues/14 and Eileen suggested it might be a separate issue.
Using Civi 5.1 and D7. An org record exists and has a pending membership (created through a contribution page and ...I originally posted this in https://lab.civicrm.org/dev/core/issues/14 and Eileen suggested it might be a separate issue.
Using Civi 5.1 and D7. An org record exists and has a pending membership (created through a contribution page and opted to pay later). the membership is configured such that individuals linked via 'employed by' inherit the membership.
There are several related individual records, with the org as current employer. In anticipation of the payment being made and the membership going live, we want to edit the individual records to add further detail (just stuff like Job title, etc.) When trying to save any edits, we get the error message:
"The membership cannot be saved because the status cannot be calculated for start_date: null end_date null join_date null as at 2018-05-25 10:40:37"
The only workaround seems to be to edit the membership record and give it a start date and then override the status of the membership so that it remains pending.5.3.0https://lab.civicrm.org/dev/core/-/issues/157Do not delete indexes if they are needed for foreign keys2019-02-24T21:11:32ZMichael McAndrewDo not delete indexes if they are needed for foreign keysBefore
------
When changing a custom field from searchable to not searchable, CiviCRM tries to remove the index. This causes a fatal error when the column is also a foreign key to another table because the index is needed for the foreig...Before
------
When changing a custom field from searchable to not searchable, CiviCRM tries to remove the index. This causes a fatal error when the column is also a foreign key to another table because the index is needed for the foreign key.
After
-----
We ensure that the column is not an FK before removing the index
Technical details
-----------------
I added a test to CustomFieldTest which exercises this functionality5.3.0https://lab.civicrm.org/dev/core/-/issues/160Import Progress bar polls server too often2018-06-05T04:12:17ZseamusleeImport Progress bar polls server too oftenThe import progress bar polls the server every 5 milliseconds for progress rather 5 seconds which is what i think the expectation was meant to beThe import progress bar polls the server every 5 milliseconds for progress rather 5 seconds which is what i think the expectation was meant to be5.3.0seamusleeseamusleehttps://lab.civicrm.org/dev/core/-/issues/164scheduled reminders: form validations when repetition enabled2018-06-06T14:41:34Zlcdwebscheduled reminders: form validations when repetition enabledin the scheduled reminders interface, if you enable repetition, the every X until Y fields are required -- the job will fail with SQL errors if the fields are left empty. but currently, the fields are not required by the UI. we should ad...in the scheduled reminders interface, if you enable repetition, the every X until Y fields are required -- the job will fail with SQL errors if the fields are left empty. but currently, the fields are not required by the UI. we should add form validations to require values in those fields.lcdweblcdwebhttps://lab.civicrm.org/dev/core/-/issues/165Bad link in civicrm/case/activity/view breadcrumb2018-06-08T06:11:50ZmikantchapBad link in civicrm/case/activity/view breadcrumbDisable popups in display preferences.
Find a case eg civicrm/case/search?reset=1.
'Manage' the case to open it.
Click on the activity Subject, goes to eg civicrm/case/activity/view?cid=203&aid=642
The 'Case Activity' breadcrumb link...Disable popups in display preferences.
Find a case eg civicrm/case/search?reset=1.
'Manage' the case to open it.
Click on the activity Subject, goes to eg civicrm/case/activity/view?cid=203&aid=642
The 'Case Activity' breadcrumb links to civicrm/case/activity?reset=1 which gives an error when you try to use it:
Sorry, due to an error, we are unable to fulfill your request at the moment. You may want to contact your administrator or service provider with more details about what action you were performing when this occurred. required params missing.
Can reproduce this on http://dmaster.demo.civicrm.orghttps://lab.civicrm.org/dev/core/-/issues/168If scheduled jobs are run individually nothing is logged to civicrm job log2022-08-15T05:03:21ZlolcodeIf scheduled jobs are run individually nothing is logged to civicrm job logWhen running scheduled jobs individually to have greater control over the timing or parameters of those jobs then nothing is logged to the JobLog at least for certain jobs like process_mailing. This leaves the user to implement something...When running scheduled jobs individually to have greater control over the timing or parameters of those jobs then nothing is logged to the JobLog at least for certain jobs like process_mailing. This leaves the user to implement something else for logging.
I don't agree with this approach because it will push organisations to use custom solutions but it should at least be a documented limitation.
https://docs.civicrm.org/user/en/latest/initial-set-up/scheduled-jobs/#specific-jobshttps://lab.civicrm.org/dev/core/-/issues/173Missing email on contribution thank you page when using pay later and a profi...2022-12-13T05:03:44ZAlanDixonMissing email on contribution thank you page when using pay later and a profile that includes an email addressAs per https://civicrm.stackexchange.com/questions/23034/email-address-is-missing-on-thank-you-page-where-it-says-an-email-confirmation reported by @petednz
1. It seems like the _emailExists property is setup to track when the email is...As per https://civicrm.stackexchange.com/questions/23034/email-address-is-missing-on-thank-you-page-where-it-says-an-email-confirmation reported by @petednz
1. It seems like the _emailExists property is setup to track when the email is included in a profile (and therefore not at it's usual key), and I notice that that property is handled on the Confirm page but not on the Thankyou page.
2. The email address does show up on the page within the profile display, so it's available.
So we just need to get it assigned to the email variable in the smarty, I think the preprocess method is where it should be done. I tried using some code similar to the stuff on the Confirm page, but it didn't work, I'm kind of making it up ...https://lab.civicrm.org/dev/core/-/issues/174Consistently use swappable cache interfaces2023-12-20T06:26:25ZtottenConsistently use swappable cache interfaces# Background
CiviCRM caches were originally (and are primarily) stored in the table `civicrm_cache`. This design is great for small sites (easy to deploy on server with less software to administer). However, for larger sites that get va...# Background
CiviCRM caches were originally (and are primarily) stored in the table `civicrm_cache`. This design is great for small sites (easy to deploy on server with less software to administer). However, for larger sites that get value from using multiple MySQL servers, it's not so great: cache data (by its nature) is frequently written+read, but it's expensive to write cache data when there are multiple MySQL servers... and the overhead doesn't give us much benefit because the data is fundamentally expendable. A lighter system (like Memcache/Redis) would be more generally appropriate.
You might recall that CiviCRM's cache subsystem can optionally incorporate Memcache/Redis (since roughly 4.3ish?). This appears as `CRM_Utils_Cache_*`, and it started some great improvements (e.g. using faster cache providers; and swapping cache providers). Notably, the functionality uses Memcache/Redis as an *extra cache tier* (i.e. when reading a cache, it first checks memcache; then it falls back to checking `civicrm_cache` in MySQL). This helps *read performance* (because your cache-hit usually returns faster), but it doesn't help *write performance* (because you need to propagate cache-writes to every tier). Using *only* Memcache/Redis (as a single tier -- without MySQL) would be even better for performance.
I don't believe that the status quo reflects a technical necessity. (If you can handle deployment/configuration of Memcache/Redis a front-tier... then you can probably handle it as the main tier.) Rather, it reflects a development practicality: *the app was originally written to only use `civicrm_cache`*. Consequently, there are a handful of oddball use-cases/code-paths which directly access `civicrm_cache` or `CRM_Core_BAO_Cache`, and it would've been harder to do anything if it had required finding+fixing all of them.
# Scope
The general scope of this ticket is to hunt down the oddball use-cases/code-paths which directly reference `civicrm_cache` or `CRM_Core_BAO_Cache`. I expect the project to produce a handful of distinct PRs. To avoid redundantly documenting this, I'm aiming for each PR to have a more concrete discussion about the use-cases/code-paths being cleaned up.
# PR List
* [12330 - CRM_Utils_Cache_Redis::flush() - Respect prefixes](https://github.com/civicrm/civicrm-core/pull/12330) (m)
* [12331 - CRM_Utils_Cache - Always use a prefix. Standardize delimiter](https://github.com/civicrm/civicrm-core/pull/12331) (m)
* [12336 - systemStatusCheckResult - Migrate from settings to cache](https://github.com/civicrm/civicrm-core/pull/12336) (m)
* [12342 - Caching - Comply with PSR-16 interfaces](https://github.com/civicrm/civicrm-core/pull/12342) (m)
* [215 - Import PSR-16 compliance test](https://github.com/civicrm/civicrm-packages/pull/215) (m)
* [12348 - Cache-keys for CRM_Utils_Cache_* should avoid reserved chars](https://github.com/civicrm/civicrm-core/pull/12348) (m)
* ~~[12350 - civicrm_cache - Allow storage of binary data](https://github.com/civicrm/civicrm-core/pull/12350)~~
* [12354 - civicrm_cache - Allow storage of binary data](https://github.com/civicrm/civicrm-core/pull/12354) (m)
* [~~12360~~ - Full PSR-16 compliance for ...](https://github.com/civicrm/civicrm-core/pull/12360) (*depends: ~~12342, 12348, 12354~~*). Cherry-picked to form smaller PRs:
* [12376 - Add various utilities to support PSR-16](https://github.com/civicrm/civicrm-core/pull/12376) (m)
* [12378 - ArrayCache, Redis](https://github.com/civicrm/civicrm-core/pull/12378) (m)
* [12379 - SqlGroup](https://github.com/civicrm/civicrm-core/pull/12379) (m)
* [12380 - Memcache(d)](https://github.com/civicrm/civicrm-core/pull/12380) (m)
* [12381 - APCcache](https://github.com/civicrm/civicrm-core/pull/12381) (m)
* [12389 - Add test to prevent hidden interactions among caches](https://github.com/civicrm/civicrm-core/pull/12389) (m)
* [12362 - Forms/Sessions - Store state via Civi::cache('session')](https://github.com/civicrm/civicrm-core/pull/12362) (*depends: 12360*)
* [12368 - ~~civicrm_cache - Finish transition from DATETIME to TIMESTAMP](https://github.com/civicrm/civicrm-core/pull/12368)~~ (m)
See also
--------
* dev/core#217 - Allow replacement of PrevNextCache implementation (for search screens)
* dev/core#284 - Aggressive cache clearing significantly increases test time5.9tottentotten