CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2022-11-26T20:59:14Zhttps://lab.civicrm.org/dev/core/-/issues/3874APIv4 Relationships refused if duplicated2022-11-26T20:59:14ZshaneonabikeAPIv4 Relationships refused if duplicated**Backlog**
I see that @samuelsov already reported this, but the bot closed the issue #451.
**Disabled Relationships**
I came across a scenario where if a Contact Relationship was disabled, and you attempt to create a new one (that ma...**Backlog**
I see that @samuelsov already reported this, but the bot closed the issue #451.
**Disabled Relationships**
I came across a scenario where if a Contact Relationship was disabled, and you attempt to create a new one (that matches dates) it is refused. Ironically, the UI let's me add the Relationship.
+ Create a Relationship with a start / end date
+ Disable relationship
+ Create a new Relationship with the same start / end date via UI (works)
+ Create a new Relationship with the same start / end date via APIv4 (fails with Duplicate Exception)
**Cases**
Today, I came across another scenario where we are using ActivityProfile with CiviRules. The gist is that when someone submits a CiviCase then CiviRules assigned the Case Coordinator to their case. It's the same person each time.
In this scenario, the APIv4 is also refused the submission because of the duplicated Relationship. But really I think it makes sense to have multiple cases open for one person with the same case coordinator managing them all right?
My scenario can be replicated without ActivityProfile
+ Create a Case for test user A and Coordinator X
+ Create a new Case for Test User A
+ Use the APiv4 to setup a relationship to Coordinator X
It should throw an exception Duplicate Relationship on relationship.create.
Thoughts?https://lab.civicrm.org/dev/core/-/issues/3875Pressing return on additional participants page for event registration goes b...2023-06-03T19:57:34ZlarsssandergreenPressing return on additional participants page for event registration goes back to previous page instead of forwardThere are three buttons on the additional participant page: Go Back, Continue, Skip Participant. Since all three are type="submit", when you press the return/enter key, the first button of type="submit" is clicked, so you go back one pag...There are three buttons on the additional participant page: Go Back, Continue, Skip Participant. Since all three are type="submit", when you press the return/enter key, the first button of type="submit" is clicked, so you go back one page. Contrast with the primary participant registration page, where return does take you to the next page because there is only one button or with a contribution page where return takes you to the confirmation page, again because there is only one button.
The easiest fix would be to change the types of the other buttons to "button". The button type [is set here](https://github.com/civicrm/civicrm-core/blob/c94963f7637912571ce62b33de60f7d5ce640f69/CRM/Core/Form.php#L758) for all buttons as "submit" unless type="reset" is passed to addButtons. So I propose to review button types in use, setting those that make sense as "submit" (next, done, submit, upload, process, etc) and others as "button" (cancel, refresh). Any buttons without a type will be left as "submit" so as to avoid breaking anything.
There is also a class default added to buttons that have isDefault, but it's unclear to me what this does.https://lab.civicrm.org/dev/core/-/issues/3878SearchKit: Add ability to search and filter by active periods2023-02-27T22:02:08ZfrancescbassasSearchKit: Add ability to search and filter by active periodsOverview
----------------------------------------
Some entities (Relationships, Memberships, Cases, Events, Recurring Contributions) may be defined by a start date and end date that indirectly define a period in which the entity is activ...Overview
----------------------------------------
Some entities (Relationships, Memberships, Cases, Events, Recurring Contributions) may be defined by a start date and end date that indirectly define a period in which the entity is active or not.
This is a proposal to enable the possibility to search for entities active during a specific period via SearchKit and also filter results through related SearchKit Afforms.
Example use-case
----------------------------------------
1. **Relationships:** Search for active volunteers on a specific year
1. **Cases:** Get a pivot report with active cases per week
1. **Events:** Count number of active events on last year
1. **Memberships:** List active members per month
1. **Recurring contributions:** Get a pivot report with the active recurring contributions per month
Current behaviour
----------------------------------------
Currently, search for active relationships it’s only available through Advanced Search and Relationships Report, but it’s not possible to do this search via SearchKit.
![advanced-search](/uploads/dbd57f4abd494fe4225494c7f2faa5ef/advanced-search.png)
![relationship-report](/uploads/1d37472120e4f2cde4b055a0c60b147b/relationship-report.png)
@ayduns, points in [this SE answer](https://civicrm.stackexchange.com/a/41871/104) a way to search for a specific active period.
![searchkit-approximation](/uploads/5d151234bd3093ab422ffd6b057d936c/searchkit-approximation.png)
This it’s good, but not enough. It’s very tricky to build this clause intuitively. And if you create an Afform with this SearchKit you can’t expose start dates and end dates to reproduce this clause.
Proposed behavior
----------------------------------------
Create an “Active period” search field selector available for entities with start and end dates: Relationships, Events, Memberships, Recurring contributions and Cases.
This would allow for example:
1. Click on **Search -> Search Kit**.
1. Search for **Relationships** or **Events**
1. Select **Active Period** in **where** clause
1. Choose options for filter **=**/**is Between** and **Pick Date**/**Date Range**...
Active period selector, like in the image below:
![active-period-field-selector](/uploads/f7bff145d568e35ad01ce87dd0f211f1/active-period-field-selector.png)
Comments
----------------------------------------
Would answer questions like:
[How to search active relationships (e.g) during past year?](https://civicrm.stackexchange.com/q/8315/104)
[Is it possible to get point-in-time membership data?](https://civicrm.stackexchange.com/q/2253/104) [duplicate](How do I determine how many active members there were on a date in the past? [duplicate])
[Create a report or graph of the number of campaigns active in any particular month](https://civicrm.stackexchange.com/q/34465/104)
Will cover the use of this extension [Historic Membership Data](https://github.com/fuzionnz/nz.co.fuzion.historicmembershipdata)https://lab.civicrm.org/dev/core/-/issues/3880Include displays when cloning searchkit custom searches2022-10-20T07:15:21ZBradley TaylorInclude displays when cloning searchkit custom searchesOn SearchKit it is possible to select "Clone" to create a copy of a saved search which can save a lot of time.
This does not appear to clone any displays (tables, lists, grids). These displays can also take a lot of time to setup and so...On SearchKit it is possible to select "Clone" to create a copy of a saved search which can save a lot of time.
This does not appear to clone any displays (tables, lists, grids). These displays can also take a lot of time to setup and so I believe the ability to include these in the cloned search would be a great feature.
The use case where I came across this was where a client wanted 3 custom search displays, filtered to all events, events from this calendar year, events from past calendar year. An alternative solution would be to allow individual displays to be filtered differently, but associated with a single searchkit search.https://lab.civicrm.org/dev/core/-/issues/3881Edit fields for invoicing information2022-10-25T11:52:40Zthoni56Edit fields for invoicing informationOverview
----------------------------------------
The form fields for invoicing information (in CiviEvent) seems to be hardcoded. E.g. it lacks company name and email. It does not seem possible to change or amend these fields.
Example u...Overview
----------------------------------------
The form fields for invoicing information (in CiviEvent) seems to be hardcoded. E.g. it lacks company name and email. It does not seem possible to change or amend these fields.
Example use-case
----------------------------------------
1. Create an event and enable web registrations
1. Make invoicing mandatory
2. Make a registration and notice what the only available fields are
Current behaviour
----------------------------------------
Hard coded fields
Proposed behaviour
----------------------------------------
Possiblity to use a profile, or custom form.
Comments
----------------------------------------
There is a StackExchange question around this: https://civicrm.stackexchange.com/questions/42202/how-can-i-add-company-to-billing-pay-later-fields but the proposed "solution" is hard and really not a solution.https://lab.civicrm.org/dev/core/-/issues/3882SearchKit - distinct values should be sorted by id2022-10-25T11:52:13ZvitiusSearchKit - distinct values should be sorted by idWhen we have List of contact name and dont use distinct. On output we get sorted list of names on contact id. And when we want have hyperlinks on contacts name, that works perfectly. But when we use distinct function, on output we get un...When we have List of contact name and dont use distinct. On output we get sorted list of names on contact id. And when we want have hyperlinks on contacts name, that works perfectly. But when we use distinct function, on output we get unsorted list of names. But links on contacts is sorted by contact id. That causes missmatch. First of display name have link to lowest contact id and last of display name have link to highest contact id.
I tried this on version 5.51.1 and 5.55.alpha1. And I tried this on case clients (you need enable multiple case clients) like you can see on images bellow. Also I tried this on event participants, where I use aggregation on event id and display participants names. On both distinct causes bad hyper links.
![image](/uploads/7fd977598194996923ddf3e1a698b261/image.png)
![image](/uploads/ac8b4684a84cc8da39b7179eff4ee749/image.png)https://lab.civicrm.org/dev/core/-/issues/3883Group - remove contacts action removes contacts who are not in group and repo...2022-10-25T11:51:49ZlarsssandergreenGroup - remove contacts action removes contacts who are not in group and reports incorrect numbers removedOverview
----------------------------------------
[removeContactsFromGroup](https://github.com/civicrm/civicrm-core/blob/843958bc0022cec4145c8796ae49ccb2fd9d3c28/CRM/Contact/BAO/GroupContact.php#L156) doesn't check if a contact is in a g...Overview
----------------------------------------
[removeContactsFromGroup](https://github.com/civicrm/civicrm-core/blob/843958bc0022cec4145c8796ae49ccb2fd9d3c28/CRM/Contact/BAO/GroupContact.php#L156) doesn't check if a contact is in a group before removing or deleting them, resulting in some strange behaviour. The reported counts shown to the user of contacts removed are also incorrect. Subscription history is set when it doesn't need to be.
This function is also used by Api3 and for unsubscribes.
Current behaviour
----------------------------------------
If we're removing, no matter what the current status of the contact is in the group (Added, Pending, Removed or none at all), the status is set to Removed. If a contact had no relationship to the group at all, they will be set to Removed (and show on the Contact Groups tab as removed, which is confusing for the user as they were never in the group). In all cases, subscription history is added with status Removed.
Counts of contacts removed reported to user are incorrect.
If we're deleting, the row is simply deleted from the table. In all cases, subscription history is added with status Deleted.
Expected behaviour
----------------------------------------
If we're removing:
- If a contact is currently Added or Pending, it is set to Removed and subscription history is added.
- If a contact is Removed or has no group status, nothing happens.
This is somewhat confusing for smart groups. If a contact is not in a smart group because they don't meet the smart group criteria, do we want to set them to Removed, so they are effectively pre-removed if they later meet the smart group criteria? I think we do want this to happen for mailing groups because this function is used for unsubscribes. We don't want a contact to later become part of a smart group that was used for a mailing that they unsubscribed from, so I think we do want to set status to Removed no matter what.
Counts reported to user should also be correct based on what actually happened.
If we're deleting:
- If a contact is currently Added, Pending or Removed, it is deleted from the table and subscription history is added. For smart groups, this resets the contact to being a smart member of the group or not based on the smart group criteria.
- If a contact has no group status, nothing happens.
Fix
----------------------------------------
If this makes sense, I'll submit a PR.
Confusingly, removeContactsFromGroup is also used to _add_ contacts to a group [here.](https://github.com/civicrm/civicrm-core/blob/843958bc0022cec4145c8796ae49ccb2fd9d3c28/CRM/Contact/Page/View/GroupContact.php#L173) I will change that to use addContactsToGroup for Added or Pending. This will result in a change to the op for the hooks though (from `CRM_Utils_Hook::pre('edit', 'GroupContact'...` to `CRM_Utils_Hook::pre('create', 'GroupContact'...`. [The docs](https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_pre/) say create is correct for a contact being added to a group, so it appears this is not correct as it stands. Definitely would value an expert opinion on this aspect.https://lab.civicrm.org/dev/core/-/issues/3886api3 explorer giving strange advice for customfield.create2022-10-10T10:01:22ZDaveDapi3 explorer giving strange advice for customfield.createDoing a get gives "String" and "Text", which matches my memory and v4 explorer. But I'm not sure when this changed.
![Untitled3](/uploads/a9e8e188fec92c45f2e1dd8aad3e9bef/Untitled3.png)Doing a get gives "String" and "Text", which matches my memory and v4 explorer. But I'm not sure when this changed.
![Untitled3](/uploads/a9e8e188fec92c45f2e1dd8aad3e9bef/Untitled3.png)https://lab.civicrm.org/dev/core/-/issues/3889API4 dates entered without time can give unexpected results2022-10-25T11:50:59ZlarsssandergreenAPI4 dates entered without time can give unexpected resultsFor a datetime field, any date in an API call is converted to a datetime (midnight on the date in question). This can give unexpected results for gets, especially using Search Kit or Form Builder, where users probably aren't thinking abo...For a datetime field, any date in an API call is converted to a datetime (midnight on the date in question). This can give unexpected results for gets, especially using Search Kit or Form Builder, where users probably aren't thinking about dates versus datetimes. These results also aren't consistent with what you get from Advanced Search or other searches.
For example, searching for a contribution with receive_date = 2022-01-01 does not return all contributions received on that date. It only returns contributions received at exactly midnight, i.e. with receive_date = 20220101000000.
Similar issues exist for other operators, like !=, > (will include the date), <= (won't include the date), BETWEEN and NOT BETWEEN (will include the from date, but not the to date), and IN and NOT IN.
The simplest solution would be to put a SQL DATEFORMAT() around the database date field when the date does not include a time and use a Ymd format. This wouldn't work for BETWEEN or IN when one date includes a time and the other doesn't though.
Or if we don't want to change the query, another approach would be to check absolute dates entered into the API to see if they include a time component or not.
- If they include a time, proceed as usual.
- If they don't include times, for all operators except = and !=/<>, set the time component or components depending on the operator (e.g. for BETWEEN set 000000 for the from date, 235959 for the to date).
- For = or !=, switch the operator to BETWEEN or NOT BETWEEN, set the from date to 000000 and the to date to 235959.
- For IN and NOT IN, I'm not sure there's an easy solution in this case. We'd have to convert that to a series of BETWEENs and that's going to be difficult. Is there a good way to warn users that this won't work?
- Not sure what the other operators are supposed to do with dates.
But maybe there's a more elegant solution to this problem. Hoping to get some expert feedback before starting any work on this, since date stuff can be such a quagmire.https://lab.civicrm.org/dev/core/-/issues/3890Proposal: Rebuild smart group cache for specific smart groups included in mai...2022-10-25T11:50:42ZlarsssandergreenProposal: Rebuild smart group cache for specific smart groups included in mailing at scheduling timeIdeally, the recipients of a mailing with smart groups should be as up to date as possible when the mailing is scheduled. Currently, a cached version of the smart group is used to build the list of recipients, leading to potentially out ...Ideally, the recipients of a mailing with smart groups should be as up to date as possible when the mailing is scheduled. Currently, a cached version of the smart group is used to build the list of recipients, leading to potentially out of date recipients.
Can we just rebuild the smart group cache for the specific smart groups included in a mailing at scheduling time? Is there significant risk to doing so?
@eileen, I understand you're the expert on this.https://lab.civicrm.org/dev/core/-/issues/3891Show ical and Google Calendar links for non-public events2022-10-25T11:50:06ZlarsssandergreenShow ical and Google Calendar links for non-public eventsCurrently, the Download iCalendar entry for this event and Add event to Google Calendar links only appear in event confirmation emails, on the event confirmation page and on the event info page if the event is public.
But if someone has...Currently, the Download iCalendar entry for this event and Add event to Google Calendar links only appear in event confirmation emails, on the event confirmation page and on the event info page if the event is public.
But if someone has registered for an event, they should be able to add that event to their calendar regardless of whether it is public or not. The event info page can also include these links as the calendar links contain the same information as is already found on the page.
For reference, the help text for Public Event says: "When enabled, this event will be included in iCalendar feeds and displayed on your site's "Upcoming Events" block." So there shouldn't be any expectation that we're hiding calendar links for non-public events as this settings controls only calendar _feeds_. Can't see any reason we'd want to hide calendar links, in any case.
Turns out the links fail when the event is non-public, so I'll have to fix that first.https://lab.civicrm.org/dev/core/-/issues/3895SK/FB: Labelling a SK Form Builder form identically to a packaged search over...2022-10-25T11:48:33ZJonGoldSK/FB: Labelling a SK Form Builder form identically to a packaged search overwrites itIf you create two Search Forms with the same label, the machine name of the second one will automatically be changed. Eg. two forms labelled "Example" will create `afSearchExample` and `afSearchExample1`.
However, if one of the forms i...If you create two Search Forms with the same label, the machine name of the second one will automatically be changed. Eg. two forms labelled "Example" will create `afSearchExample` and `afSearchExample1`.
However, if one of the forms is a packaged form, this is NOT true.
### Steps to Replicate
* Enable an extension that provides a packaged SK form (e.g. CiviGrant provides `afSearchGrants`.
* Create a minimal Search Kit search.
* Create a form from that search and name it `Grants`.
### Expected Result
The new FB form is named `afSearchGrants1` and is separate from the packaged FB search form.
### Actual Result
The new FB form is named `afSearchGrants` and replaces the old form. You can't revert this without CLI access to rename the `.html` and `.json` files in `[civicrm.files]/ang`.
This came about when a client created a new FB search form and named it "Grants", causing their Grants tab to disappear.
I suspect that the naming behavior looks at other files in the same folder, and appends the `1` if it finds a file of the same name. It should be comparing against all `.aff.*` files. It should provide a warning that you're going to replace a core FB form.https://lab.civicrm.org/dev/core/-/issues/3896api.Contact.create happy to create invalid employer relationship2022-10-20T07:25:22Zkonadaveapi.Contact.create happy to create invalid employer relationshipOverview
----------------------------------------
api.Contact.create does not check that the relationship between `employer_id` and the contact is valid.
Reproduction steps
----------------------------------------
Reproduced on dmaster....Overview
----------------------------------------
api.Contact.create does not check that the relationship between `employer_id` and the contact is valid.
Reproduction steps
----------------------------------------
Reproduced on dmaster.demo using combo of UI and API 3 Explorer. Showing as command line here to better illustrate.
```bash
$ cv api Contact.create first_name="Mickey" last_name="Mouse" email="mickey.mouse@example.com" contact_type="Individual"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 9,
"values": {...}
}
$ cv api Contact.create first_name="Minnie" last_name="Mouse" email="minnie.mouse@example.com" contact_type="Individual"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 10,
"values": {...}
}
$ cv api RelationshipType.getsingle name_b_a="Employer of" return="id,contact_type_b"
{
"id": "5",
"contact_type_b": "Organization"
}
$ cv api Relationship.create contact_id_a="9" contact_id_b="10" relationship_type_id="5"
{
"tip": "add debug=1 to your API call to have more info about the error",
"is_error": 1,
"error_message": "Invalid Relationship"
}
$ cv api Contact.create id="9" employer_id="10"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 9,
"values": {...}
}
$ cv api Relationship.get contact_id_a="9"
{
"is_error": 0,
"version": 3,
"count": 1,
"id": 5,
"values": {
"5": {
"id": "5",
"contact_id_a": "9",
"contact_id_b": "10",
"relationship_type_id": "5",
"is_active": "1",
"is_permission_a_b": "0",
"is_permission_b_a": "0",
"created_date": "2022-10-05 19:48:23",
"modified_date": "2022-10-05 19:48:23"
}
}
}
```
Current behaviour
----------------------------------------
An invalid relationship is created. On the contact summary screen, an employer may or may not be listed, but it's unlikely to be the invalid contact (i.e. it lists a unrelated org instead).
Expected behaviour
----------------------------------------
The API call should fail for the same reason as api.Relationship.create.
Environment information
----------------------------------------
Confirmed on dmaster.demo, and a local vanilla install of D9/Civi 5.48.2.https://lab.civicrm.org/dev/core/-/issues/3898CiviCRM log triggers don't fire on CASCADE DELETE2022-10-25T11:48:10ZbrienneCiviCRM log triggers don't fire on CASCADE DELETEOverview
----------------------------------------
When there is a CASCADE DELETE on an entity record, it does not trigger the CiviCRM log for the records (such as from a custom field attached to an entity) that are deleted as a result of...Overview
----------------------------------------
When there is a CASCADE DELETE on an entity record, it does not trigger the CiviCRM log for the records (such as from a custom field attached to an entity) that are deleted as a result of the cascade. This behavior makes it difficult to restore custom data from the log tables when the entity it was attached to is deleted and then needs to be restored.
Reproduction steps
----------------------------------------
1. Create a custom field to be *Used For* Grants (**Administer > Custom data and Screens > Custom Fields > Add Set of Custom Fields**)
1. Create a new Grant record and be sure to fill out the custom field(s) (**CiviGrant > New Grant**)
1. Delete the grant record (**CiviGrant Dashboard > View > Delete**)
1. View the log table of the custom field and you will note that there is no delete log_action on the custom field in question
* If using the command line or a SQL editor like DBeaver, you can use the following command to note the lack of the delete action from the custom field civicrm_log table. (*Be sure to change tablename to the actual log table's name*).
```sql
SELECT id, log_date, log_action FROM tablename;
Current behaviour
----------------------------------------
If a record is deleted as a result of a CASCADE DELETE, then the action is not logged in the applicable civicrm_log table.
Expected behaviour
----------------------------------------
The log triggers should fire on records that are deleted, even if as a result of a CASCADE DELETE.
Comments
----------------------------------------
This issue has been previously noted on this [post](https://stackoverflow.com/questions/26328570/on-delete-cascade-not-firing-trigger) on Stack Overflow.https://lab.civicrm.org/dev/core/-/issues/3899Creating a cms user account from a civi org contact converts the org contact ...2022-10-25T11:47:42ZDaveDCreating a cms user account from a civi org contact converts the org contact into an individualThis might be drupal 9 only - it seems ok in drupal 7 but haven't tried any others.
While there have been arguments that [corporations are people](https://www.npr.org/2014/07/28/335288388/when-did-companies-become-people-excavating-the-...This might be drupal 9 only - it seems ok in drupal 7 but haven't tried any others.
While there have been arguments that [corporations are people](https://www.npr.org/2014/07/28/335288388/when-did-companies-become-people-excavating-the-legal-evolution), with some comedy side-benefits, either:
* a civi org contact should stay an org contact when a cms user is created for it (using the actions dropdown on the contact summary - create user record),
* the action shouldn't be allowed
Since it seems to have worked in drupal 7, probably the first one.https://lab.civicrm.org/dev/core/-/issues/3900Proposal: Check mailings for fixed personalization (without tokens) before su...2022-10-25T11:46:58ZlarsssandergreenProposal: Check mailings for fixed personalization (without tokens) before submittingSometimes, people copy a link that was personalized to them with cid and cs and insert it into a mailing (i.e. with their contact ID and checksum instead of the appropriate tokens), then they send out a personalized link for their contac...Sometimes, people copy a link that was personalized to them with cid and cs and insert it into a mailing (i.e. with their contact ID and checksum instead of the appropriate tokens), then they send out a personalized link for their contact to a large group of people.
In order to prevent this, we could check for URLs that include something in the form of a checksum plus cid=integer or cid1=integer (this will support Webform CiviCRM too). Optionally, we could even validate the checksum, but that seems overkill. I think this would make the most sense at submission time, to keep things simple with Mosaico and Traditional mailings.
I'm not sure what the best way to handle the UI for this is. An error that prevents sending seems too strong, but just a warning while still submitting seems too weak. Is there a better UI solution for this?https://lab.civicrm.org/dev/core/-/issues/3902Upgrade to 5.54 failed with missing field is_template in table civicrm_user ...2022-10-24T21:42:07ZAndy ClarkUpgrade to 5.54 failed with missing field is_template in table civicrm_user _jobUpgrade to 5.54 from 5.53 failed. Please [this SE ](https://civicrm.stackexchange.com/questions/42771/upgrade-to-5-54-failed) for details.Upgrade to 5.54 from 5.53 failed. Please [this SE ](https://civicrm.stackexchange.com/questions/42771/upgrade-to-5-54-failed) for details.https://lab.civicrm.org/dev/core/-/issues/3903FormBuilder - Unable to set default values for date ranges default values (UI...2024-03-13T17:16:43ZfrancescbassasFormBuilder - Unable to set default values for date ranges default values (UI problem)It's not possible to define date range default values when "Search by range" is selected in a config date filter options for an Afform.
![date-ranges](/uploads/00d838cdd6e6a5daa9a740e2eeb2612c/date-ranges.png)
I think it should be poss...It's not possible to define date range default values when "Search by range" is selected in a config date filter options for an Afform.
![date-ranges](/uploads/00d838cdd6e6a5daa9a740e2eeb2612c/date-ranges.png)
I think it should be possible to define two default date values corresponding the first with the start of the range and the second with the end.https://lab.civicrm.org/dev/core/-/issues/3906FormBuilder URL Filter dropdown with multiple values are only filterd with fi...2022-10-21T07:28:15ZdavidFormBuilder URL Filter dropdown with multiple values are only filterd with first valueOverview
----------------------------------------
If a URL filter with multiple values is used in formbuilder, all values are picked up and shown in the multiselect, but the search is only filterd with the first value.
e.g. /civicrm/for...Overview
----------------------------------------
If a URL filter with multiple values is used in formbuilder, all values are picked up and shown in the multiselect, but the search is only filterd with the first value.
e.g. /civicrm/forms/fzt-suche/#?event_type_id=2,3,4
![Unbenannt](/uploads/10a0f5f22f4acd9aaa2a2912743ae71a/Unbenannt.JPG)
Environment information
----------------------------------------
* __Browser:__ Firefox 105
* __CiviCRM:__ 5.54.0
* __PHP:__ 7.3
* __CMS:__ Drupal 7https://lab.civicrm.org/dev/core/-/issues/3907Proposal: When excluding past mailing recipients, exclude past recipient emai...2022-10-21T07:27:20ZlarsssandergreenProposal: When excluding past mailing recipients, exclude past recipient email addresses, not just contactsSometimes, you want to send a few different versions of a mailing, so you segment your list and send different versions to different groups or to search results. Of course, you want to make sure no one receives two different versions of ...Sometimes, you want to send a few different versions of a mailing, so you segment your list and send different versions to different groups or to search results. Of course, you want to make sure no one receives two different versions of the same email, so you make sure to exclude the earlier mailings from the later ones. But if two contacts share an email address, one can receive the first mailing and the other the second mailing. Excluding recipients of the first mailing only excludes contacts who received the first mailing, not email addresses that received the first mailing.
Similarly, you might send a mailing, only to have someone realize a mistake was made when half the emails have been delivered. You cancel the mailing, make a copy and fix the error and then send the mailing to the same group minus the recipients of the first mailing. This doesn't work at all, because the _intended_ recipients of the excluded mailing are excluded, not the _actual_ recipients. But if we get past that problem, we'd also run into the same problem as above.
I propose that to fix this, when the dedupe emails setting is enabled in CiviMail, we do an additional check to see if any of the excluded contacts' primary/bulk email address is also used by a contact in the included list, then exclude those recipients as well. I'll need to look at the details of this to make sure performance isn't an issue. If someone wants multiple emails sent to the same address for multiple contacts, they would have the dedupe setting in Civimail turned off, so this change wouldn't affect them. Otherwise, I think this is line with what users would expect.
Also, when recipients of a mailing are excluded, we should check if the excluded mailing status is cancelled. If it is cancelled, then we should only exclude the actual recipients rather than the intended recipients. I think users would also expect excluding recipients of a mailing would exclude the actual recipients, rather than the intended recipients.