Development issueshttps://lab.civicrm.org/groups/dev/-/issues2022-10-25T11:46:58Zhttps://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/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/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/backdrop/-/issues/74PHP fatal error with contextual filters, civicrm_plugin_argument_default_civi...2022-10-21T07:33:22ZbgmPHP fatal error with contextual filters, civicrm_plugin_argument_default_civicrm_id.inc file missing*Created by: jenlampton*
The file, `civicrm/backdrop/modules/views/civicrm/civicrm_plugin_argument_default_civicrm_id.inc` is missing.
Steps to reproduce:
1) create a view of nodes
2) add a contextual filter for node: nid
3) attempt to...*Created by: jenlampton*
The file, `civicrm/backdrop/modules/views/civicrm/civicrm_plugin_argument_default_civicrm_id.inc` is missing.
Steps to reproduce:
1) create a view of nodes
2) add a contextual filter for node: nid
3) attempt to configure the contextual filter (second step of adding one) FATAL ERROR
4) the modal window does not advance, it appears as though the "Add" button does not work (but it does) so you click it again
5) close the modal window
6) notice that the contextual filter has been added multiple times
7) click on one to (configure or) remove it FATAL ERROR
8) check the logs see the following:
```
Warning: require_once(backdrop/modules/civicrm/backdrop/modules/views/civicrm/civicrm_plugin_argument_default_civicrm_id.inc): failed to open stream: No such file or directory in require_once() (line 4045 of backdrop/core/includes/bootstrap.inc).
```
I can confirm that this file is missing from 1.x-5.47.3. I will update civi and comment here if the problem persists int newer versions.https://lab.civicrm.org/dev/core/-/issues/3897Form Builder: 'Show totals in footer' doesn't work with multiple displays on ...2023-12-30T21:10:37ZAndrew WestForm Builder: 'Show totals in footer' doesn't work with multiple displays on a formOverview
----------------------------------------
Total rows don't work when there are multiple displays on a single form, each containing a total row. It seems to calculate a single value and show it for all displays. No console errors....Overview
----------------------------------------
Total rows don't work when there are multiple displays on a single form, each containing a total row. It seems to calculate a single value and show it for all displays. No console errors.
Reproduction steps
----------------------------------------
1. Create 2 search displays with totals ([Example 1](https://wpmaster.demo.civicrm.org/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fadmin%2Fsearch#/create/Contact?params=%7B%22version%22:4,%22select%22:%5B%22id%22,%22display_name%22%5D,%22orderBy%22:%5B%5D,%22where%22:%5B%5B%22contact_type:name%22,%22%3D%22,%22Individual%22%5D,%5B%22age_years%22,%22IS%20EMPTY%22%5D%5D,%22groupBy%22:%5B%5D,%22join%22:%5B%5D,%22having%22:%5B%5D%7D), [Example 2](https://wpmaster.demo.civicrm.org/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fadmin%2Fsearch#/create/Contact?params=%7B%22version%22:4,%22select%22:%5B%22id%22,%22display_name%22%5D,%22orderBy%22:%5B%5D,%22where%22:%5B%5B%22age_years%22,%22%3E%22,5%5D%5D,%22groupBy%22:%5B%5D,%22join%22:%5B%5D,%22having%22:%5B%5D%7D)).
2. Create Table displays for them both, making sure to tick 'Show totals in footer'
3. Add them both to a form
[Here's an example](https://wpmaster.demo.civicrm.org/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Ftest%2Ftotals) - at least until the WP database resets.
Environment information
----------------------------------------
Tested on WP master.colemanwcolemanwhttps://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/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/3894Search Kit dashlets delay the CiviCRM menu2022-10-05T21:36:08ZJonGoldSearch Kit dashlets delay the CiviCRM menuThe CiviCRM menu doesn't appear until all SK dashlets have finished loading their data. Is it possible to control the loading order such that the menu JS executes before the SK dashlets?The CiviCRM menu doesn't appear until all SK dashlets have finished loading their data. Is it possible to control the loading order such that the menu JS executes before the SK dashlets?https://lab.civicrm.org/dev/core/-/issues/3893Searchkit: Change Rewrite field to textarea2023-11-15T14:51:59ZshaneonabikeSearchkit: Change Rewrite field to textareaHey there,
After realizing that we can use SMARTY conditions in Searchkit this really took one of our clients systems to an entire new level. Thanks so much for all the hard work on Searchkit!
## Problem
Presently, the Searchkit Rewri...Hey there,
After realizing that we can use SMARTY conditions in Searchkit this really took one of our clients systems to an entire new level. Thanks so much for all the hard work on Searchkit!
## Problem
Presently, the Searchkit Rewrite field is a textfield, which is fine if you want to append a few characters to the end or before a value. It gets extremely hard to read and also modify (I have to use a texteditor beside) to modify if you start using SMARTY attributes.
In the situation below, we are generating one column that contains one of two values using a SMARTY ```if```.
![Selection_001](/uploads/57432093e023009c9b311a77f1fe00eb/Selection_001.png)
to generate
![Selection_002](/uploads/1a87132c9a0e9ce080c8e9bd2418c5ea/Selection_002.png)
## Proposed solution
Would it be difficult to modify this field to a textarea instead? It would make it much easier to modify and read. I really don't know if this would be a massive change but I think it would really help. Also, we could provide a help icon to inform people that they can use SMARTY in these fields as long as they put quotes around the different values being retrieved (this was the element I was missing when I first tried and didn't get it working.
![Selection_003](/uploads/10973172b4588429613fbc87616ea879/Selection_003.png)5.56.0https://lab.civicrm.org/dev/core/-/issues/3892Contribution for event registration with multiple participants lists them mul...2022-10-11T11:57:34Zthoni56Contribution for event registration with multiple participants lists them multiple times in "associated participants"Overview
----------------------------------------
If an event registration is made for multiple participants the corresponding contribution view lists participants multiple times.
Reproduction steps
-------------------------------------...Overview
----------------------------------------
If an event registration is made for multiple participants the corresponding contribution view lists participants multiple times.
Reproduction steps
----------------------------------------
1. Do a single registration with multiple participants to a paid event
2. Go to the resulting contribution and view it
Current behaviour
----------------------------------------
In the section "Associated participants" each participant is listed multiple times, even for the same registration option.
E.g. for this registration for 8 participants (from the "Contribution Amount" section of the same view):
![Skärmbild_2022-10-04_205306](/uploads/93ad061f56970aca8b854c2c41d9f78b/Skärmbild_2022-10-04_205306.png)
we get this "Associated Participants" listing:
![Skärmbild_2022-10-04_205401](/uploads/404d53d7cec254a9aae24962324badef/Skärmbild_2022-10-04_205401.png)
Expected behaviour
----------------------------------------
I'm expecting to see each participant listed only once.
Environment information
----------------------------------------
The event has price sets with multiple options.
![Skärmbild_2022-10-04_223722](/uploads/db466e84bf3a11a04db31181259eed4a/Skärmbild_2022-10-04_223722.png)
![Skärmbild_2022-10-04_223744](/uploads/82129e1b4bd6f32152b53e57df44f815/Skärmbild_2022-10-04_223744.png)
Comments
----------------------------------------
I encountered this since I was trying to get a nice list to include in our invoices. (We cannot use the CiviCRM invoices, partly because of dev/core#3881)5.56.0https://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/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/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/3888Checksum link does not popuplate 'primary' State address field on form2022-12-10T05:14:09ZStoobChecksum link does not popuplate 'primary' State address field on formI have replicated this issue on 5.53.0 and 5.49.4
A checksum link to a form that contains address fields does not populate State/Province field whereas all other address fields seem to work.
[This link is an example.](https://civiteach...I have replicated this issue on 5.53.0 and 5.49.4
A checksum link to a form that contains address fields does not populate State/Province field whereas all other address fields seem to work.
[This link is an example.](https://civiteacher.com/civicrm/contribute/transact?reset=1&id=5&cs=2884f3d7245410f5705a968fffd74306_1664477605_504&cid=730)
Attached are examples of the config screenshots
![sp](/uploads/da5db557db16b364a2e0c1662a671c4b/sp.png)
![oosad](/uploads/86bebd186d575f6a827ca150f6de6c4a/oosad.png)https://lab.civicrm.org/dev/core/-/issues/3887CiviMail failed with a loose translated message like "Sorry, error happened a...2022-10-20T19:45:37ZSylvain PlanteCiviMail failed with a loose translated message like "Sorry, error happened and your mail has not been record" whenever I tried to use a sample templateOverview
----------------------------------------
When we try to create a mass mailing message and use one of the sample template provided with CiviCRM, I get this message "Désolé, une erreur est survenue et vos informations n'ont pas ét...Overview
----------------------------------------
When we try to create a mass mailing message and use one of the sample template provided with CiviCRM, I get this message "Désolé, une erreur est survenue et vos informations n'ont pas été enregistrées". If I use a simplier template I made, it is working ok.
_If you have already posted on https://civicrm.stackexchange.com or https://chat.civicrm.org, please include the link to that conversation._
Reproduction steps
----------------------------------------
1. Click on **mass mailing**, **new mailing**
2. Fill all fields except **Campaign** and **Template** and then clicked **Save as draft**.
3. Got no error message.
4. Go back, click on **mass mailing**, **draft mailing**, find the draft and click **continue".
5. Choose a template in **template** field.
6. As soon as the template finish loading and autosave try to save it...
7. Got the error message "Désolé, une erreur est survenue et vos informations n'ont pas été enregistrées"
Current behaviour
----------------------------------------
Expected behaviour
----------------------------------------
Should save a draft and let me edit the mail template.
Environment information
----------------------------------------
* __Browser:__ _Chrome Version 106.0.5249.61 | Edge Version 105.0.1343.53
* __CiviCRM:__ _Master/5.50.1
* __PHP:__ _7.4.29
* __CMS:__ _WordPress 6.0.2
* __Database:__ _MariaDB 10.3.34
* __Web Server:__ _Apache 2.4.53
Comments
----------------------------------------
I have tried to reset CiviCRM cache and rebuild path but to no avail. Group are small, 2 or 3 email address. Work with a simple custom template. No recent update of WP or CiviCRM. We are just starting playing with mass mailing, so I can't tell for how long it has not been working. Also tested sending email to a group. Search contact, select a couple of contact, action->send immediate email, choose the sample template, fill the fields, send email, success! No problem. Seem to be related to how CiviMail store a mass mailing in db. Need help to debug further. Thank you.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/3885Search results include participants with price set options they have been rem...2023-04-15T19:36:58ZlarsssandergreenSearch results include participants with price set options they have been removed fromIf a price set option / fee level quantity is 0 because a participant registration has been changed to remove that option, search results include participants with quantity 0. Search results should not include these participants with fee...If a price set option / fee level quantity is 0 because a participant registration has been changed to remove that option, search results include participants with quantity 0. Search results should not include these participants with fee level quantity 0 because they are not registered for that option.
More details in [PR #24650](https://github.com/civicrm/civicrm-core/pull/24650).https://lab.civicrm.org/dev/core/-/issues/3884ical files missing "VTIMEZONE" component2022-09-30T17:20:12ZAndrew Wassonical files missing "VTIMEZONE" componentOverview
----------------------------------------
CiviEvent ical files are generated without the "VTIMEZONE" component which means in some time zones the event date and time will be incorrect with some calendar clients.
Specifically I ...Overview
----------------------------------------
CiviEvent ical files are generated without the "VTIMEZONE" component which means in some time zones the event date and time will be incorrect with some calendar clients.
Specifically I have two Drupal/CiviCRM websites in Alberta that use America/Edmonton as their timezone settings. Several CiviEvents towards the end of September and the month of October generate iCal files that are off by an hour for Microsoft Outlook Calendars set for the Alberta Canada time zone. Apple Calendars and Google Calendars set for Alberta time render the iCal files correctly. If we add markup for "VTIMEZONE" in the iCal file, they work correctly for Microsoft Outlook Calendars set for the Alberta Canada time zone.
```
I've added the following static markup to the iCal files to get them to behave correctly in Microsoft Outlook Calendar set to the Alberta Time Zone.
BEGIN:VTIMEZONE
TZID:America/Edmonton
LAST-MODIFIED:20220816T024022Z
TZURL:https://static.tzurl.org/zoneinfo-outlook/America/Edmonton.ics
X-LIC-LOCATION:America/Edmonton
BEGIN:DAYLIGHT
TZNAME:MDT
TZOFFSETFROM:-0700
TZOFFSETTO:-0600
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:MST
TZOFFSETFROM:-0600
TZOFFSETTO:-0700
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
```
The "VTIMEZONE" component is described here: https://icalendar.org/iCalendar-RFC-5545/3-6-5-time-zone-component.html
Suggested Fix
----------------------------------------
In order to fix this issue, I suggest VTIMEZONE markup is added to the file at: /civicrm/templates/CRM/Core/Calendar/ICal.tpl
It will require some dynamic code to pull the TZURL: from a lookup table and for the DTSTART/END for DAYLIGHT and STANDARD if the timezone uses DST. It may be that the values can be scraped from the TZURL file.
Cheers,
Andrewhttps://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/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)