CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2024-03-18T15:35:22Zhttps://lab.civicrm.org/dev/core/-/issues/5086Ability to export FormBuilder forms from the UI2024-03-18T15:35:22ZherbdoolAbility to export FormBuilder forms from the UIWe've got an export link for SearchKit, but if a saved search is wrapped up in a FormBuilder form there's no easy way to also export those files. I can imagine a modal with the text from the forms files (`*.html`, `*.json`) and a link to...We've got an export link for SearchKit, but if a saved search is wrapped up in a FormBuilder form there's no easy way to also export those files. I can imagine a modal with the text from the forms files (`*.html`, `*.json`) and a link to copy it. Or even ability to save the files as a zip file.
And I suppose we'd need an import link as well to import on a different site (similar to SearchKit's link).https://lab.civicrm.org/dev/core/-/issues/5073Standalone default folder structure2024-03-08T10:24:03ZufundoStandalone default folder structureSome wise suggestions from @artfulrobot for clearer folder naming / out-of-the-box security:
> ```
> - civicrm-standalone-X.Y.Z.zip
> - index.php
> - .htaccess
> - robots.txt ➌
> - data/
> - data/ext/....Some wise suggestions from @artfulrobot for clearer folder naming / out-of-the-box security:
> ```
> - civicrm-standalone-X.Y.Z.zip
> - index.php
> - .htaccess
> - robots.txt ➌
> - data/
> - data/ext/.htaccess
> - data/public/.htaccess ➊
> - data/.private/.htaccess ➋
> - core/<ALL-THE-CODES>
> ```
>
> 1. use 'public' not 'upload'. It partners well with 'private', and 'upload' is such a daft relative-to-what? term (not everything you upload through a browser ought to be in a public dir). I think the whole 'persist' 'contribute' etc. is a right mess - or at least I don't understand the logic if there is logic, though last time I looked at it the logic was that at some point in history the first thing to allow uploads was civi contribute so ...
>
> 2. use a dot before _private/_. It's very common, and easy, to ban http access to all 'dot files'. So this gives an extra _likely_ shield against the "oh, I didn't realise nginx ignored .htaccess files" users. Just feels safer, if we're focussing on making this easy.
>
> 3. In terms of sensible defaults, I feel we should have a robots.txt that does its best to ban crawlers, especially AI ones, on everything except specific paths (e.g. event pages). It's one thing to have someone tell you you've accidentally exposed data and someone saw it, it's another to find that your [exposed data now lives in an LLM](https://arstechnica.com/information-technology/2022/09/artist-finds-private-medical-record-photos-in-popular-ai-training-data-set/) training set, ready to be given to anyone with a particular prompt.
Maybe to the nginx point, we could add `nginx-civicrm-site.conf.sample` in the root?
I think the principles for the public / private upload folder names apply to the composer template and the tarball.ufundoufundohttps://lab.civicrm.org/dev/core/-/issues/5057Make descriptions visible in drop down2024-03-22T18:22:38ZyashodhaMake descriptions visible in drop downAll the select2 drop-down are mostly option values which do have a description field in the database.
It will be useful to use this for display in select2 drop-downs.
We already show description for entities like events. It will be help...All the select2 drop-down are mostly option values which do have a description field in the database.
It will be useful to use this for display in select2 drop-downs.
We already show description for entities like events. It will be helpful to choose options for the user(if options do indeed explanation and are configured as such)https://lab.civicrm.org/dev/core/-/issues/5053Formbuilder/ event tab: Add the possibility to create or select a location2024-03-07T13:34:54ZNadaillacFormbuilder/ event tab: Add the possibility to create or select a locationIn the tab event, there should be the possibility to select a location or create a location, and in that case set all location fields. Similarly to the current backend form.
This enhancement could be funded.
Discussed with @colemanwIn the tab event, there should be the possibility to select a location or create a location, and in that case set all location fields. Similarly to the current backend form.
This enhancement could be funded.
Discussed with @colemanwhttps://lab.civicrm.org/dev/core/-/issues/5015'Clean-up Temporary Data and Files' doesn't empty the tplCache by default2024-02-23T15:18:23ZAndrew West'Clean-up Temporary Data and Files' doesn't empty the tplCache by defaultThe 'Clean-up temporary data and files' scheduled job [doesn't clean the tpl directory by default](https://github.com/civicrm/civicrm-core/blob/06540d39dc2cedcadb19be5c351ef831a9133534/api/v3/Job.php#L631). Should it? We see this balloon...The 'Clean-up temporary data and files' scheduled job [doesn't clean the tpl directory by default](https://github.com/civicrm/civicrm-core/blob/06540d39dc2cedcadb19be5c351ef831a9133534/api/v3/Job.php#L631). Should it? We see this ballooning to tens of gigabytes when sending large mailings.
Workaround is to add the parameter, but it seems like this might catch some people out.
![image](/uploads/85b4275fb08070a8995fe094e32d466e/image.png)https://lab.civicrm.org/dev/core/-/issues/5000SearchKit: Allow formatting of the totals in the footer2024-02-14T10:06:39Zsimon.hermannSearchKit: Allow formatting of the totals in the footerSearchKit allows to create a footer row, where the total of a column can be displayed. However, this total does not allow for any formatting or reproduces the formatting of the columns it sums.
It would be great if there would be either ...SearchKit allows to create a footer row, where the total of a column can be displayed. However, this total does not allow for any formatting or reproduces the formatting of the columns it sums.
It would be great if there would be either an option to choose a formatting (decimal separators, thousand separators, currencies if applicable etc) or if the total would reflect the formatting of the column it sums.https://lab.civicrm.org/dev/core/-/issues/4992Standalone - front-end theming2024-02-14T10:01:23ZufundoStandalone - front-end theming@artfulrobot suggests: provide a template for front facing pages. People can edit that file
(manually) to suit. It should not get overwritten on upgrade.@artfulrobot suggests: provide a template for front facing pages. People can edit that file
(manually) to suit. It should not get overwritten on upgrade.RichRichhttps://lab.civicrm.org/dev/core/-/issues/4982Form builder - Extension provided entity settings2024-02-14T09:53:44ZseamusleeForm builder - Extension provided entity settingsJMA is in the progress of working on a geographically targeted petition extension
At the moment we have some additional settings that we get a user to set when creating the petition page in Form Builder. These get injected by the alter ...JMA is in the progress of working on a geographically targeted petition extension
At the moment we have some additional settings that we get a user to set when creating the petition page in Form Builder. These get injected by the alter angular hook https://lab.jmaconsulting.biz/extensions/geotargetedpetitions/-/blob/main/geotargetedpetitions.php?ref_type=heads#L76 however this means that even on non petition related form builder forms they will show up.
This is about seeing if there is a better way to achieve this and or see if we can get them put onto the specific settings page for say GeotargetedPetition Entity.
@JoeMurray @Edselopez @colemanwhttps://lab.civicrm.org/dev/core/-/issues/4907Event full inconsistencies2024-01-15T11:35:24ZeileenEvent full inconsistenciesThe way EventFull is calculated in apiv4 is not consistent with elsewhere
apiv4 returns a field `'remaining_participants'` which is
event.max_participants - COUNT(participant rows for the event where contact is not deleted, participant ...The way EventFull is calculated in apiv4 is not consistent with elsewhere
apiv4 returns a field `'remaining_participants'` which is
event.max_participants - COUNT(participant rows for the event where contact is not deleted, participant is not test and participant status is_counted)
By contrast apiv3 returns the contents of `CRM_Event_BAO_Participant::eventFull()` which also takes into account the participant role and other aspects of the status
`eventFull()` has some funky parameters - there are 12 calls to it
| caller | returnEmptySeats |includeWaitingList|returnWaitingCount|considerTestParticipant|onlyPositiveStatuses|
| ------ | ------ |------ |------ |------ |------ |
| apiv3-event | TRUE |TRUE|FALSE|FALSE|FALSE|
| Participant::eventFullMessage | FALSE |FALSE|FALSE|FALSE|FALSE|
| Participant::eventFullMessage(2) | FALSE |TRUE|TRUE|FALSE|FALSE|
|ParticipantStatusType::process|TRUE|FALSE|FALSE|FALSE|
|ParticipantTest|FALSE|TRUE|FALSE|FALSE|FALSE|
|Registration::preProcess|FALSE|if-event-has-waitlist|FALSE|FALSE|FALSE|
|Registration::preProcess(2)|TRUE|if-event-has-waitlist|FALSE|FALSE|FALSE|
|Event_Confirm::formRule|FALSE|if-event-has-waitlist|FALSE|FALSE|FALSE|
|ParticipantConfirm|TRUE|FALSE|TRUE|FALSE|TRUE|
|Register::preProcess|FALSE|if-event-has-waitlist|FALSE|FALSE|FALSE|
|EventInfo::run|FALSE|if-event-has-waitlist|FALSE|FALSE|FALSE|
|event-cart|TRUE|TRUE|FALSE|FALSE|FALSE|
Note that this issue somewhat relates/ explains
https://lab.civicrm.org/dev/event/-/issues/23https://lab.civicrm.org/dev/core/-/issues/4883[5.68.1] pre-minified source-less file: "bower_components/es-module-shims/dis...2024-01-29T10:13:51ZDmitry Smirnov[5.68.1] pre-minified source-less file: "bower_components/es-module-shims/dist/es-module-shims.js"`bower_components/es-module-shims/dist/es-module-shims.js` is bundled in pre-minified source-less form, which is bad practice.
Please bundle original un-compressed/un-obfuscated source, readable and modifiable by humans.
It looks like ...`bower_components/es-module-shims/dist/es-module-shims.js` is bundled in pre-minified source-less form, which is bad practice.
Please bundle original un-compressed/un-obfuscated source, readable and modifiable by humans.
It looks like bundling the following file should suffice: https://github.com/guybedford/es-module-shims/blob/1.7.2/src/es-module-shims.js
Thanks.5.70.0https://lab.civicrm.org/dev/core/-/issues/4875Better tracking of Scheduled Reminders including Reporting2024-02-21T19:56:17ZshaneonabikeBetter tracking of Scheduled Reminders including Reporting## Overview
_It has come up quite a few times with several clients of ours, whereby they want to see what Scheduled messages went out, if they bounced, and other details. In a few cases, the Scheduled Reminders were not configured prope...## Overview
_It has come up quite a few times with several clients of ours, whereby they want to see what Scheduled messages went out, if they bounced, and other details. In a few cases, the Scheduled Reminders were not configured properly by the client, which is understandable but that's another UI issue._
_So I think it could be really helpful to provide this type of tracking, including click-through, FFWD, etc for Scheduled Reminders like regular mailings._
## Example use-case
1. Set up a Scheduled Reminder for an Event or Membership Renewal
2. Go to Reports to view the progress of Scheduled Reminders
3. Filter by click-throughs, bounce, etc.
## Current behaviour
_Same as above. Presently, the only workaround in some cases like Scheduled Reminders is to create a "fake" mailing that is sent out to one person. Then copying the code generated into the Scheduled Reminder allows a person to actually track the Scheduled Reminder information like you would with a regular mailing because it is associated to our "fake" mailing. But this is super not sustainable or even doable for Event Reminders._
## Proposed behaviour
_Basically, I think it could be extremely useful to integrate the same functionality for Mailing tracking (including bounce) to Scheduled Reminders._https://lab.civicrm.org/dev/core/-/issues/4873SearchKit - Add inputMode setting to allow clauses to reference column values...2024-02-12T16:30:40ZsamuelsovSearchKit - Add inputMode setting to allow clauses to reference column values in conditionsRelated to https://github.com/civicrm/civicrm-core/pull/28112
The next step is to allow the feature of field selection for conditions :
![image](/uploads/c400052bf32ca7944a87fdae2d2d3bf6/image.png)
I believe it's already possible from...Related to https://github.com/civicrm/civicrm-core/pull/28112
The next step is to allow the feature of field selection for conditions :
![image](/uploads/c400052bf32ca7944a87fdae2d2d3bf6/image.png)
I believe it's already possible from the managed file so it's likely only a UI limitation.colemanwcolemanwhttps://lab.civicrm.org/dev/core/-/issues/4868Add action for copy activity2023-12-20T19:16:21ZyashodhaAdd action for copy activityWe do have copy action on various entities like _Contribution Page_, _Events_.
It might be handy to have the same for _Activity _as well.
Also provide _Save as New_ feature/ when clicked we can have a new activity created with addition...We do have copy action on various entities like _Contribution Page_, _Events_.
It might be handy to have the same for _Activity _as well.
Also provide _Save as New_ feature/ when clicked we can have a new activity created with additional tweaks based on a pre-existing activity. This would come esp handy for activities which have lots of Activity Contacts/Targets/assignees and custom dat awith the original activity acting as a template.yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/4849Shorten all Event iCal descriptions to match Add event to Google Calendar2024-03-07T00:52:44ZshaneonabikeShorten all Event iCal descriptions to match Add event to Google CalendarOverview
----------------------------------------
Presently, the _Add event to Google Calendar_ provide the ability to add a CiviCRM event into Google Calendars. The description is reduced down to the first paragraph and a link to the Ev...Overview
----------------------------------------
Presently, the _Add event to Google Calendar_ provide the ability to add a CiviCRM event into Google Calendars. The description is reduced down to the first paragraph and a link to the Event details is provided below. This is a lot cleaner than the present _Add event to iCalendar_, which includes all the Event description
![Selection_001](/uploads/33efb84cb475bfff4b087364d08d705c/Selection_001.png)
Example use-case
----------------------------------------
1. Create a New Event
1. Add a long description
1. View Event Info page
Current behaviour
----------------------------------------
The description provided in the ```ics``` and other formats is quite long.
Proposed behaviour
----------------------------------------
Reduce the description down to one paragraph with a link to the actual Event within the description. It would make it consistent and also probably a bit cleaner since most people (I think) don't read a full description after they have added something to their calendar but a reference is awesome!https://lab.civicrm.org/dev/core/-/issues/4809Backend register for event via credit card has problematic pre-help text and ...2023-12-06T23:06:43ZDaveDBackend register for event via credit card has problematic pre-help text and should be completely removed and replaced with only a translation-friendly indicator of live vs testCopied from https://github.com/civicrm/civicrm-core/pull/28309
I think the [tpl line](https://github.com/civicrm/civicrm-core/blob/6c6fdea6429f39d552d0cc6bae0254d27daa4919/templates/CRM/Event/Form/Participant.tpl#L31) needs to be comple...Copied from https://github.com/civicrm/civicrm-core/pull/28309
I think the [tpl line](https://github.com/civicrm/civicrm-core/blob/6c6fdea6429f39d552d0cc6bae0254d27daa4919/templates/CRM/Event/Form/Participant.tpl#L31) needs to be completely replaced. I would remove the first sentence since it adds no value since right above it already says the name when it's present, and when it's not present is the cause of this notice, and then the second sentence is not correct in other languages (the "live"/"test" is always in english). Elsewhere the approach for that when there's a known list of values is to just hardcode the full sentences in an `{if}` block.
I do think it's important to identify if it's live or test, but since none of the above has been raised as an issue the help text itself seems very unimportant. Maybe it should just have some kind of icon indicating live or test and that's it.https://lab.civicrm.org/dev/core/-/issues/4765Add label field to OAuthClient entity2023-11-14T16:35:42ZjensschuppeAdd label field to OAuthClient entity## Overview
We came across a use-case for multiple _OAuthClient_ entites with the same _Client ID_, which makes differentiating them difficult in the UI. We'd like to propose adding a field for an administrative label to the _OAuthClien...## Overview
We came across a use-case for multiple _OAuthClient_ entites with the same _Client ID_, which makes differentiating them difficult in the UI. We'd like to propose adding a field for an administrative label to the _OAuthClient_ entity and defining it as the `label_field`. It might also be a good idea to make labels required.
## Proposed behaviour
We're currently building an API extension for synchronizing data from another CRM-like system that requires authorization via OAuth and differentiates multiple instances/sources by using different access tokens for the same client ID/secret.
Our sync API uses configurable profiles which have the OAuth client as a configuration option, so there's a field for selecting an OAuth client in the UI. The only attribute for differentiating OAuth clients in that field is their internal (CiviCRM) ID, as Client ID and secret are the same and the access token should not be exposed and might change. This is not convenient for admins, as they will have to remember which (internal) OAuth client ID corresponds to which instance, which is likely to cause misconfigurations and errors.
I guess this will need:
* the XML schema of the `OAuthClient` entity be extended with a `label` field
* `civix generate:entity-boilerplate`
* Upgrade script for applying schema changes - thanks @eileen!
* anything else?
Happy to hear your thoughts!https://lab.civicrm.org/dev/core/-/issues/4620CiviEvent dashboard: start date is 7 days ago2023-09-26T12:23:49ZmasettoCiviEvent dashboard: start date is 7 days agoI follow up https://civicrm.stackexchange.com/questions/22424/how-to-customize-events-dashboard.
The event dashboard now shows recent and upcoming events (where start date is 7 days ago OR later).
It would be convenient if the numbe...I follow up https://civicrm.stackexchange.com/questions/22424/how-to-customize-events-dashboard.
The event dashboard now shows recent and upcoming events (where start date is 7 days ago OR later).
It would be convenient if the number of days was configurable in the preferences of CiviEvents (`civicrm/admin/setting/preferences/event`).
Do you think it is useful and required by others as well?https://lab.civicrm.org/dev/core/-/issues/4612Searchkit: copy MessageTemplate action2023-09-26T12:17:18Ztycho77Searchkit: copy MessageTemplate action## Overview
You want to create a copy of a message template directly from a Searchkit form, which you can then edit immediately.
## Example use-case
1. in a SearchKit-Form searching for **MessageTemplates**
2. there is a **menu-column...## Overview
You want to create a copy of a message template directly from a Searchkit form, which you can then edit immediately.
## Example use-case
1. in a SearchKit-Form searching for **MessageTemplates**
2. there is a **menu-column** added for selecting actions for one of the MessageTemplates shown
3. you want to select **Copy MessageTemplate**
## Current behaviour
1. you can already choose between CRUD functionalities for MessageTemplates
## Proposed behaviour
1. the copy takes the original name followed by " (copy)"
2. the search is reloaded, so that you can immediately see and edit the copy
## Comments
if this could be done with an hour's effort, there is concrete budget left for this.https://lab.civicrm.org/dev/core/-/issues/4609Smarty/token processing fails with embedded CSS2023-09-26T12:15:49ZlarsssandergreenSmarty/token processing fails with embedded CSSAfter upgrade to 5.65, sending scheduled reminders with embedded CSS in them fails because the parsing interprets something like `selector { attribute: value; }` as broken smarty. Not entirely sure when this problem was introduced, but l...After upgrade to 5.65, sending scheduled reminders with embedded CSS in them fails because the parsing interprets something like `selector { attribute: value; }` as broken smarty. Not entirely sure when this problem was introduced, but lots of reports after [5.65 was released](https://chat.civicrm.org/civicrm/pl/npfsiennxbytpygm6b67bqo41c), so that seems likely.
Embedding CSS in an email may or may not be wise, but it definitely is a valid thing to do, so our smarty/token parsing is broken if it fails on that.https://lab.civicrm.org/dev/core/-/issues/4581Define re-usable idiom for deferrable upgrade steps2023-09-19T13:05:13ZtottenDefine re-usable idiom for deferrable upgrade stepsOverview
----------------------------------------
In managing upgrade-steps, there is some tension between:
* Making the upgrades automatic for typical sysadmins
* Allowing very large deployments to schedule/manage expensive upgrade-st...Overview
----------------------------------------
In managing upgrade-steps, there is some tension between:
* Making the upgrades automatic for typical sysadmins
* Allowing very large deployments to schedule/manage expensive upgrade-steps
This proposes to balance those expectations by defining a _deferrable upgrade task_. Sysadmins can choose to approach them a few ways:
* "Just run the task like every other upgrade step" (*e.g. default; for average and small systems*)
* "Let me decide when to run it... but please don't make me figure out obscure incantations" (*for larger systems*)
* "Let me find a highly-optimized/bespoke way to accomplish the change" (*for extra-large systems with a team of admins*)
Example use-case
----------------------------------------
1. Take a table (like `civicrm_contact`, `civicrm_activity`, `civicrm_mailing_event_queue`) which can be very large on some deployments.
1. Define a schema change (e.g. add a column and an index)
1. Executing this change be quite slow.
1. In the long-term, all systems need the schema-change. If people skip it, then it will lead to problems/confusion/bug-reports/etc.
1. In the near-future, the schema change is not quite mandatory. (The new column isn't actively used; or its usages are limited+guarded.)
A sketch
----------------------------------------
* Designate a place to store a list of deferred upgrade steps (e.g. `civicrm_deferred_upgrade` or `civicrm_queue_item`)
* In the `CRM/Upgrade/` system, add some helpers to conditionally execute or defer a step. Ex:
```php
$this->addDeferrableTask(ts('Update CiviMail tracking'), 'doCiviMailQueueConversion');
```
```php
function addDeferrableTask($title, $funcName, $args) {
if (deferred upgrades enabled) {
// Add $title, $action, $args to a persistent TODO list
}
else {
$this->addTask($title, $funcName, $args);
}
}
```
* Add a system-status-check and post-upgrade message to warn if there are any of these things that need to run
* Add an API/job/command/UI to list/execute/skip/delete deferred steps