CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2023-02-27T15:03:26Zhttps://lab.civicrm.org/dev/core/-/issues/3901Dedupe rule with custom fields fails to work as Supervised2023-02-27T15:03:26ZpetednzDedupe rule with custom fields fails to work as SupervisedOverview
----------------------------------------
If a Dedupe matching rule is created which contains a custom field, and it is set to be used for Supervised, it fails to function when Add Individual is used, but does identify the duplic...Overview
----------------------------------------
If a Dedupe matching rule is created which contains a custom field, and it is set to be used for Supervised, it fails to function when Add Individual is used, but does identify the duplicate when 'use rule' is run
https://civicrm.stackexchange.com/questions/42264/supervised-dedupe-rule-finds-duplicate-when-manually-run-but-not-automatically?noredirect=1#comment50398_42264
Reproduction steps
----------------------------------------
1. On dmaster add a Rule with Last + Marital Status - set rule to be Supervised.
2. Edit Contact 166 to be 'Single' in Marital Status.
3. Add a new contact with Last = Lee and Marital Status = Single. No duplicate warning is provided
4. Run the Supervised Rule and note that the Duplicate records for Lee are listed
Current behaviour
----------------------------------------
Duplicate warning when creating contact does not show
Expected behaviour
----------------------------------------
Duplicate warning when creating contact does not show
Environment information
----------------------------------------
https://dmaster.demo.civicrm.org/
Comments
----------------------------------------
I saw a few other tickets in here referencing custom fields but they seem to be more nuanced eg
https://lab.civicrm.org/dev/core/-/issues/2300
https://lab.civicrm.org/dev/core/-/issues/2966colemanwcolemanwhttps://lab.civicrm.org/dev/core/-/issues/3851Discussion: How to make past unsubscribes visible in the UI2022-10-11T10:38:49ZlarsssandergreenDiscussion: How to make past unsubscribes visible in the UIEdit: Title changed to reflect discussion, which has gone in a different (better) direction.
Sometimes, a contact unsubscribes from a group and is later re-added to the same group. After this happens, we no longer have any record of the...Edit: Title changed to reflect discussion, which has gone in a different (better) direction.
Sometimes, a contact unsubscribes from a group and is later re-added to the same group. After this happens, we no longer have any record of the contact unsubscribing as their group status has been updated to Added with the added date.
It would be useful to be able to check when a contact unsubscribed in order to troubleshoot (are contacts being re-added to groups they have unsubscribed from?), to confirm with the contact manually that they wish to be in a newsletter subscription group and generally to be able to say that the org has a record of the contact unsubscribing. Similarly, if a contact unsubscribes from a group that is later deleted, then there is no longer any record of their having unsubscribed.
So, I propose to add an activity whenever a contact unsubscribes from a group by email:
1. Add an activity type: Unsubscribe.
2. Whenever a contact unsubscribes by email, add an activity of this type with the subject indicating the group unsubscribed from and the mailing from which they unsubscribed: "Unsubscribed from GROUP via MAILING".
For similar record keeping purposes, I think it would make sense to do the same with opt outs, with a new Opt out activity type, with subject: "Opted out from bulk emails via MAILING".
In theory, these changes would be viewable in the change log, but that's only if you have logging turned on and are willing to trawl through many change log entries to try to find the relevant one. An activity would be much more usable and is in line with many other actions that are recorded as activities (like changes to recurring contributions, contributions themselves, membership status changes, event registrations and changes, etc).https://lab.civicrm.org/dev/core/-/issues/3833PHP 8.2 Dynamic Properties are deprecated2024-03-22T12:22:59ZBradley TaylorPHP 8.2 Dynamic Properties are deprecatedSee https://wiki.php.net/rfc/deprecate_dynamic_properties.
I see this as a big one, which could require a significant number of fixes for CiviCRM. The RFC has a good example showing what has changed:
```
class User {
public $name;
...See https://wiki.php.net/rfc/deprecate_dynamic_properties.
I see this as a big one, which could require a significant number of fixes for CiviCRM. The RFC has a good example showing what has changed:
```
class User {
public $name;
}
$user = new User;
// Assigns declared property User::$name.
$user->name = "foo";
// Oops, a typo:
$user->nane = "foo";
// PHP <= 8.1: Silently creates dynamic $user->nane property.
// PHP 8.2: Raises deprecation warning, still creates dynamic property.
// PHP 9.0: Throws Error exception.
```
There are many uses of dynamic properties in CiviCRM core which fall into multiple categories:
1. Known undeclared properties. For example `CRM_Activity_Form_Task_Batch` repeatedly references `$_fields` which should just be defined.
2. Dynamic properties. The main example of this is `CRM_Core_DAO`. PHP allows for this use-case by either extending `stdClass` or using the new ` #[AllowDynamicProperties]` attribute. Where possible we should prefer extending `stdClass` which is likely to have better long-term support (i.e. into the PHP 9.x series)
3. Typo's etc. Cases where the property is defined, but later referenced with a different name. These are easy; we just fix the typo (whilst ensuring we don't break any backwards compatiability for plugins using the wrong spelling)
I suggest CiviCRM developers should start to be made aware of this now, to avoid making the problem worse. Incrementally starting to fix the issue, a class or two at a time, seems like a good idea.
In many cases it's not clear why dynamic properties (or declared properties for that matter) are being used instead of a standard variable. This might be a good chance to start annotating properties as either:
- `@api`; designed to be used within hooks, on singletons etc by CiviCRM extensions
- `@internal`; not designed to be used by extensions, and liable to be removed without deprecation.https://lab.civicrm.org/dev/core/-/issues/3806Contribution Pages: Spread the Word show on Live Page from start if Enabled.2024-03-28T05:03:24ZBarijohnContribution Pages: Spread the Word show on Live Page from start if Enabled.Overview
----------------------------------------
Currently the Spread the Word Social Media footer on Contribution Pages ONLY appears when you have completed the transaction. This means that it isn't easy to share the page from the dona...Overview
----------------------------------------
Currently the Spread the Word Social Media footer on Contribution Pages ONLY appears when you have completed the transaction. This means that it isn't easy to share the page from the donation page, as you might have missed the opportunity when you complete it.
On Events this is showing as soon as you land on the Event Information Page and I suggest this would be a good improvement on Contribution Pages as well.
Example use-case
----------------------------------------
1. Click on Contribution Link - See Spread the Word. Can share directly from this page to Social Media.
May increase sharing of the page and increase donations. Also it will be shown to users when creating page and they can test it easily.
Current behaviour
----------------------------------------
Currently this ONLY appears when you have completed the full transaction and appears at the confirmation stage. Easy to skip past it as well.
![Contribution_Completed](/uploads/f1a68833823dec4ccd78bb4d12ab4cb8/Contribution_Completed.png)
Proposed behaviour
----------------------------------------
Show the Spread the Word on the main contribution page. As Per the Events Page.
![Screenshot_2022-08-16_at_12.31.16](/uploads/acaa5bedff273314189446561ca8c8be/Screenshot_2022-08-16_at_12.31.16.png)
Comments
----------------------------------------
Thoughts?https://lab.civicrm.org/dev/core/-/issues/3664Import - proposal - remove dataColumn guessing2022-08-10T19:47:08ZeileenImport - proposal - remove dataColumn guessingWhen you do a csv import in CiviCRM it attempts to guess the columns you are trying to import to
- if you provide column headings then it uses these. This works fairly well if your csv is based on an export from CiviCRM so I feel it is ...When you do a csv import in CiviCRM it attempts to guess the columns you are trying to import to
- if you provide column headings then it uses these. This works fairly well if your csv is based on an export from CiviCRM so I feel it is helpful
- if you don't it attempts to from the data provided. In most cases it can't. In a few narrow English specific cases (eg. 'mr' is a prefix) it does. I've found it often matches 'any string' to 'City' - which is probably the first any-string match it hits.
Three of us have separately come to the conclusion the data match attempt does more harm than good - opinions are more mixed on the heading match.
PROPOSAL - entirely remove the data matching efforts5.53.0https://lab.civicrm.org/dev/core/-/issues/3645Eventually google will require OAUTH for bounce processing and may require it...2022-12-08T20:55:07ZDaveDEventually google will require OAUTH for bounce processing and may require it for outbound SMTP through gmail serversAs noted on [stackexchange](https://civicrm.stackexchange.com/questions/34142/sending-mail-via-gmail-google-announce-username-password-authentication-will-b), Google sent out an email outlining plans to require OAUTH and discontinue supp...As noted on [stackexchange](https://civicrm.stackexchange.com/questions/34142/sending-mail-via-gmail-google-announce-username-password-authentication-will-b), Google sent out an email outlining plans to require OAUTH and discontinue support for just username/password.
The way I read it, this is mostly applying to POP/IMAP clients for reading mail, and they are *hinting* that someday they might require it for outbound SMTP, i.e. at Administer - System Settings - Outbound Mail you choose SMTP and have it set to use gmail servers. The relevant quote is
> No change is required for scanners or other devices using simple mail transfer protocol (SMTP) or LSAs to send emails. If you replace your device, look for one that sends email using OAuth.
(LSA means less secure apps, which is google-speak for username/password)
They are targeting June 2020 - Feb 2021 for IMAP etc, but as noted above they have not specifically set a date for changes regarding sending outbound emails.
It occurs to me though that bounce processing and the email processor use POP/IMAP. For the email processor you can work around it by just forwarding it to a non-gmail address and polling that, but bounce processing might be harder depending on setup.https://lab.civicrm.org/dev/core/-/issues/3616Should tracking pixel be placed at start of email for when Gmail clips messages?2024-02-18T05:03:26ZlarsssandergreenShould tracking pixel be placed at start of email for when Gmail clips messages?With Mosaico templates, it isn't that difficult to reach Gmail's limit of 96-102kB with an email newsletter, after which your email message is clipped and not displayed in full. This is unfortunate in itself, but it also breaks open trac...With Mosaico templates, it isn't that difficult to reach Gmail's limit of 96-102kB with an email newsletter, after which your email message is clipped and not displayed in full. This is unfortunate in itself, but it also breaks open tracking as the tracking pixel is only embedded at the very end of the message and thus isn't fetched unless the reader clicks "View entire message".
Would it be worthwhile to consider putting the tracking pixel at the start of the message to avoid this issue? Obviously, less than ideal for those who don't display images, but I'm not sure how these two might balance out or if there is a clever way to have the best of both worlds.
I'd be happy to provide a patch, but not sure what the best way forward is here.
(Was a former Flexmailer issue, reposted here as I think this is still important.)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/3563Include optional unsubscribe group field on regular mailings2024-02-13T05:03:23ZlarsssandergreenInclude optional unsubscribe group field on regular mailingsWhen you create a mailing from search results, you are required to add an unsubscribe group. When you create a regular mailing and add groups to the recipients, you can't specify the unsubscribe group. Sometimes, it would be helpful to b...When you create a mailing from search results, you are required to add an unsubscribe group. When you create a regular mailing and add groups to the recipients, you can't specify the unsubscribe group. Sometimes, it would be helpful to be able to specify an unsubscribe group that is different than the group the contact is a member of. For instance, if you send a mailing to a few groups based on your main mailing list, perhaps a set of smart group that are subsets of the main list, you may want contacts to unsubscribe from your main list instead of the smart group.
Proposal: Add an optional unsubscribe group to all mailings. If it is blank, unsubscribes work as they do now. If it is populated, all recipients are unsubscribed from the unsubscribe group (exactly as this works for a mailing based on a search now).
EDIT: On @JoeMurray's suggestion, contacts would be unsubscribed from both the original group that are recipients of the mailing and the specified unsubscribe group.
I can give this a go if there is support for the concept.https://lab.civicrm.org/dev/core/-/issues/3552Set time limit for bounce types with hold_threshold > 12023-09-05T10:00:02ZMichael McAndrewSet time limit for bounce types with hold_threshold > 1Bounce types can be split into those with a hold_threshold = 1 where a single bounce should cause this contact to be put on hold (e.g. mailbox non existent), and those where more than one bounce is required (mailbox full).
We don't curr...Bounce types can be split into those with a hold_threshold = 1 where a single bounce should cause this contact to be put on hold (e.g. mailbox non existent), and those where more than one bounce is required (mailbox full).
We don't currently set a time limit on those where more than one bounce is required, which is an oversight. For example, the bounce threshold for Mailbox full is 3. This means that as soon as we have received more than 3 mailbox full messages for a contact, their email will be put on hold. This might make sense if it was 3 in the last year, but doesn't really make sense if it was three in the last 10 years.
Similar arguments can be made for other bounce types, like Away, which is set to 30. If I send a fair amount of email to people that are out of the office quite a lot, over time a significant chunk of these will send me > 30 out of the office messages.
Hence we should only consider messages received in a certain time period. I am going to suggest one year. I would be up for making it user configurable (number of days) if people feel strongly about it.
Let me know what you think.https://lab.civicrm.org/dev/core/-/issues/3521Maintain "official" containerized version(s) of CiviCRM2024-02-06T05:03:28ZmfbMaintain "official" containerized version(s) of CiviCRMCiviCRM could maintain container images for development and/or production use.
This could be useful for CI purposes (e.g. if CiviCRM is eventually doing CI via GitLab), and provide a baseline for shops, developers and implementers who n...CiviCRM could maintain container images for development and/or production use.
This could be useful for CI purposes (e.g. if CiviCRM is eventually doing CI via GitLab), and provide a baseline for shops, developers and implementers who need to deploy/develop/test CiviCRM.https://lab.civicrm.org/dev/core/-/issues/3457Make SearchKit available to non-admin users2022-06-04T04:07:12ZcolemanwMake SearchKit available to non-admin usersThis is a sponsored issue to make SearchKit available to non-admins by adding a new permission.This is a sponsored issue to make SearchKit available to non-admins by adding a new permission.colemanwcolemanwhttps://lab.civicrm.org/dev/core/-/issues/3444Contribution balance token2023-09-24T22:55:47Zmagnolia61Contribution balance tokenOverview
----------------------------------------
Would it be technically easy and functional desired to have contribution balance token?
Example use-case
----------------------------------------
We would like to advocate for an contrib...Overview
----------------------------------------
Would it be technically easy and functional desired to have contribution balance token?
Example use-case
----------------------------------------
We would like to advocate for an contribution balance token
Current behaviour
----------------------------------------
1. We want to send our customers an email with the amount due, or the amount that is pending refund.
2. There is a balance field in the event participant context. But this is absent in the contribution context.
Proposed behaviour
----------------------------------------
A custom token field like {contribution.balance} is available in the contribution context
Comments
----------------------------------------
Eileen opened an issue to enable a balance field for api4 (and an total paid field): https://lab.civicrm.org/dev/core/-/issues/2890https://lab.civicrm.org/dev/core/-/issues/3412Event registration by an administrator sends confirmation email regardless of...2022-05-06T09:58:16ZUpperholmeEvent registration by an administrator sends confirmation email regardless of confirmation settingWhen recording an event registration through the back-end (i.e. as an administrator) it is possible to untick the checkbox against the setting labelled as "Send Confirmation" or for a paid event "Send Confirmation and Receipt".
The expec...When recording an event registration through the back-end (i.e. as an administrator) it is possible to untick the checkbox against the setting labelled as "Send Confirmation" or for a paid event "Send Confirmation and Receipt".
The expected behaviour is that when this checkbox is unchecked then no email will be sent.
In practice this setting appears to be ignored and the email notification is sent regardless.
Using CivicRM 5.13.5 with Drupal 7.https://lab.civicrm.org/dev/core/-/issues/3407End Date on CiviCRM Events mandatory2023-07-08T15:04:35ZseamusleeEnd Date on CiviCRM Events mandatoryIn the Australian Greens we have found that the manage events screen has become a bit unusable in a way becuase the end_date field on events has not been being filled out, as such for the manage events search query they never end
There ...In the Australian Greens we have found that the manage events screen has become a bit unusable in a way becuase the end_date field on events has not been being filled out, as such for the manage events search query they never end
There are a couple of possible solutions to this
1. Make the end date mandatory, this would be the simplest approach and i think one that might be most sensible
2. Use Javascript or PHP to set a default end date of 2Hours after the start of the event or some value set by setting.
I lean towards 1 but would appreciate the communities thoughts5.63.0https://lab.civicrm.org/dev/core/-/issues/3344Recurring membership term is incorrect when using price sets2024-02-06T05:47:22ZJonGoldRecurring membership term is incorrect when using price setsWhen using membership price sets, the recurring contribution created doesn't match the term of the membership selected, it matches the term of the first membership in the price set. The issue is mentioned in passing on the [gocardless](...When using membership price sets, the recurring contribution created doesn't match the term of the membership selected, it matches the term of the first membership in the price set. The issue is mentioned in passing on the [gocardless](https://lab.civicrm.org/extensions/gocardless/-/issues/112) issue queue but doesn't have its own issue.
### Steps to replicate
* Create two memberships, one with a term of 1 year, one with a term of 1 month. Make auto-renew required.
* Create a membership price set with radio buttons, allowing the user to choose between the two memberships.
* Create a contribution page for the price set.
* Register for the second membership (term of 1 month).
* View the recurring contribution record.
### Expected result
Recurring contribution record is 1 month.
### Actual result
Recurring contribution record is 1 year.
I am away from home this week and don't have a working XDebug config, but I'll take a shot at this next week.5.69.0JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/3284APIv4 Query Improvements2022-04-22T15:53:45Zjoshjosh@civicrm.orgAPIv4 Query ImprovementsThis project will expand the query language of APIv4 to increase functionality. Implementing this will enhance the capabilities of APIv4-based Smart Groups; without this their utility will be limited to simple queries. This is also a pre...This project will expand the query language of APIv4 to increase functionality. Implementing this will enhance the capabilities of APIv4-based Smart Groups; without this their utility will be limited to simple queries. This is also a prerequisite to the Search Builder UI project.
Tasks:
- Implement Having, Group By parameters.
- Enable use of SQL Functions like SUM().
- Implement explicit joins.
- Implement a way to add subquery expressions to an API call.
Related pull-requests:
* [#16947 - Support GROUP BY and aggregate functions](https://github.com/civicrm/civicrm-core/pull/16947) (merged)
* [#17047 - Api4 Explorer: Support SQL functions and HAVING clause ](https://github.com/civicrm/civicrm-core/pull/17047) (merged)colemanwcolemanw2020-06-30https://lab.civicrm.org/dev/core/-/issues/3242APIv4-Based Smart(er) Groups2022-04-22T15:52:29Zjoshjosh@civicrm.orgAPIv4-Based Smart(er) GroupsThis project will allow smart groups to be built from APIv4 criteria. The MVP would include a button in the API Explorer to save an api4 query as a smart group. This will also connect with the new Search Builder UI when that project is c...This project will allow smart groups to be built from APIv4 criteria. The MVP would include a button in the API Explorer to save an api4 query as a smart group. This will also connect with the new Search Builder UI when that project is complete.
Tasks:
- Allow swappable backend to smart groups
- Extend smart group schema to store api4 query parameters
- Add support for saving smart groups to API explorer UI.colemanwcolemanw2020-06-30https://lab.civicrm.org/dev/core/-/issues/3219Error when trying to generate thank-you letters for contributions2023-12-26T05:03:26ZswebervnaError when trying to generate thank-you letters for contributionsI'm getting an error "Invalid activity id" when I go to generate thank-you letters based on the search results from my Advanced Search.
I got to Advanced Search, displaying results as Contributions, set all my filters, and then search f...I'm getting an error "Invalid activity id" when I go to generate thank-you letters based on the search results from my Advanced Search.
I got to Advanced Search, displaying results as Contributions, set all my filters, and then search for results. I then select all the results and select the option to make thank-you letters:
![image](/uploads/7871b2abf7e72c092eb1f8eb53e8c681/image.png)
At the next screen, I then choose my message template and click Make Thank-you letters at the bottom, to which I get this error after:
![image](/uploads/be66a1af0e52028de2ccb4b12f63eb93/image.png)
This issue seems to happen regardless of the filters I set for the contribution results, or what's in my message template. It's failing altogether, no matter what, to generate the thank-you letters.
Here's the fatal error description from Civi that my hosting provider gave me:
> $Fatal Error Details = array(3) { ["message"]=> string(19) "Invalid Activity Id" ["code"]=> NULL ["exception"]=> object(CiviCRM_API3_Exception)#2113 (8) { ["extraParams":"CiviCRM_API3_Exception":private]=> array(5) { ["error_code"]=> int(0) ["entity"]=> string(8) "Activity" ["action"]=> string(6) "create" ["is_error"]=> int(1) ["error_message"]=> string(19) "Invalid Activity Id" } ["message":protected]=> string(19) "Invalid Activity Id" ["string":"Exception":private]=> string(0) "" ["code":protected]=> int(0) ["file":protected]=> string(51) "/var/www/html/sites/all/modules/civicrm/api/api.php" ["line":protected]=> int(133) ["trace":"Exception":private]=> array(15) { [0]=> array(4) { ["file"]=> string(81)
**Things I've tried:**
1. Performing the process on only Individuals, and not all 3 - issue persists.
2. Performing the process on a smaller number of contributions (i.e. 60), issue persists regardless of size.
3. Performing the process without a template - issue persists.
**Similiar Issues:**
1. https://civicrm.stackexchange.com/questions/38540/invalid-currency-error-when-using-custom-template?noredirect=1#comment44099_38540
2. https://lab.civicrm.org/dev/core/-/issues/2344
3. https://github.com/civicrm/civicrm-core/pull/19481https://lab.civicrm.org/dev/core/-/issues/3218CSV exports does not respect localization configuration2023-10-19T14:38:19ZmarcusmCSV exports does not respect localization configurationWhen creating CSV exports from searches the e. g. money or date fields are not exported with the configured localization formats.
Configure language: German, decimal separator: ",", thousands sep.: "."
The export looks like this:
```...When creating CSV exports from searches the e. g. money or date fields are not exported with the configured localization formats.
Configure language: German, decimal separator: ",", thousands sep.: "."
The export looks like this:
```
| Nettobetrag |
|-------------|
| 135.00 |
| 20.00 |
| 50.00 |
| 1,130.00 |
should be
| Nettobetrag |
|-------------|
| 135,00 |
| 20,00 |
| 50,00 |
| 1.130,00 |
```
and an example for a date field:
```
| Geburtsdatum |
|--------------|
| 1942-05-02 |
| 1983-06-01 |
should be
| Geburtsdatum |
|--------------|
| 02.05.1942 |
| 01.06.1983 |
```
The export was created with a contribution search.