Development issueshttps://lab.civicrm.org/groups/dev/-/issues2022-12-20T18:24:57Zhttps://lab.civicrm.org/dev/core/-/issues/2467[Meta] XLTS Angular JS longer-term-support2022-12-20T18:24:57Zhomotechsual[Meta] XLTS Angular JS longer-term-support@JoeMurray raised in chat that [AngularJS goes EoL in December](https://chat.civicrm.org/civicrm/pl/cm6jqmcex3n39ekf3zzx4tiree) there is a company [XLTS](https://xlts.dev/angularjs) providing extended LTS support through 2026. I've send ...@JoeMurray raised in chat that [AngularJS goes EoL in December](https://chat.civicrm.org/civicrm/pl/cm6jqmcex3n39ekf3zzx4tiree) there is a company [XLTS](https://xlts.dev/angularjs) providing extended LTS support through 2026. I've send them an enquiry asking how much they are likely to look to charge given the open-source nature of CiviCRM to see if, perhaps, they'd be willing to "donate" the XLTS to us.
We lose nothing by asking!JoeMurrayJoeMurrayhttps://lab.civicrm.org/dev/core/-/issues/2225Add a contact.checksum_raw token that does not include "cs="2023-09-24T22:53:45ZherbdoolAdd a contact.checksum_raw token that does not include "cs="Unlike all the other tokens which only include the actual data, such as `{contact.contact_id}`, the `{contact.checksum}` also includes the parameter name. There doesn't seem to be any good reason other than that is how it was always done...Unlike all the other tokens which only include the actual data, such as `{contact.contact_id}`, the `{contact.checksum}` also includes the parameter name. There doesn't seem to be any good reason other than that is how it was always done.
I suppose it's not possible to fix this token at this point since lots of existing links rely on it. But perhaps a new token? A bit messy but I need something like `{contact.checksum.raw}`https://lab.civicrm.org/dev/core/-/issues/1799Daily (and other) scheduled jobs slip forward each day until they're eventual...2023-06-17T17:35:14ZJonGoldDaily (and other) scheduled jobs slip forward each day until they're eventually missedIf this subject line looks familiar, [there's a reason](https://issues.civicrm.org/jira/browse/CRM-16276).
This issue was originally raised and [fixed in April 2015](https://github.com/civicrm/civicrm-core/commit/d0be1535d809b206890bcd4...If this subject line looks familiar, [there's a reason](https://issues.civicrm.org/jira/browse/CRM-16276).
This issue was originally raised and [fixed in April 2015](https://github.com/civicrm/civicrm-core/commit/d0be1535d809b206890bcd4f72ebd4ba8fb1c86d). However, a code simplification in December 2015 [removed the fix](https://github.com/civicrm/civicrm-core/commit/bda41fcbeaf535ff04d7e5cfc7145e83f50c17b2).
Many of us are familiar with this issue. Cron runs at 10:00:00, scheduled jobs are executed in order, and one job might not fire until 10:00:03. If the job fires hourly, we would expect the job to fire at 11:00:00, but since an hour hasn't elapsed since 10:00:00, the job doesn't fire until the *next* cron, maybe at 11:15:00. This has repercussions for a number of scheduled job use cases.
After some thought, I realized the correct solution is to record the time the *cron job* fires, not the time the job actually is started. I believe that when the `last_run` field was created, there was no sense that these times might be different, hence the bug.
I wrote a patch (I'm leaving it in production for a few days before submitting a PR) that does two things:
* `last_run` now refers to the time the cron job started, not the scheduled job.
* To avoid race-y conditions on very slow shared hosts, I force the `last_run` time to always have "00" as its seconds. This is a belt-and-suspenders (or belt-and-braces in non-'Merican) approach that reflects that a) shared hosting could be slow enough that this would otherwise be a problem, b) cron doesn't allow scheduled at the seconds level, so this shouldn't impact anyone's scheduling.JonGoldJonGoldhttps://lab.civicrm.org/dev/financial/-/issues/112Add FormRule to force user to remove "&" from both "Billing First Name" and "...2019-12-19T08:39:04ZKarinGAdd FormRule to force user to remove "&" from both "Billing First Name" and "Billing Last Name" fields**Issue:**
First Name field can be filled out as e.g. "Jon & Mary";
That "&" can cause issues with Payment Processors when it's passed on as part of the Cardholder Name - resulting in rejecting properly entered Credit Card information....**Issue:**
First Name field can be filled out as e.g. "Jon & Mary";
That "&" can cause issues with Payment Processors when it's passed on as part of the Cardholder Name - resulting in rejecting properly entered Credit Card information.
Credit Card Payments with iATS Payments will get a REJ:23 failure code when the Cardholder name contains a "&" - I did some research to see if this is iATS Payments' specific, but I don't think it is.
I found e.g. CartPay -> also has error codes ERROR: 54043: "The Billing Firstname contains invalid characters."
I also found SagePay has such error codes - for every single text field actually:
```
"5037 : The Delivery Address contains invalid characters.","5037 : The Delivery Address contains invalid characters."
"5038 : The Delivery Phone contains invalid characters.","5038 : The Delivery Phone contains invalid characters."
"5039 : The Delivery City contains invalid characters.","5039 : The Delivery City contains invalid characters."
"5040 : The Billing Surname contains invalid characters.","5040 : The Billing Surname contains invalid characters."
"5041 : The Billing Firstname contains invalid characters.","5041 : The Billing Firstname contains invalid characters."
"5042 : The Billing Address1 contains invalid characters.","5042 : The Billing Address1 contains invalid characters."
"5043 : The Billing Address2 contains invalid characters.","5043 : The Billing Address2 contains invalid characters."
"5044 : The Billing City contains invalid characters.","5044 : The Billing City contains invalid characters."
"5045 : The Billing Phone contains invalid characters.","5045 : The Billing Phone contains invalid characters."
"5046 : The Delivery Surname contains invalid characters.","5046 : The Delivery Surname contains invalid characters."
"5047 : The Delivery Firstname contains invalid characters.","5047 : The Delivery Firstname contains invalid characters."
"5048 : The Delivery Address1 contains invalid characters.","5048 : The Delivery Address1 contains invalid characters."
"5049 : The Delivery Address2 contains invalid characters.","5049 : The Delivery Address2 contains invalid characters."
"5050 : The Billing Address contains invalid characters.","5050 : The Billing Address contains invalid characters."
"5051 : The Contact Number contains invalid characters.","5051 : The Contact Number contains invalid characters."
"5052 : The Customer Name contains invalid characters.","5052 : The Customer Name contains invalid characters."
"5053 : The Email Message contains invalid characters.","5053 : The Email Message contains invalid characters."
"5054 : The Cardholder Name contains invalid characters.","5054 : The Cardholder Name contains invalid characters."
"5055 : A Postcode field contains invalid characters.","5055 : A Postcode field contains invalid characters."
"5056 : The Contact Fax contains invalid characters.","5056 : The Contact Fax contains invalid characters."
```
This Image illustrates -> issue (on the left) -> no issue (on the right). Of course the checkbox for My billing address is the same as above is what copies the First Name and Last Name fields down into the Cardholder name bits. The form rule can look for "&" and then tell the user to remove it. Note the user can still leave "Mark & Karin" in the Name and Address Profile. But we would prevent it from going into the Billing details.
![image](/uploads/bd1131f6790be6d085fe3962d4017ffa/image.png)https://lab.civicrm.org/dev/core/-/issues/20Can't place a contribution widget on a Contribution Page2023-11-23T07:47:01ZJonGoldCan't place a contribution widget on a Contribution PageWhen you attempt to place a contribution widget on its own contribution page in the "Inroductory Message" section, you get the error:
`Illegal characters in input (potential scripting attack)`
I confirmed this is a regression by replica...When you attempt to place a contribution widget on its own contribution page in the "Inroductory Message" section, you get the error:
`Illegal characters in input (potential scripting attack)`
I confirmed this is a regression by replicating the problem on the Drupal demo site (4.7) and confirming it didn't exist ion the Joomla site (4.6). I'm pretty sure it didn't happen earlier in the 4.7 cycle either.https://lab.civicrm.org/dev/core/-/issues/5061New structure for getFields array in `.entityType.php`2024-03-25T20:55:29ZcolemanwNew structure for getFields array in `.entityType.php`Currently getFields reads from a `schema/xml` file with some wonky formatting. The plan in #4999 is to migrate those `.xml` files to `.entityType.php` files. So now we have a clean slate to decide how those files should be formatted.
No...Currently getFields reads from a `schema/xml` file with some wonky formatting. The plan in #4999 is to migrate those `.xml` files to `.entityType.php` files. So now we have a clean slate to decide how those files should be formatted.
Note: This will not affect the output of `DAO::fields()` or `APIv(3|4).getFields`, as we'll add a compatibility layer and tests to ensure those remain unchanged. But since we're replacing the underlying source of the data with something new, we get to clean that up.
Here are all the current keys in the schema/xml files, and what we plan to do with it in the new file. Many of the proposed changes would improve consistency with APIv4.getFields.
| Old key from `xml` | What to do | New key in `php` | Notes |
| ------ | ------ | ------ | ------ |
| `<name>` | ⚠️ index by | | Use name as array key, omit from array values |
| `<title>` | ✅ keep | `title` | |
| `<required>` | ✅ keep | `required` | |
| `<add>` | ✅ keep | `add` | |
| `<pseudoconstant>` | ✅ keep | `pseudoconstant` | snake_case all values in array |
| `<default>` | ✅ keep | `default` | |
| `<contactType>` | ✅ keep | `contact_type` | |
| `<deprecated>` | ✅ keep | `deprecated` | |
| `<readonly>` | ✅ keep | `readonly` | |
| `<serialize>` | ✅ keep | `serialize` | |
| `<localizable>` | ✅ keep | `localizable` | |
| `<usage>` | ✅ keep | `usage` | |
| `<component>` | ✅ keep | `component` | Ok, but it smells bad to have columns belonging to one component in another component's table :nose: (fixme for another day) |
| `<localize_context>` | ✅ keep | `localize_context` | Obscure property only used by 3 fields, but it's easier to keep it. |
| `<type>` | ⚠️ rename | `sql_type` | |
| `<crmType>` | ⚠️ rename | `data_type` | Historically this was inferred by `<type>` but a few fields explicitly declare `<crmType>` |
| `<uniqueName>` | ⚠️ deprecate | `unique_name` | We can't get rid of it yet but we can discourage it & stop indexing by it at every layer except `DAO::fields()` |
| `<uniqueTitle>` | ⚠️ deprecate | `unique_title` | Are title & attributes[label] not enough? |
| `<comment>` | ⚠️ rename | `description` | |
| `<html>` | ⚠️ rename/reorganize | `attributes` | `type` gets moved out (see `<html><type>` below), while `length` gets moved in as `maxlength` |
| `<html><type>` | ⚠️ move/rename | `input_type` | |
| `<length>` | ⚠️ rename | `attributes[maxlength]` | That seems better. |
| `<import>` | ⚠️ move | `usage[import]` | |
| `<export>` | ⚠️ move | `usage[export]` | |
| `<foreignKey>` | ⚠️ move+reformat | `entity_reference` | This tag is outside of `<fields>` in the xml but doesn't need to be. Let's move it into the getFields array. |
| `<dynamicForeignKey>` | ⚠️ move+reformat | `entity_reference` | Conceptually the same as above so can share the same name. |
| `<permission>` | ⚠️ reformat | `permission` | Convert `<or>` tags to nested array format used by `CRM_Core_Permisison::check()`. |
| `<drop>` | ❌ remove | | `<drop>` designates a field has been dropped, but in that case let's just [remove it](https://github.com/civicrm/civicrm-core/pull/18244) from the array as nothing else was being done with it. |
| `<rule>` | ❌ remove | | Unused as of [PR#29611](https://github.com/civicrm/civicrm-core/pull/29611). |
| `<headerPattern>` | ❌ remove | | Unused as of [PR#29612](https://github.com/civicrm/civicrm-core/pull/29612). |
| `<dataPattern>` | ❌ remove | | Appears to be unused in `universe`. |
| `<fulltext/>` | ❌ remove | | Apparently unused. Ignored by GenCode when writing DAOs. |https://lab.civicrm.org/dev/core/-/issues/5060Automated reminder to people that didn't subcribe to groups they applied subs...2024-03-14T22:45:20Znikola.mladenovicAutomated reminder to people that didn't subcribe to groups they applied subscription forOverview
----------------------------------------
Subscribing for newsletter usually ends up as a one way street, if they want to have subscribers and be under wing of GDPR. If the user doesn't confirm their subscription, they would eith...Overview
----------------------------------------
Subscribing for newsletter usually ends up as a one way street, if they want to have subscribers and be under wing of GDPR. If the user doesn't confirm their subscription, they would either have to find original email or resubscribe if they cant find it, but usually users just forget they did subscribe.
Recommended improvement was discussed on Mattermost to check if such feature existed in civicrm and few users did raise concern and that they would like to have this feature request:
[Mattermost chat](https://chat.civicrm.org/civicrm/pl/bg6x9u7qmf8fdkwn8tz4o9ft1r )
Current behaviour
----------------------------------------
Subscribing to newsletter only sends email as user applies for newsletter
Proposed behaviour
----------------------------------------
Scheduled job for example, which would check if there are any users which are pending for some groups, check the date they applied and then send another nudge for user to join in. This feature should be limited to only once per fresh request for all pending users. Proposal for after how much this automated schedueld job would contact users should be a week, 2 weeks, month, 2 months, 3 months.
Comments
----------------------------------------
_Anything else you would like the reviewer to note._https://lab.civicrm.org/dev/core/-/issues/4915Sending an invoice per email goes to primary address, not to billing2024-02-09T23:08:39ZMariaVSending an invoice per email goes to primary address, not to billingI have found this post on StackExchange:
https://civicrm.stackexchange.com/questions/9094/sending-an-invoice-per-email-goes-to-primary-address-not-to-billing
I tested on CiviCRM 5.68.1 and it seems that CiviCRM still only sends the invo...I have found this post on StackExchange:
https://civicrm.stackexchange.com/questions/9094/sending-an-invoice-per-email-goes-to-primary-address-not-to-billing
I tested on CiviCRM 5.68.1 and it seems that CiviCRM still only sends the invoice to the primary address.
What do you think about a setting 'send invoice email to Billing if it exists, otherwise send it to Primary'?
The setting could be optional so that nothing changes for users who want to keep it as it is.
Or is there any knowing extension already that I could not find?
Thanks in advance!https://lab.civicrm.org/dev/user-interface/-/issues/60Accordions: Eight patterns in Civi markup – reduce & make more accessible?2024-03-06T20:20:40ZnicolAccordions: Eight patterns in Civi markup – reduce & make more accessible?At present [Civi docs recommends](https://docs.civicrm.org/dev/en/latest/framework/ui/#accordions) making an accordion interface element with `.crm-accordion-wrapper`. There's at least another seven ways accordions are implemented in Civ...At present [Civi docs recommends](https://docs.civicrm.org/dev/en/latest/framework/ui/#accordions) making an accordion interface element with `.crm-accordion-wrapper`. There's at least another seven ways accordions are implemented in Civi, as seen in #56. Some of these look/behave differently, and maybe have to be different, but perhaps some could be merged.
Furthermore, none of these use the basic [aria-labels](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-expanded) recommended in the [Bootstrap3 method](https://getbootstrap.com/docs/3.4/javascript/#collapse) (which remains in Bootstrap5), for letting screen-readers know if an accordion is open or closed, and which contents should be read or not. This is a long-standing issue - https://lab.civicrm.org/dev/core/-/issues/3294 - raised by the late accesibility expert Rachel Olivero (the Olivero theme is named after her). Sidenote: Bootstrap's accordion pattern (`.collapse`) doesn't seem to be used anywhere in Civi.
This meta issue is designed to clarify two points, to further the goals of #57 (and support #58 & #59), and follows @eileen's [question here](https://lab.civicrm.org/dev/user-interface/-/issues/59#note_151554):
- [ ] can we reduce the number of accordion markup patterns that a theme must support from 7 to anything less?
- [ ] can we amend the recommend accordion markup (and in turn civi's accordion implementations) to be more accessible (+ modern/responsive)?
#### The patterns:
1. `.crm-accordion-wrapper` - as recommended in the docs UI reference guide
2. (related) `.crm-dashlet-header` - as seen on the home dashboard. Looks the same but only the expand icon (e.g. arrow) is clickable as the rest of the header needs to be a drag-gable region.
3. `.crm-collapsible` - notably used on the field groups on the contact record main tab - it has no background for the header or body
4. (related) `.crm-collapsible` on a fieldset - as seen on event signup pages
5. `.collapsed` in a table - as seen on the extensions listing page
6. using the `.crm-ui-accordion` angular directive. This is a shorthand to generate the `.crm-accordion-wrapper` type accordion top.
7. `.af-collapsible` on a FormBuilder element - as seen in forms generated by Form Builder - a new JS/CSS/markup pattern [added in 2022](https://github.com/civicrm/civicrm-core/blob/master/ext/afform/admin/ang/afGuiEditor/afGuiMenuItemCollapsible.component.js)
8. there's another Jquery/Angular fieldset accordion used in Searchkit builder that's not in ThemeTest yet.
#### Range of characteristics
These eight variations cover 5 different visual/interaction patterns:
- click on full header to expand/close
- click only on expand/close icon to expand/close
- shaded background for header and body
- transparent background for header and body
- expand a region outside of the parent accordion wrapper (5 - maybe soon to be replaced with SK/FB)
#### Merging patterns
Initial thought is that with a bit of extra css and a tiny bit of rewriting, all of these could be done with two patterns - one based on the current recommended `wrapper > header + body`, with the full header clickable and the icon added entirely in css; and one based on an icon wrapped in an <a> tag that toggles the visibility of another region, as seen in patterns 2 and 5 above (while 5 may soon be replaced and 2 is one-off)..
- A utility class like `crm-accordion-clear` could be applied next to `.crm-accordion-wrapper` to provide 1) above with the same UI as 3)
- Likewise two new CSS selectors could allow the same pattern to be applied to 4) & 8) . Both these changes are demonstrated in a new ThemeTest branch: [Proposals](https://lab.civicrm.org/extensions/themetest/-/commits/proposals)
- I'm not sure why in 7) + 8) the new SK/FB Angular accordions diverged in markup/js/css from Civi's recommend accordion - maybe needs @colemanw to feed in.
- The extensions page 5) will be rewritten with FB/SK at some point so can maybe ignore.
- That leaves 2) - an accordion where only the icon triggers an expand/close so the rest the header is a dragable region. I think that making this use the same markup/css pattern as the others would require rewriting all the others, so it might be safest to leave this an exception for now. There is an attempt to merge the patterns in [Proposals](https://lab.civicrm.org/extensions/themetest/-/commits/proposals) but the header is doing a lot - dragging and right-floated icons. A toggle behavior is more compelling than an accordion, even if it should look like an accordion.
- But even with keeping 2), then potentially only 2 patterns left out of 8.
#### Thoughts on accessibility
[Work has been done](https://github.com/civicrm/civicrm-core/pull/11955) to implement [JQuery Accessible Accordion Aria](https://libraries.io/bower/jquery-accessible-accordion-aria) into Civi (demo of the plugin - https://a11y.nicolas-hoffmann.net/accordion/). Not sure if that is still a promising path, or there's a JQuery free methods now.
The current recommended pattern could be made more accessible with something like the following, based on Bootstrap3's collapse. There's fewer ARIA labels than the JQuery plugin, but it makes clear if the accordion is open or not, and links the header to the expand region with an id, two recommendations of [this walkthru](https://www.hassellinclusion.com/blog/accessible-accordion-pattern/) on accessible accordions.
```
<div class="crm-accordion-wrapper collapsed">
<div class="crm-accordion-header" aria-expanded="false" aria-controls="uniqueID">
Accordion Title here
</div>
<div class="crm-accordion-body" id="uniqueID">
<div class="crm-block crm-form-block crm-form-title-here-form-block">
Accordion Body here
</div>
</div>
</div>
```
This would require two changes - a unique ID added to every unique accordion on a page, and an `aria-expanded="false"` attribute that toggles true/false.
#### Questions
- why did the new angular accordions take another approach? Speed of development or something practical?
- is it worth trying to reduce these down to two recommended patterns, by swapping out the new angular patterns and adding a few new css classes into core? Or better to wait and flag this for the future?
- what's the easiest way to make civi accordions more screen reader friendly?Improve Civi's front-endhttps://lab.civicrm.org/dev/core/-/issues/4639New approaches to ACL caching (and smart groups?)2024-02-16T16:22:42ZJonGoldNew approaches to ACL caching (and smart groups?)A lot of work has gone into improving the efficiency and frequency of ACL calculation. Let's attack the performance of writing the results to db?
I have a site where contacts change frequently, and ACLed users need to wait for 100,000 ...A lot of work has gone into improving the efficiency and frequency of ACL calculation. Let's attack the performance of writing the results to db?
I have a site where contacts change frequently, and ACLed users need to wait for 100,000 records to be written each time. Disabling opportunistic flushes only partly mitigates the issue.
Here are some ideas:
* Could we move ACL/smart group caching into `\Civi::cache`? Then we could use Redis etc.
* Instead of truncating and writing all contacts - what if we only `INSERT` and `DELETE` changes from the existing cache?
* When a contact's edited, could we just calculate cache for that contact? For any ACL based on a static group, this should be trivial. Even with smart groups/custom code - are there scenarios where we'd ever need to calculate ACLs for anyone but the changed contact and all their related contacts?https://lab.civicrm.org/dev/core/-/issues/4627Proposal: Membership type label2023-10-01T19:23:57Zmattwiremjw@mjwconsult.co.ukProposal: Membership type labelThe membership type table only has "name" and you cannot specify a separate label/title for display. This makes it problematic for portability/import/export as well as translation.
Proposal: Add new field "label" to MembershipType which...The membership type table only has "name" and you cannot specify a separate label/title for display. This makes it problematic for portability/import/export as well as translation.
Proposal: Add new field "label" to MembershipType which is used for display instead of the name.https://lab.civicrm.org/dev/user-interface/-/issues/58Make a new theme to ship with Civi2024-02-28T17:20:02ZnicolMake a new theme to ship with CiviIn parallel to documenting Civi's Markup in the ThemeTest extension (#56) and agreeing the best markup patterns (#57), produce a new theme to ship with CiviCRM to replace the 15-year-old Greenwich theme.
After extensive discussion @artf...In parallel to documenting Civi's Markup in the ThemeTest extension (#56) and agreeing the best markup patterns (#57), produce a new theme to ship with CiviCRM to replace the 15-year-old Greenwich theme.
After extensive discussion @artfulrobot and I (who each produce a theme - [Aah](https://github.com/artfulrobot/aah) and [Finsbury Park](https://civicrm.org/extensions/finsbury-park-cross-cms-admin-theme)) are deliberately trying to ignore UI specific questions (fonts? colours? flat? shadows? round-corners?) but instead on making those decisions something trivial to change later (and would obviously make them in discussion with the community).
This themes' primary goal is to give Civi a theme backend that will support not just 2023/24's UI trends (shadowy, vs flat, vs skewmorphic), but the trends of the next 20 years. As well as supporting all 7 Civi versions (Backdrop, Drupal 7 with Seven, Drupal 9+ with Claro, Joomla 3, Joomla 4, Standalone, WordPress), the new theme aims to follow several principles:
### Wide use of CSS Variables
Use [CSS Custom Properties](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties) (aka CSS Variables) to make it quick to re-theme. In principle this could make it viable to have a set of Custom property declarations to make the theme look closer to Shoreditch for those whose training materials require that, or for those who need to match a CMS UI or organisation intranet design guidelines.
A test of CSS Custom Properties being used in this way is [currently shipping with the login](https://lab.civicrm.org/extensions/standaloneusers/-/blob/main/templates/CRM/Standaloneusers/Page/Login.tpl) page markup for [CiviCRM Standalone](https://civicrm.org/blog/josh/civicrm-without-cms-welcome-back-standalone). In the screengrab below you can see the three variable arrays for three different UI's
![image](/uploads/d65e77cf87c1208ab0b88af0d515dc35/image.png)
### Bootstrap Subset
Use a Bootstrap subset to continue to support the Bootstrap 3 class names & markup patterns currently in use in post-Shoreditch components (API Explorer, SearchKit, Form Builder, Mosaico, etc). This does not mean Bootstrap 3 as a whole needs to be supported/bundled; and some of Bootstrap 4/5 can be used - but the full Bootstrap 3 or 5 bundle isn't needed.
### Accessibile, responsive, small
Standards in accessibility have evolved fast. Just taking base font-size - the current standard practice is to let the browser define this, with a default of 16px and scale every page font in proportion using Rems. However, in Bootstrap 3: HTML is 10px, body is 14px, all sizes are set in pixels. WordPress and Joomla 3 are worse: both have 13px body size, same as the Seven admin theme on Drupal 7 and 8. Bootstrap 4 & 5, Backdrop, Joomla 4 and Drupal 9 Claro theme get it right: body is 1rem, inheriting pixel size from browser (aka 16px). But it’s an extra complexity for Civi's cross-CMS theming. To understand why this is so important, Rich made a demo: https://artfulrobot.uk/lil/about-rems/.
Mobile and tablet support needs to be added as far as possible.
The theme's filesize should be kept as small as possible within the various constraints described here.
### Structure
Structure the theme to separate style definitions for Style Guide approved markup patterns (#57) and the legacy support for (some of) the older patterns identified in #56, aka 'Civi hacks'. The CSS also needs a CMS Hacks section to handle CMS-specific quirks which often change with new CMS themes, e.g. Drupal 9's Claro). A possible structure below
![image](/uploads/8bd26d331c8a73c8f9f3a54059e8ee07/image.png)
### Separate front theme?
CiviCRM on the front-end has different needs to the backend. Buttons need to match the parent front-end theme style and there's a number of ways to do this, from having separate CSS Variables for front-end pages that users can configure, to having a minimalist front-end theme that inherits more from the parent theme. This will be looked at subject to time and progress of other goals, for now there is a prototype CSS Variable led, minimalist front-end theme that inherits more of a front-end theme while letting the user configure some defaults (ie button colour/size): [Front](https://lab.civicrm.org/nicol/front/-/tree/main).
Related issue: https://lab.civicrm.org/dev/user-interface/-/issues/46. Related [Wiki page](https://lab.civicrm.org/dev/user-interface/-/wikis/DINO:-New-theme(s)).Improve Civi's front-endhttps://lab.civicrm.org/dev/core/-/issues/4614Search Displays: Let booleans be displayed as "instant-save" checkboxes2023-09-26T12:18:30ZnoahSearch Displays: Let booleans be displayed as "instant-save" checkboxesIn SearchKit, turning on "inline edit" for a boolean field results in a UI that involves three clicks to toggle the field value:
1. click the field to enter edit mode
2. click "Yes" or "No"
3. click the submit button
A much smoother UI...In SearchKit, turning on "inline edit" for a boolean field results in a UI that involves three clicks to toggle the field value:
1. click the field to enter edit mode
2. click "Yes" or "No"
3. click the submit button
A much smoother UI (one click instead of three) would be a single checkbox that saves immediately when toggled.https://lab.civicrm.org/dev/core/-/issues/4576Proposal: Unique Identifier/Field references for input fields in Form Builder2023-09-14T13:23:58Zsimon.hermannProposal: Unique Identifier/Field references for input fields in Form Builder## Overview
We propose to add a way to reference fields via an unique identifier in order to use the field value elsewhere on the field, e.g. the success page proposed in issue #4569 or on another page of a multi-page form.
Proposed use...## Overview
We propose to add a way to reference fields via an unique identifier in order to use the field value elsewhere on the field, e.g. the success page proposed in issue #4569 or on another page of a multi-page form.
Proposed uses of this feature are:
* setting the value of another field
* setting input fields in a form processor
The field reference should be automatically generated when creating a new field but be editable, if needed.
## Use case
Donation form:
* set default value for account holder based on field values “first name”, “last name”
* show chosen amount of donation on the next page
* use “first name” and “last name” as well as “donation amount” for success page to confirm donation and say thank you
## Current behavior
Not implemented
## Proposed behavior
Every field has an auto-generated field reference. Using the field reference, the field value can be shown on the form.https://lab.civicrm.org/dev/core/-/issues/4574Proposal: Suggestions for multi-page forms with Form Builder2023-09-14T12:59:56Zsimon.hermannProposal: Suggestions for multi-page forms with Form Builder## Overview
We are happy to see that there is a plan to implement multi-page forms. To enable the users to navigate the form efficiently, it would be great if the following two features are included
- Users should be allowed to navigat...## Overview
We are happy to see that there is a plan to implement multi-page forms. To enable the users to navigate the form efficiently, it would be great if the following two features are included
- Users should be allowed to navigate between pages, even if not all required fields on the current page are filled. This allows users to get an overview of the overall (multi-page) form.
- There should be an option to move to the next or previous page, but also an additonal menu that allows the users to move directly to a specific page of the form. It would also be great if the names of the pages could be set.
- (Optional) Have a representation of the current progress of the form. This should show on which page of the current form I am, in e.g. page 1 of 4 pages (maybe as a progress indicator as welll).
## Example use-case
1. Have additional buttons that allow moving forward or backward on the form
2. Have an option to add a navigation menu to a multi-page form where the names of the pages can be set as well.
3. Have an option for multi-page form, to add a progress indicator, with options to either show the current page number compared to the overall number of pages or similar to a graphical progress bar.
## Current behaviour
The option for multi page forms is not implemented yet.
## Proposed behaviour
Be able to separate the form into multiple pages. Have buttons to navigate to the next or previous page, even if not all required fields are filled and have an additional menu, which allows the user to navigate to one specific page. Have an option to add a progress indicator.https://lab.civicrm.org/dev/core/-/issues/4573Proposal: Add preliminary submission to the Form Builder2024-03-12T13:28:32Zsimon.hermannProposal: Add preliminary submission to the Form Builder## Overview
For longer and more complex forms, users may want to extend the process of filling out a submission form across several browser sessions. Therefore, it would be great to be able to submit/save a partially completed form as a...## Overview
For longer and more complex forms, users may want to extend the process of filling out a submission form across several browser sessions. Therefore, it would be great to be able to submit/save a partially completed form as a preliminary submission and finalise the data later. Complex forms, such as grant applications, could be started and then completed when all the required information is collected. We would suggest adding a "Continue Later" or "Preliminary Submission" button to allow submissions even if not all required fields are filled in.
There would be 2 options for handling the pre-submitted data.
Option 1: The data will be saved in a submission log, but not yet processed in CiviCRM. Using a unique identifier for the submission entry as an URL parameter will load the data from the submission log into the form.
Option 2: Data is processed and stored directly in CiviCRM, meaning contacts, cases or other entities are already created or updated. The form can be edited later using URL parameters and retrieval of defaults.
The user receives a personalised link that allows them to continue with the form. This means that fields such as an email address must be marked as 'required for preliminary submission'. We suggest that this additional option for any input field is only displayed if a "continue later" button is added to the form itself.
At our CiviSprint in Zeitz, Germany, there was a preference for the second option by clients who wanted to use this functionality for their grant application process. It is helpful for clients to be able to see a partially submitted application in order to support the applicant during the application process.
## Example use-case
1. Add an additional button called 'Resume later'.
2. This adds the option on each field to be 'required for preliminary submission'.
## Current behaviour
- When a form is submitted, all required fields have to be filled.
## Proposed behaviour
- There is a new button that allows a (preliminary) submission even if not all required fields are filled.
- Fields can be marked as be required when the new button is triggered.
- A personalised link is sent to the user, which allows to reopen the form with the pre-filled data.https://lab.civicrm.org/dev/core/-/issues/4572Proposal: Retrieval of Defaults w/ Form Builder and Form Processor2023-09-18T12:24:16ZMariaVProposal: Retrieval of Defaults w/ Form Builder and Form ProcessorOverview
----------------------------------------
At the CiviSprint in Germany we found out that Submission forms (Form Builder) currently do not support use cases such as self-service forms that allow users to check and change their exi...Overview
----------------------------------------
At the CiviSprint in Germany we found out that Submission forms (Form Builder) currently do not support use cases such as self-service forms that allow users to check and change their existing contact data.
A lot of Wordpress projects use CalderaForms together with Form Processor to transfer the data to CiviCRM. In CalderaForms there is an option to activate Retrieval of Defaults:
![grafik](/uploads/912921154b32fbf34052c77dcf79b597/grafik.png)
As well as in Form Processor:
![grafik](/uploads/8802a13e8aa75798be4a25bfa9126fcf/grafik.png)
Caldera Forms allows passing URL parameters to the form processor – e.g. a contact CiviCRM ID along with a checksum to prove that the user is allowed to see and edit data for this particular contact, as a way of authentication without requiring a login. These URLs look as follows:
_https//link.org/example-page/cid={contact.contact_id}&{contact.checksum}_
With this information the form processor can retrieve data from within CiviCRM when the form is loaded and prefill fields in the form.
What works in the Form Builder already?
----------------------------------------
- Adding Form Processor as an entity
- Using Form Processor fields for a form
- Submitting/Creating data entered in submission form
- Using the entity id as an URL parameter (requires login)
What is missing?
----------------------------------------
- Option to enable retrieval of defaults (like in CalderaForms) to fill forms with existing data.
- Forms that work for anonymous users, using a checksum for authentication
Comments
----------------------------------------
If you need any further information, please let me know.
I could assist in setting up an example in a test environment since I am not able to implement this function myself.https://lab.civicrm.org/dev/core/-/issues/4442Add action to convert smart group to regular group2023-08-31T16:33:25ZyashodhaAdd action to convert smart group to regular groupThere are cases when smart groups have actually run their course. The list is not going to change after a while so no need keeping the group smart esp when the criteria is quite complex and increases the load time. The idea here is keep ...There are cases when smart groups have actually run their course. The list is not going to change after a while so no need keeping the group smart esp when the criteria is quite complex and increases the load time. The idea here is keep only those groups that are needed as smart/dynamic so that it prevents unnecessary process of re-calculating the groups that just shouldn't be if deletion of the group is not an option.
In such cases, provide the ability to convert smart group to regular group.
Proposal : Provide action link for smart groups to convert to regular group.
- refresh the smart group
- move from the group contact cache to group contacts
- unset the saved search on the groupyashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/4364Afform: Adding forms to menu is not compatible with Customize Navigation Menu2023-10-19T23:44:23ZlarsssandergreenAfform: Adding forms to menu is not compatible with Customize Navigation MenuIf you add a menu item for a form directly in the form, it shows up sort of where you want it (though the interface to set the order is pretty unhelpful, because you basically are guessing what the weight of existing items in the menu mi...If you add a menu item for a form directly in the form, it shows up sort of where you want it (though the interface to set the order is pretty unhelpful, because you basically are guessing what the weight of existing items in the menu might be). However, if you later go to Customize Navigation Menu, you can move the menu item you created around and it looks like it works and it will work for a while, but then later, it will move back to the location and weight set in the form.
This is confusing for users and frustrating if you don't know what's going on. Seems like we need to have just one way to edit the menu. Maybe it makes sense to simply remove the add to menu option from forms and let users add the menu item manually? Or alternately, we need a way for the menu location and weight to only be used on inserting the menu item and to be uneditable in the form afterwards, maybe with a help text that tells you to edit this directly in the menu.https://lab.civicrm.org/dev/core/-/issues/4354Activities created via API should notify Assignees2023-08-03T12:38:52Zwil_SRQActivities created via API should notify AssigneesOverview
----------------------------------------
If the GUI (https://cc.unidosnow.org/civicrm/activity?action=add) would notify assignees when an activity is created. It'd be useful for the API to do so too. The GUI respects the setting...Overview
----------------------------------------
If the GUI (https://cc.unidosnow.org/civicrm/activity?action=add) would notify assignees when an activity is created. It'd be useful for the API to do so too. The GUI respects the setting in Administer > Customize Data and Screens > Display Preferences > Notify Activity Assignees and notification rules by Activity type. It'd be useful for the API to do so too.
Example use-case
----------------------------------------
1. Invoke civicrm_api3('Activity', 'create', []) or civicrm_api4('Activity', 'create', [])
2. Include assignees
Current behaviour
----------------------------------------
The Activity is created but the assignees are not notified, even in situations where creating the equivalent activity via the GUI would have issued notifications.
Proposed behaviour
----------------------------------------
Notify assignees using the same rules and notification format as the GUI.
Comments
----------------------------------------
See https://civicrm.stackexchange.com/q/45078/5446
Workaround is to call CRM_Activity_BAO_Activity::sendToAssignee() separately