CiviCRM Core issueshttps://lab.civicrm.org/dev/core/-/issues2023-01-04T05:03:23Zhttps://lab.civicrm.org/dev/core/-/issues/1093Add support for bulkcreates2023-01-04T05:03:23ZeileenAdd support for bulkcreatesAfter discussing with @colemanw on chat - there is a demand in some cases to create an entity in a way that performs well on multiple creates at one. GroupContact or MailingQueue are both examples. The current example is creating bulk cu...After discussing with @colemanw on chat - there is a demand in some cases to create an entity in a way that performs well on multiple creates at one. GroupContact or MailingQueue are both examples. The current example is creating bulk custom fields - the actual row saves are fine here but if adding more than one field to an-already-large custom table then multiple column adds is slow whereas one sql action adding multiple indexes & columns (& one for log tables) is much better.
We talked about laying the ground work for this being a supported apiv4 action with the goal being that apiv4 would expose an action for any entities that have a bulkCreate action.
At this stage my scope is limited to cleaning up the CustomField.create function and adding a bulkCreate function that is tested & suitable to be exposed via apiv4 (but I'm not taking that next step at this stage so the contract can still change). Currently 2 BAO have bulkCreate functions. They relate to mailings and are suitable for bulk create although require some tweaks (passing keyed params rather than 0, 1 etc)https://lab.civicrm.org/dev/core/-/issues/1100Proposal to add a new hook_civicrm_alterExternUrl2020-05-30T01:02:26ZAndrei Mondocandreimondoc@gmail.comProposal to add a new hook_civicrm_alterExternUrlThere's been talks about deprecating all `extern` scripts in favour of CMS REST endpoints or use [CiviCRM's routing](https://lab.civicrm.org/dev/cloud-native/issues/16), and along the way helping other issues like CMS bootstrapping, base...There's been talks about deprecating all `extern` scripts in favour of CMS REST endpoints or use [CiviCRM's routing](https://lab.civicrm.org/dev/cloud-native/issues/16), and along the way helping other issues like CMS bootstrapping, base paths, and session management.
[Drupal 8](https://www.drupal.org/docs/8/api/restful-web-services-api) and [WordPress](https://developer.wordpress.org/rest-api/) offer the possibility of extending their REST endpoints, and it seems Joomla does so too although unofficially? ([REST API for Joomla!](https://extensions.joomla.org/extension/rest-api/) and [cAPI Core REST API for Joomla!](https://extensions.joomla.org/extension/capi-core-rest-api/))
This seems to me like a sensible way forward, hence my proposal to add a `hook_civicrm_alterExternUrl` something along the lines of:
``` php
// Create an event object.
$event = GenericHookEvent::create(array(
'type' => 'cxn', // replacing with ipn|extern|soap|pxIPN|etc.
'civiURL' => &$civiUrl,
'url' => rtrim($civiUrl, '/') . '/extern/cxn.php',
);
/**
* Allow filtering of extern URL.
*
* @since ...
*
* @param string $hook_name The dispatched hook name.
* @param object $hook_event The dispatched hook event object.
*/
Civi::service('dispatcher')->dispatch('hook_alterExternUrl', $event);
return $event->url;
```
I have completed the [REST endpoints integration for WordPress](https://github.com/civicrm/civicrm-wordpress/pull/160) and I remember someone (in Mattermost) mentioning they were/are doing the same for Drupal 8. In order to start testing and integrating those endpoints this hook would a good transition.
Any feedback is appreciated, thanks.5.23.0https://lab.civicrm.org/dev/core/-/issues/1101Feature request - Add a Public Group Title and Public Group Description field...2020-09-17T09:48:49Zjustinfreeman (Agileware)Feature request - Add a Public Group Title and Public Group Description fields to CiviCRM Group and display these fields on the public pages for subscribe, unsubscribe etc.Feature request - Add a Public Group Title and Public Group Description fields to CiviCRM Group and display these fields on the public pages for subscribe, unsubscribe etc.
Currently, Group Title and Group Description have dual uses:
1....Feature request - Add a Public Group Title and Public Group Description fields to CiviCRM Group and display these fields on the public pages for subscribe, unsubscribe etc.
Currently, Group Title and Group Description have dual uses:
1. Displayed in the CiviCRM back-end and used for internal reference only, AND
2. Displayed publicly on the Internet on public pages
The problem is that the internal title and description for a group is often not appropriate as a public title and description, often revealing targetting / collation information as to how the group is populated which can be potentially embarrassing or harmful to the organisation if revealed publicly.
This proposal is similar to the feature which has been added to Profiles to have an Profile Title (internal display only) and Public Profile Title (displayed on public pages).
Agileware Ref: CIVICRM-1269https://lab.civicrm.org/dev/core/-/issues/1104Make admin panels hookable2019-08-01T04:07:14ZyashodhaMake admin panels hookableMake it easy to show/hide items on administer screen.Make it easy to show/hide items on administer screen.5.17.0yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1106A mental health plan for search2020-04-05T08:07:41ZeileenA mental health plan for searchI've been thinking a lot about how to move forwards with search functionality of late. When I think about the sorts of bugs and regressions we were dealing with 2 years ago versus today there are a lot of areas of the code that were cons...I've been thinking a lot about how to move forwards with search functionality of late. When I think about the sorts of bugs and regressions we were dealing with 2 years ago versus today there are a lot of areas of the code that were constantly breaking or requiring changes 2 years ago that we now rarely touch. We have added barrage of unit tests & retrofitted sanity into the code & eventually reached the end of the line on the whackamole in a lot of areas. Not so much searches & reports....
Part of the problem is that we were late to the party getting searches and reports under unit testing - or at least some of the more obscure search functionality. But much more of the problem is the poor underlying code structure for searches and the in-built reports. In addition search builder and advanced search expose much more functionality than actually works well - creating a back door for new tricky functionality. Compounding this, the original search code had a lot of security holes in it which have sent us into various cycles of whackamole.
When we talk about search people want to
- be able to retrieve data
- take actions on that data
- create groups based on the data
In many cases they can use a report or some custom form to retrieve a group of contacts but then they can't take the actions they want on those contacts. In particular it's currently impossible to create a smart group or utilise our bank of actions without working off the search framework. The problem with getting away from our quickform search structure is that we have a lot of assets tied up with it and so creating a non-quickform search quickly runs into the fact that various actions cannot be accessed and the lift involved in getting past that is too much - so we wind up with 'yet another custom search' or another change to core to bad code.
I don't think we can break the situation where we are spending a tonne of sunk time on search functionality in the short-term. I think adding thises & thats to search & custom searches and reports will continue at least for another year. The [data processor extension](https://lab.civicrm.org/extensions/dataprocessor/tree/master) by @jaapjansma does a pretty good of retrofitting sanity onto the quickform search structure, but I think we should set a goal that in a year's time quickform search structure and BAO_Query object are out of active development and there is a viable alternative.
We already have a pretty good alternative for retrieving the data - apiv4. When you look at apiv4 explorer if 'feels like' all you need to turn that into a replacement for search builder is a 'create smart group function'
Many of the things that work badly in search builder already work well in the apiv4 explorer but it is missing the ability to leverage our 'action-bank'. Going down the apiv4-as-smart-groups path also sets us up to offer the ability to have custom apiv4 apis that can also create smart groups and leverage actions.
That was a pretty long intro but the point of this ticket was more to spell out a path that I think allows us to start chipping away at this and to divert some of our 'product maintenance effort' towards breaking the cycle. These are the steps I think need taking (not necessarily in this order). Any of the steps, but in particular 3 & 4 would be suitable as funded CT work & that would speed them up & this whole process considerably, but I think there are things we can be doing now towards the end result.
1) create the ability to programaticially create a smart group based on an apiv4 explorer 'get' action. I think this is actually not that tricky. We would need to define the format of the array saved to 'form_values' - something like ['module' => 'apiv4', 'entity' => 'x', 'where' => [], 'select' => [], 'orderBy => []]. Perhaps ->createSavedSearch() would be an action that can be taken from apiv4? We would need to hobble UI functionality related to the smart group that might not work - ie suppress actions that don't work & the 'edit smart group search criteria' link in the group settings page - we can be a bit clunky on this in this step since it would not be exposed unless a developer exposed it. I feel like this step is pretty manageable & could be done in the next couple of releases. Since I think we should start on this I have created https://lab.civicrm.org/dev/core/issues/1107 for specific discussion on this issue
2) consider extending the above to cover other api actions - we talked about the idea of it being possible to create a smart group off a report. This is mostly a conversation about what sort of api an extension needs to create for it to be available for a saved search & what metadata is required. It would also involved creating a protocol to configure a url for 'edit smart group search criteria'. This could be done in conjunction with making smart groups possible from extended reports via an apiv4 action as experimental functionality. I don't see this as ever being a feature in core reports as I hope that by the time we've matured all of this we'll be figuring out how to leave them behind, but it seems like a way of opening up the transition process to leaping by extension.
3) tackle the search actions - figure out how to make them less tied to the QF architecture they sit on - could they be apis? Or just a much more sensible php interface? This is probably the deeper dive of this work and it might be a big lift but I also feel it's the sort of thing that we routinely chip away at in the product maintenance sphere & we could do that here. I suspect @mattwire has more idea than I do of that code at the moment...
4) Copy & adapt (or extract & componentise) the api v4 explorer to be search oriented. Mostly tie the search part of the interface with an action selector. Alternatively look at something like https://querybuilder.js.org/ - I feel like this piece is something CT should do as a dedicated chunk of work & which could be done at any point in the process by soliciting funding.
@totten @mattwire @colemanw @seamuslee @jitendra @monish.deb @pradeep @yashodha @bgm @lcdweb @johntwyman @mfb @pfigel @daved @justinfreeman https://lab.civicrm.org/dev/core/-/issues/1107create the ability to programaticially create a smart group based on an apiv4...2024-01-16T05:03:24Zeileencreate the ability to programaticially create a smart group based on an apiv4 explorer 'get' actionSub issue of https://lab.civicrm.org/dev/core/issues/1106Sub issue of https://lab.civicrm.org/dev/core/issues/1106https://lab.civicrm.org/dev/core/-/issues/1111Move upload_max_filesize warning to system check2022-11-20T21:49:18ZAndie HuntMove upload_max_filesize warning to system checkCurrently the `CRM_Utils_Number::formatUnitSize()` function [does a check](https://github.com/civicrm/civicrm-core/blob/358a1864ba3c5a3fc3ff65f03b3db045ea2199a8/CRM/Utils/Number.php#L107-L118) for whether the `upload_max_filesize` in PHP...Currently the `CRM_Utils_Number::formatUnitSize()` function [does a check](https://github.com/civicrm/civicrm-core/blob/358a1864ba3c5a3fc3ff65f03b3db045ea2199a8/CRM/Utils/Number.php#L107-L118) for whether the `upload_max_filesize` in PHP is smaller than the maximum upload size in your site settings.
1. The message calls the php.ini setting "upload_max_size", which will lead people astray.
2. This really should be a system check that you see well before you are about to upload something.
There's a similar check in there if `post_max_size` is smaller than `upload_max_filesize`. This should also move to the system check.https://lab.civicrm.org/dev/core/-/issues/1112Require less permission for contribution page management2023-04-06T05:03:35ZJKingsnorthRequire less permission for contribution page managementCurrently a user needs a very high level of permissions in order to manage contribution pages on the website; contrary to the approach used in CiviEvent.
In order to manage events in CiviCRM, the permission 'access CiviEvent' is used.
...Currently a user needs a very high level of permissions in order to manage contribution pages on the website; contrary to the approach used in CiviEvent.
In order to manage events in CiviCRM, the permission 'access CiviEvent' is used.
In order to manage contribution pages in CiviCRM, the permissions access CiviContribute AND administer CiviCRM are required.
I suggest we either:
* Make the permission just access CiviContribute (and add this to the admin/price paths)
* Add a new permission for 'manage contribution pages' with access to the civicrm/admin/contribute* paths (and the admin/price paths)
The first option will make CiviContribute behave more like CiviEvent - giving access to create the contribution pages, but not all the admin functions like managing custom fields and profiles.https://lab.civicrm.org/dev/core/-/issues/1120Export help info does not match code2019-07-16T20:03:55ZeileenExport help info does not match codeIn the export screen we see that the postal greeting or addressee greeting can change if more than 2 contacts are merged
![Screen_Shot_2019-07-16_at_9.32.04_AM](/uploads/871c946c283258e8e4c6e68bae72e1d7/Screen_Shot_2019-07-16_at_9.32.04...In the export screen we see that the postal greeting or addressee greeting can change if more than 2 contacts are merged
![Screen_Shot_2019-07-16_at_9.32.04_AM](/uploads/871c946c283258e8e4c6e68bae72e1d7/Screen_Shot_2019-07-16_at_9.32.04_AM.png)
In the code the rules are that 2 or more contacts being merged use the rules (ie if contacts are merged then use the rules). (There is some mickey mouse separate handling where it seems the code attempts to only use the 'other' logic for 2 or more
I can't see why you wouldn't use the merge string for any merges - which would simplify the code a lot too
@lcdweb @colemanw thoughts - can we tweak the above to '(when merging contacts to one row)' & clean up the code to just do that (without extra code that with more or less success attempts to do ? something ? when there are only 2 & use the merge string where there is more than 2
I *think* the intent might have been that you could choose different behaviour for many vs just 2 but in practice you can't actually select that in the UI5.17.0https://lab.civicrm.org/dev/core/-/issues/1121Activity Export: Fields with the value of 0 are exported as empty2022-12-01T05:03:38ZReece Activity Export: Fields with the value of 0 are exported as emptyHi all,
When following the below steps, any fields that have the value of zero are exported into the CSV as empty cells.
Steps to reproduce (must have an Activity that has a field with the value of zero in it):
1. Perform an Activity ...Hi all,
When following the below steps, any fields that have the value of zero are exported into the CSV as empty cells.
Steps to reproduce (must have an Activity that has a field with the value of zero in it):
1. Perform an Activity Search
2. Select Activities (that contain either the value being zero or not)
3. Actions -> Export Activities
4. Select fields for Export
5. Fields:
* The field that has the value of zero (or other)
* Can also add the contact name to lookup in the UI easily..
6. Export
[Line 346 of Export.php on Master](https://github.com/civicrm/civicrm-core/blob/master/CRM/Export/BAO/Export.php#L346) is only checking against `empty($value)` whereas it should either check if the value `is_numeric($value)` aswell, or swap the empty function to `CRM_Utils_System::isNull($value)` which I believe would resolve this too.
Cheers,
Reecehttps://lab.civicrm.org/dev/core/-/issues/1143Field Names now Reserved Words in MySQL82020-01-09T00:12:27ZJoeMurrayField Names now Reserved Words in MySQL8The new reserved words includes two which we use as field names:
- description
- grouping
While our code to create the fields will work because it uses ` to quote them as identifiers, we'll likely want to either change these names or go...The new reserved words includes two which we use as field names:
- description
- grouping
While our code to create the fields will work because it uses ` to quote them as identifiers, we'll likely want to either change these names or go through the code base and add the backtick quotes everywhere. Either approach will still mean that extensions will have to make changes to become MySQL 8.0 compatible. Using backticks will mean that extensions can continue to run on earlier versions of MySQL, and is likely the better approach. We don't want to force all extension maintainers to change references to these fields all at once when only a small number of installations will be using MySQL 8.0.
Decision: use backticks.5.23.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/1178Address blocks have both a Billing location type and a Billing checkbox which...2021-08-12T04:40:37Zjustinfreeman (Agileware)Address blocks have both a Billing location type and a Billing checkbox which has been confusing CiviCRM users and developers for yearsAddress blocks have both a Billing location type and a Billing checkbox which has been confusing CiviCRM users **and developers** for years.
Let's remove the "Billing location for this contact" checkbox from the address block and just us...Address blocks have both a Billing location type and a Billing checkbox which has been confusing CiviCRM users **and developers** for years.
Let's remove the "Billing location for this contact" checkbox from the address block and just use the Location type, Billing.
Creating this Lab issue to see if anyone is also interested on finally solving this problem.
Discussions on this topic go back to 2009. In 2016 we had an acknowledgement that this should be sorted out, https://issues.civicrm.org/jira/browse/CRM-17783
**Coleman Watts added a comment - 2016-01-20 18:58**
> I agree, the location type and the checkbox need to be resolved into one.
> Is this something you can work on a bit?
Purpose of "Billing location for this contact" checkbox
https://forum.civicrm.org/index.php%3Ftopic=11447.0.html
Why is there a Location Type AND a Checkbox for billing addresses?
https://civicrm.stackexchange.com/questions/8664/why-is-there-a-location-type-and-a-checkbox-for-billing-addresses
CRM-17783 Using Registration form leads to two billing Addresses
https://issues.civicrm.org/jira/browse/CRM-17783
Agileware ref: CIVICRM-1289
![Annotation_2019-08-12_163341](/uploads/3a574b38ee556c6daceaa295898aa871/Annotation_2019-08-12_163341.png)https://lab.civicrm.org/dev/core/-/issues/1180Extend api action 'calc' of 'membership_status' with custom date2019-09-17T14:13:04ZwdecraeneExtend api action 'calc' of 'membership_status' with custom dateAt this moment `civicrm_api3_membership_status_calc` only accepts the parameter `membership_id`. The function `CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate` used for calculation gets 'today' as hardcoded param.
Patch attac...At this moment `civicrm_api3_membership_status_calc` only accepts the parameter `membership_id`. The function `CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate` used for calculation gets 'today' as hardcoded param.
Patch attached extends this call with an optional status_date.
[membership_status_calc_optional_status_date.patch](/uploads/1a26c367ed91787927253d693fdf3ffb/membership_status_calc_optional_status_date.patch)https://lab.civicrm.org/dev/core/-/issues/1208Show activities associated with contributions on contribution view screen2022-12-09T05:03:28ZyashodhaShow activities associated with contributions on contribution view screenWe store activities associated with contributions but do NOT seem to expose this anywhere in UI.
![contribution](/uploads/56a6b2f611a6a7c57fe6aa15e25d07d2/contribution.png)
I reckon it will be quite useful to show associated activties o...We store activities associated with contributions but do NOT seem to expose this anywhere in UI.
![contribution](/uploads/56a6b2f611a6a7c57fe6aa15e25d07d2/contribution.png)
I reckon it will be quite useful to show associated activties on contribution screen similar to how we show associated payments on membership screen.
![contri_act](/uploads/859771357e3b03f464705718d7ddb4a5/contri_act.png)
This could give us helpful information. The same could then be extended to other components as well - show participant related activities on participant view, etc.yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1209Replace `civicrm-packages.git` with micro repos and composer-downloads-plugin2022-12-11T05:03:26ZtottenReplace `civicrm-packages.git` with micro repos and composer-downloads-plugin## Background
CiviCRM stores a number of dependencies in the `civicrm-packages.git` repo. This has allowed those dependencies to retain their historical file-loading-mechanisms/file-organization, and it has accommodated (for good and i...## Background
CiviCRM stores a number of dependencies in the `civicrm-packages.git` repo. This has allowed those dependencies to retain their historical file-loading-mechanisms/file-organization, and it has accommodated (for good and ill) adhoc forking.
However, it also adds special steps during day-to-day build/development tasks -- e.g. when creating a clean local build from source, when switching between versions, when bisecting to track a regression, when tagging/branching releases, or when running `distmaker`.
A desirable end-state would be to make `civicrm-packages.git` obsolete -- by updating `composer.json` to `require` equivalent dependencies. This is a known albeit cumbersome process:
* (1) determine the old version of code;
* (2) determine which (if any) patches are applied;
* (3) load an equivalent package from `composer.json` (`requires:`);
* (4) validate/port/discard any patches
* (5) find and update anything that relies on the old location;
* (6) remove the old code from `civicrm-packages.git`
* (7) test relevant use-cases; and
* (8) coordinate testing/merging of two interdependent PRs (`civicrm-core.git` + `civicrm-packages.git`)
Because the process is somewhat cumbersome and brings risks, many packages are still waiting around for migration.
## Goal
Enable `composer` to download `packages` -- simplifying some dev tasks (triage/bisection/git-pull) and simplifying the Civi-D8 install mechanics (s.t. it's easier to have a clean build). Do this *by default*, without requiring any special configuration or add-ons. Tangentially, make incremental progress toward de-forking `packages`.
## Approach
* __Split `civicrm-packages.git`__. Copy each subdir (e.g. `civicrm-packages.git/foobar`) into a new, separate git repo (e.g. `https://lab.civicrm.org/dev/packages-foobar.git`). In each repo, add a README to link back to some docs about `packages` maintenance. Use a quickie script to automate the split.
* __Update `civicrm-core.git:composer.json`__. Under [extra.downloads](https://github.com/civicrm/composer-downloads-plugin), add a step to download/extract `packages/foobar`. (*The download URL should be pinned to a specific tag/commit for `packages-foobar.git`.)
* Update `civibuild`, `gitify`, etc to **not** clone `civicrm-packages.git`. `composer` can now download that stuff.
## Benefits
* When you get a copy of `civicrm-core.git` and run `composer install`, it downloads all the `packages`.
* When you download `civicrm-core` as a dependency (as with Civi-D8), it will put `packages` in their normal spot (`$civicrm_root/packages`) without requiring any special top-level configuration.
* If you're upgrading/downgrading/bisecting/triaging, the steps for switching code are simplified...
* Old: `git checkout <foo> && composer install && cd packages && git checkout <foo> && cd ..`.
* New: `git checkout <foo> && composer install`
* When bisecting (trying out commits from the alpha/beta stages), you will get the mix of dependencies appropriate to the *specific revision*, rather than an approximation from some whole-numbered release.
* When switching versions, it will only download packages if they have changed - and such downloads will be small/focused. (And if you juggle several builds/versions, `composer` will cache the downloads.)
* The de-forking process becomes easier. Before, steps 6+8 required you to juggle interdependent patches in two repos (which doesn't jive well with test/review processes). Now, de-forking can be done atomically within `civicrm-core.git:composer.json`. (To remove the forked package, remove it from `extra.downloads`. To add the canonical package, add it to `requires`.) The test/review process should feel more normal.
## Caveats
* If you actually intend to modify a forked copy of a dependency, that will become more cumbersome.
* The new process for patching a forked dependency (such as PEAR `Mail`) would be:
* Do a pull request for `packages-mail.git` (updating the forked code)
* Make a tag in `packages-mail.git` (or note the specific commit)
* Do a pull request for `civircm-core.git:composer.json` (updating `extra.downloads` to use the new tag/commit)
* *This doesn't bother me too much* - in practice, we don't change `packages` often. Also, it's not bad to tilt the balance away from "easier to stay forked" and toward "easier to de-fork".
* Overall, this issue describes an incremental change. It makes some things *better*, but it doesn't make any one thing *great*.
## Decision-making
I'm having trouble qualifying how much buy-in to seek/build for this -- because the proposal is sort of a contradiction:
* It's a *major change* which puts a bunch of files in new homes and affects developer workflows
* It's a *trivial change* for which we can demonstrate (via `diff -r`) that on-disk file-content is the same before+after.
* It's an *improvement* that should simplify various developer tasks
* It's *not an improvement* because users wind up with the same code/functionality/features/performance/bugs.
* For custom build systems, it should be a non-issue (because you're already required to run `composer install`).
* For custom build systems, it could be a breaking change (because you need to *not* checkout `civicrm-packages.git`)https://lab.civicrm.org/dev/core/-/issues/1211Add option to search by date not set2023-01-16T05:03:34ZyashodhaAdd option to search by date not setCurrently in CiviCRM, for date fields you can either search by date range or for some fields explictly there is an option to filter by NULL/NOT NULL.
![contrib_search](/uploads/f6d1e0474fb4fcceefac4f0fdd5d58e2/contrib_search.png)
The op...Currently in CiviCRM, for date fields you can either search by date range or for some fields explictly there is an option to filter by NULL/NOT NULL.
![contrib_search](/uploads/f6d1e0474fb4fcceefac4f0fdd5d58e2/contrib_search.png)
The option to filter by NULL/NOT NULL should be available for all date fields in the filter drop down fields.
I have already added this option in reports and it looks like it could helpful for other date search screens as well.![contri_date+null](/uploads/dd4cfc311620ae952ab237e4abee7767/contri_date+null.png)yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1214Suggest to add a system status check that checks if trigger/view definer is t...2023-06-06T05:03:18ZDaveDSuggest to add a system status check that checks if trigger/view definer is the same db user as in civicrm_settings.phpIt comes up semi-regularly for people who are moving sites around or setting up staging/live where the trigger/view definer is the db user on the other site, and so errors happen. A system status check could point this out and point you ...It comes up semi-regularly for people who are moving sites around or setting up staging/live where the trigger/view definer is the db user on the other site, and so errors happen. A system status check could point this out and point you to the link to rebuild triggers. I don't think it should do it automatically because there might be a legit reason you purposely made them different, although that does seem unlikely for a civi site.
I can add this to my rainy-day todo list. It's just not going to be at the top.https://lab.civicrm.org/dev/core/-/issues/1228Contribution Receive date not required in offline Event Registration2022-12-10T05:03:20Zmagnolia61Contribution Receive date not required in offline Event RegistrationWhen manually adding a contribution the receive date is a required field.<br><br>
This is not the case in the Event Registration Form while entering a new registration with a contribution.
I believe for consistency it would be better to ...When manually adding a contribution the receive date is a required field.<br><br>
This is not the case in the Event Registration Form while entering a new registration with a contribution.
I believe for consistency it would be better to also have it be required at this form.<br><br>
Not sure how to code it though. Would this just be as easy as changing the tpl and marking the field required?
<br><br>
This is probably related: https://github.com/civicrm/civicrm-core/pull/14460https://lab.civicrm.org/dev/core/-/issues/1229Dedicated permission for automatic messages2022-12-10T05:03:19ZmarcelklehrDedicated permission for automatic messagesI would like to be able to selectively grant access to the automated messages of CiviMail, so that the council of my organisation can edit these on their own, without having to grant them full admin privs.I would like to be able to selectively grant access to the automated messages of CiviMail, so that the council of my organisation can edit these on their own, without having to grant them full admin privs.https://lab.civicrm.org/dev/core/-/issues/1230Api support for deduping2022-12-28T05:03:26ZeileenApi support for dedupingI'm somewhat belatedly raising this as a way to track api support for deduping.
The goal is to facilitate a LeXIM approach to the dedupe screen. LeXIM is leap by extension, iterate by month. The monthly iteration part is necessary to ex...I'm somewhat belatedly raising this as a way to track api support for deduping.
The goal is to facilitate a LeXIM approach to the dedupe screen. LeXIM is leap by extension, iterate by month. The monthly iteration part is necessary to expose relevant core workings via the api so an extension can leverage it. Generally this also includes improving test cover & code cleanup. Ideally we will also migrate the core form to use api end points.
We've already added some api to support this. In the course of trying to leverage this via an [angular extension](https://github.com/eileenmcnaughton/org.wikimedia.dedupetools) I've hit a bunch of gaps. Many are already merged into 5.18 or earlier. Note that the dedupetools is not necessarily going to be the 'preferred' dedupe form but the apis needed for that extension are
probably the same as would be needed for any other api-based interface.
Outstanding as of now are
**Open up Permissions for user with merge duplicate contacts**
Since the js api relies on api permissions these need to be suitably open
https://github.com/civicrm/civicrm-core/pull/15187
https://github.com/civicrm/civicrm-core/pull/15188
**Allow refreshing the search results**
This is similar to the 'refresh duplicates' in the existing screen (if we merge this I'll add this functionality to the deduper)
https://github.com/civicrm/civicrm-core/pull/15196
**Performance**
For batch deduping geocoding every address is a real problem. They are already geocoded & we copy them in their entirety. I'm pretty sure my changes to better support extension geocoding accidentally caused geocoding to start happening
https://github.com/civicrm/civicrm-core/pull/15154
**Tangental cleanup**
https://github.com/civicrm/civicrm-core/pull/15184
https://github.com/civicrm/civicrm-core/pull/15156
**Still to do**
1) - Support removing a row from the dedupe cache. The use case here is that someone goes throw a set of dedupe results and takes action on a bunch and marks a bunch 'ask me later'. At the end if they want to do a bulk action (e.g mark the remaining ones as non-duplicates) they will also mark the ones they excluded - so by facilitating deletion from a result set we allow them to better act on it.
We already have Dedupe.delete to remove a row but we would ideally support the calculation of the cachekey - this might look like Dedupe.delete api optionally accepting the params to calculate the cacheKey or an new api fn - Dedupe.uncache or similar.
2) Enhance Dedupe.getstatisics to return a count regardless or whether a dupe has been attempted. Currently if you call Dedupe.getstatisics after a dedupe has run it will tell how many were merged & how many were skipped. Before a dedupe is done, however, it does not return a count of the number of rows cached to be deduped.
3) add an api to support a bulk mark duplicates of result set. There is a prototype for this in [dedupe tools](https://github.com/eileenmcnaughton/org.wikimedia.dedupetools) but unlike the other api in this extension it is not upstreamed as yet
4) Consider porting to apiv4 - think about inputs & outputs we would change.https://lab.civicrm.org/dev/core/-/issues/1253Pass through mailing id to alterMailContent hook2023-02-18T05:03:17ZAndrew WestPass through mailing id to alterMailContent hookIt's useful to have access to the mailing ID in this hook if you're adding dynamic content.
PR: https://github.com/civicrm/civicrm-core/pull/15306It's useful to have access to the mailing ID in this hook if you're adding dynamic content.
PR: https://github.com/civicrm/civicrm-core/pull/15306https://lab.civicrm.org/dev/core/-/issues/1256Improve error handling to always throw exceptions and never abend2024-01-27T05:03:27ZAndrew WestImprove error handling to always throw exceptions and never abendWe're interested in funding a fix to ensure errors are always thrown as exceptions, as mentioned here: https://issues.civicrm.org/jira/browse/CRM-11193 and here: https://lab.civicrm.org/dev/core/issues/395 and here: https://lab.civicrm.o...We're interested in funding a fix to ensure errors are always thrown as exceptions, as mentioned here: https://issues.civicrm.org/jira/browse/CRM-11193 and here: https://lab.civicrm.org/dev/core/issues/395 and here: https://lab.civicrm.org/dev/core/issues/749
If someone could tag this with 'paid-issue-queue' I'd appreciate it.
Our particular interests are:
* catching errors when generating groups for mailings. Currently if these fail a mailing can cheerily sail on without the correct exclusion group
* catching smarty errors in mailings. These currently fail silently and can kill the scheduled jobs list
It seems like both of these are covered by CRM-11193.
I'm not promising we can fund the whole thing, but we can at least pay for time spent investigating what needs to be done.https://lab.civicrm.org/dev/core/-/issues/1257Make Relationship Description searchable (Paid Feature2019-10-16T13:44:06Zfabian_SYSTOPIAMake Relationship Description searchable (Paid Feature**Overview**
Relationships provide a "description" field which is nicely displayed in the relationship tab of a contact. However, it is currently not possible to search for those descriptions using any regular CiviCRM search.
**Scope**...**Overview**
Relationships provide a "description" field which is nicely displayed in the relationship tab of a contact. However, it is currently not possible to search for those descriptions using any regular CiviCRM search.
**Scope**
User should have the possibility to search for contacts with certain descriptions in the relationship. The advanced search should offer a possibility to search for relationship descriptions.
**Note**
I originally posted this on CiviCRM's Jira but it probably git lost in migration so I am re-posting it here. We have a customer who may fund this so it would be great to get an estimate from the core team. We would be able to test the improvement.https://lab.civicrm.org/dev/core/-/issues/1260Reorganize Misc settings page2022-12-18T05:03:17Zm robimorgan@palantetech.coopReorganize Misc settings pageAs part of a larger effort to make the administrative settings forms more user-friendly, we're proposing some changes to what is currently the Administer > Misc settings page.
Propose changing the form name to: System Options (Undelete...As part of a larger effort to make the administrative settings forms more user-friendly, we're proposing some changes to what is currently the Administer > Misc settings page.
Propose changing the form name to: System Options (Undelete, PDFs, Limits, Logging, captcha, etc.)
Some settings that appear on this page are better classified as "Display Preferences" and should be moved to there:
* Display "empowered by CiviCRM"
* Size of "Recent Items" stack
* Recent Items Providers
* Allow alerts to auto-dismiss?
Some settings on the Display Preferences page are better classified as "System Options" and should be moved from there to here:
* Wysiwig Editor
* Enable popup forms?
Larger structural settings should be in a separate section at the bottom (they are heavier/higher-stakes and less likely to be altered) with a header such as "System Configuration" and maybe a red box. In general, the settings on the form could be ordered by most-to-least lightweight/reversible, with settings that only affect admins at the top.
* PrevNext Cache
* Accept profile submissions from external sites
* Logging (+ add some clarifying text)
* Contact Trash and Undelete
@tommybobohttps://lab.civicrm.org/dev/core/-/issues/1261New Activity Preferences page2022-12-18T05:03:16Zm robimorgan@palantetech.coopNew Activity Preferences pageIn an effort to reorganize the administrative settings forms (see #1260) we propose moving some settings from the Administer > Display Preferences page and the Misc. settings page to a separate preferences page specifically for Activity ...In an effort to reorganize the administrative settings forms (see #1260) we propose moving some settings from the Administer > Display Preferences page and the Misc. settings page to a separate preferences page specifically for Activity settings.
Settings to appear on this page include:
* Notify Activity Assignees
* Do not notify assignees for
* Include Ical Invite to Activity Assignees
* Preserve activity filters as a user preference
* Record generated letters (note: use "Print/merge document" instead of "letter" for clarity)
@tommybobohttps://lab.civicrm.org/dev/core/-/issues/1265if payment is Failed, Membership should be set to Cancelled instead of Expired?2021-09-30T04:04:16Zjitendraif payment is Failed, Membership should be set to Cancelled instead of Expired?Currently, If a contribution related to membership is failed, it is set to Expired. I think it makes more sense to set the status to Cancelled? To replicate -
- Create a backend pending membership with contribution status = pending.
- E...Currently, If a contribution related to membership is failed, it is set to Expired. I think it makes more sense to set the status to Cancelled? To replicate -
- Create a backend pending membership with contribution status = pending.
- Edit the related contribution and update the status to Failed. The membership is set to "Expired".jitendrajitendrahttps://lab.civicrm.org/dev/core/-/issues/1278Update Sending Emails section of configuration checklist2020-11-11T16:30:50ZfkohrtUpdate Sending Emails section of configuration checklistThe configuration checklist provides a list of items that an administrator/implementer likely goes through in order while launching CiviCRM for the first time.
Right now, the Sending Emails section contains items in the following order:...The configuration checklist provides a list of items that an administrator/implementer likely goes through in order while launching CiviCRM for the first time.
Right now, the Sending Emails section contains items in the following order:
- Outbound Email
- From Email Addresses
This, however, does not make much sense as configuring Outbound Email fails if no From Email Address is configured.
I suggest reversing their order so administrators run less likely into [this](https://github.com/civicrm/civicrm-core/blob/53e64ff94c36f8895ef8af55001767aae4e1eb8e/CRM/Admin/Form/Setting/Smtp.php#L109) error.
PR: https://github.com/civicrm/civicrm-core/pull/15359https://lab.civicrm.org/dev/core/-/issues/1298Add Email and Phone as Entities that Custom Fields can be assigned to2022-12-23T05:03:31ZguyiacAdd Email and Phone as Entities that Custom Fields can be assigned toPatrick working on this at BCN SprintPatrick working on this at BCN SprintPatrick Figelpfigel@greenpeace.orgPatrick Figelpfigel@greenpeace.orghttps://lab.civicrm.org/dev/core/-/issues/1307Add tracking table for import jobs2022-06-10T09:06:03ZeileenAdd tracking table for import jobsA current blocker to refactoring the import jobs to use queue processes / non-timeout UI methods is persistence of output data.
We discussed this in Barcelona and came up with the following proposal
1) create a new table civicrm_user_j...A current blocker to refactoring the import jobs to use queue processes / non-timeout UI methods is persistence of output data.
We discussed this in Barcelona and came up with the following proposal
1) create a new table civicrm_user_job with the fields
- contact_id (or created_id?)
- job_identifier (or name?) - we probably would need this to be unique but the BAO could handle appending to it if it is not.
- start_timestamp
- end_timestamp
- job_hash - used for file naming
2) files created as a result of the job could have a standard naming convention - e.g
import_{job_hash}_validation_errors.csv
import_{job_hash}_duplicates.csv
3) We would need a cleanup job which would also remove the files - e.g more than one week old
4) The UserJob BAO would obviously run pre & post hooks - allowing tracking by extensions
5) Permissioning of file retrieval can be via Attachment api - Tim thinks we know how that works but he is wrong.
6) When viewing the results of the import this creates options for us to potentially present a user with their imports (plural) results & for them to choose which they want. (Perhaps exposing the job_idenfier field to them would help here?
@totten @pfigel @seamuslee5.51.0https://lab.civicrm.org/dev/core/-/issues/1308Refactor inefficient ID generation (creditnote_id)2023-02-13T05:03:22ZBjörn EndresRefactor inefficient ID generation (creditnote_id)In a discussion in the financial working group in the Barcelona 2019 sprint there was the idea to refactor the inefficient generation of the ``creditnote_id`` (see links below).
The general idea is to create a new hook to enable generat...In a discussion in the financial working group in the Barcelona 2019 sprint there was the idea to refactor the inefficient generation of the ``creditnote_id`` (see links below).
The general idea is to create a new hook to enable generation of various identifiers, in this instance ``creditnote_id`` and ``invoice_id``. In the future, potentially even more (e.g. ``contact_external_identifier`` or ``campaign_external_identifier``)
I suggest the following signature for the new hook:
```
/**
* This hook allows custom implementation for the generation
* of various identifiers like the invoice_id or the
* creditnote_id
*
* @param string $identifier the identifier to be used, can be manipulated
* @param string $type currently one of 'invoice_id', 'creditnote_id'
* @param array $context list of key-indexed context data,
* @param bool $can_be_null true iff the resulting IDs may be NULL
* @return mixed
*/
public static function generateIdentifier(&$identifier, $type, $context, $can_be_null) {
return self::singleton()->invoke(['identifier', 'type', 'context', 'can_be_null'], $identifier, $type, $context, $can_be_null, self::$_nullObject, self::$_nullObject, 'civicrm_generateIdentifier');
}
```
Related PR's:
* https://github.com/civicrm/civicrm-core/pull/11110 - closed because it is stale
* https://github.com/civicrm/civicrm-core/pull/15232 - merged
* https://github.com/civicrm/civicrm-core/pull/15235
* https://github.com/civicrm/civicrm-core/pull/16462
Related issues:
* https://issues.civicrm.org/jira/browse/CRM-21289
* dev/financial#84https://lab.civicrm.org/dev/core/-/issues/1311Help bubble on directories/resource url pages has some hidden diagnostic powers2023-04-15T05:03:32ZDaveDHelp bubble on directories/resource url pages has some hidden diagnostic powersThere's a help icon in the intro section on both the administer - system settings - directories and resource urls pages. It pops up a box that tells you what civi thinks things like `[civicrm.root]` evaluate to. This can be very helpful ...There's a help icon in the intro section on both the administer - system settings - directories and resource urls pages. It pops up a box that tells you what civi thinks things like `[civicrm.root]` evaluate to. This can be very helpful for diagnostic use, but there's nothing suggesting that the help icon has those powers.
![screenshot](/uploads/f972af49f9cc6115f1c9ed0a00e1c194/screenshot.gif)
I'm thinking it might be more obvious as a button somewhere lower down in body of the page, called something like "Explain shortcodes". Quick mockup:
![mockup](/uploads/819eb9783b4722ba9372cca177a48544/mockup.gif)
Thoughts?https://lab.civicrm.org/dev/core/-/issues/1315Ensure exceptions / failures are visible to site admins2023-04-13T22:43:06ZxurizaemonEnsure exceptions / failures are visible to site adminsExample use case: including `<style>.foo { color: red }</style>` in a CiviCRM mailing template can cause the scheduled reminders action to fail with a fatal error (#58, [PR#15436 on Github](https://github.com/civicrm/civicrm-core/pull/15...Example use case: including `<style>.foo { color: red }</style>` in a CiviCRM mailing template can cause the scheduled reminders action to fail with a fatal error (#58, [PR#15436 on Github](https://github.com/civicrm/civicrm-core/pull/15436)).
If #1256 is implemented then Smarty should throw an exception instead. Once that's the case, CiviCRM can trap the exceptions and record them in some central log (akin to Drupal dblog), and from there we can show a status notification to site admins which informs them of the fact that some component may not be functioning as expected.
This is useful because it closes the loop from problems like "anonymous user could not complete contribution" or "users are no longer getting membership reminders after theme updates" and some actionable response which starts with "site admin knows there's a problem".
I don't see this on existing issue lists, but please point me in the right direction if there is such a thing.
We don't need #1256 resolved to add this improvement.https://lab.civicrm.org/dev/core/-/issues/1320Workflow templates - Include displayname in subject2019-10-26T20:33:11Zmagnolia61Workflow templates - Include displayname in subjectMany email providers group emails with the same subject which leads to time-consuming processes for many organisations, and many additional unnecessary clicks.
Some system workflow template subjects include the display name.
Also it mak...Many email providers group emails with the same subject which leads to time-consuming processes for many organisations, and many additional unnecessary clicks.
Some system workflow template subjects include the display name.
Also it makes the email more personal as it is clear who it is addressed to.
This is proven to be beneficial for open-rates of transactional mails.
The messages will be upgraded in 5.20alpha1 by #15491
https://github.com/civicrm/civicrm-core/pull/155135.20.0magnolia61magnolia61https://lab.civicrm.org/dev/core/-/issues/1321group.get API (v3- but lets fix for v4) fails to find groups of one group_typ...2023-08-04T20:49:54ZRichgroup.get API (v3- but lets fix for v4) fails to find groups of one group_type if group has multiple typesWe used (5.15) to be able to filter for mailing groups with the API and now we can't. I'm not sure when this came in.
e.g. on a buildkit at 58e7f004e2
```
cv api Group.get return='id,title,group_type'
```
Returns
```
{
"is_error":...We used (5.15) to be able to filter for mailing groups with the API and now we can't. I'm not sure when this came in.
e.g. on a buildkit at 58e7f004e2
```
cv api Group.get return='id,title,group_type'
```
Returns
```
{
"is_error": 0,
"version": 3,
"count": 4,
"values": {
"1": {
"id": "1",
"title": "Administrators",
"group_type": [
"1"
]
},
"2": {
"id": "2",
"title": "Newsletter Subscribers",
"group_type": [
"1",
"2"
]
},
"3": {
"id": "3",
"title": "Summer Program Volunteers",
"group_type": [
"1",
"2"
]
},
"4": {
"id": "4",
"title": "Advisory Board",
"group_type": [
"1",
"2"
]
}
}
}
```
But
```
cv api Group.get return='id,title,group_type' group_type='Mailing List'
cv api Group.get return='id,title,group_type' group_type=2
```
returns none.
<del>On 5.15 Mailing groups are returned properly.</del>https://lab.civicrm.org/dev/core/-/issues/2372Prevent double clicking submit button2021-03-21T21:41:08Zahed_compucorpPrevent double clicking submit buttonOverview
----------------------------------------
A typical problem with HTML forms that if you click fast enough, you can submit the form twice - or more, mostly if the server response was slow. CiviCRM is no exception.
Reproduction st...Overview
----------------------------------------
A typical problem with HTML forms that if you click fast enough, you can submit the form twice - or more, mostly if the server response was slow. CiviCRM is no exception.
Reproduction steps
----------------------------------------
- Any page that has a standard form - without Ajax. (e.g. Find Contributions or New Contribution or Some of the result actions).
- Click submit button fast enough.
![2021-02-08_16-26](/uploads/4b85a3b6e4b4fd659955b4e61ab267d7/2021-02-08_16-26.png)
Current behaviour
----------------------------------------
Find Contributions
![Peek_2021-02-08_16-06](/uploads/f552cc398264ba3ffc28de6eee7a1ea7/Peek_2021-02-08_16-06.gif)
New Contribution
![Peek_2021-02-08_16-10](/uploads/fe4c0118c1cba067fab6192c9c78000c/Peek_2021-02-08_16-10.gif)
Send Invoice - Search Action
Will send multiple emails.
![Peek_2021-02-08_16-40](/uploads/7020983f5986408972ea564f53f14e48/Peek_2021-02-08_16-40.gif)
Expected behaviour
----------------------------------------
Disable button during submission. Maybe something like Record Contribution (Ajax form Using the jQuery BlockUI Plugin)
![Peek_2021-02-08_16-14](/uploads/24c71d97550650e78b6629e249f9df76/Peek_2021-02-08_16-14.gif)
Any thoughts on this?
PR: https://github.com/civicrm/civicrm-core/pull/196105.36.0Monish DebMonish Debhttps://lab.civicrm.org/dev/core/-/issues/1329Too many dead people in sample data2019-11-27T02:16:43Zjustinfreeman (Agileware)Too many dead people in sample dataCiviCRM sample data contains too many dead people (Contact, Individual, Deceased = True) - there's a total of 27 dead contacts. Can we bring these people back to life please?
The number of dead people that you actually want in your CRM ...CiviCRM sample data contains too many dead people (Contact, Individual, Deceased = True) - there's a total of 27 dead contacts. Can we bring these people back to life please?
The number of dead people that you actually want in your CRM data should be a very small percentage, unfortunately this state of being seems to be over-represented in the sample data.
Let's breathe some life back into the sample data!
Agileware Ref: CIVICRM-13775.20.0https://lab.civicrm.org/dev/core/-/issues/1344Replace complex logic in email templates with simple logic on billing name an...2019-11-08T21:18:29ZeileenReplace complex logic in email templates with simple logic on billing name and credit cardSince we are doing tpl updates this month it would good to clean up some complex & kinda fragile logic using deprecated parameters
This is a fairly typical complex block from an email regarding whether to display a billing block
```
...Since we are doing tpl updates this month it would good to clean up some complex & kinda fragile logic using deprecated parameters
This is a fairly typical complex block from an email regarding whether to display a billing block
```
{if $contributeMode ne 'notify' and !$isAmountzero and (!$is_pay_later or $isBillingAddressRequiredForPayLater) and !$isOnWaitlist and !$isRequireApproval}
<tr>
<th {$headerStyle}>
{ts}Billing Name and Address{/ts}
</th>
</tr>
<tr>
<td colspan="2" {$valueStyle}>
{$billingName}<br />
{$address|nl2br}
</td>
</tr>
{/if}
```
But it can be simplified to
```
{if $billingName}
<tr>
<th {$headerStyle}>
{ts}Billing Name and Address{/ts}
</th>
</tr>
<tr>
<td colspan="2" {$valueStyle}>
{$billingName}<br />
{$address|nl2br}
</td>
</tr>
{/if}
```
on the basis we only collect the billingName & assign to to the tpl if wit is relevant.
Likewise
```
{if $contributeMode eq 'direct' AND !$is_pay_later AND ($amount GT 0 OR $membership_amount GT 0)}
<tr>
<th {$headerStyle}>
{ts}Credit Card Information{/ts}
</th>
</tr>
<tr>
<td colspan="2" {$valueStyle}>
{$credit_card_type}<br />
{$credit_card_number}<br />
{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br />
</td>
</tr>
{/if}
```
Can be simplified to
```
{if $credit_card_type}
<tr>
<th {$headerStyle}>
{ts}Credit Card Information{/ts}
</th>
</tr>
<tr>
<td colspan="2" {$valueStyle}>
{$credit_card_type}<br />
{$credit_card_number}<br />
{ts}Expires{/ts}: {$credit_card_exp_date|truncate:7:''|crmDate}<br />
</td>
</tr>
{/if}
```
On the basis we only display card information if available & only collect it if we want it. I don't think we ever have any other details about the card when we don't have the card.5.20.0https://lab.civicrm.org/dev/core/-/issues/1347Warning: array_key_exists(): The first argument should be either a string or ...2019-10-30T18:47:09ZDaveDWarning: array_key_exists(): The first argument should be either a string or an integer in CRM_Contact_Form_Search::getModeValue()When opening the address accordion on advanced search (e.g. /civicrm/contact/search/advanced?qfKey=blah_blah&searchPane=location&snippet=json), drupal watchdog logs this warning:
Warning: array_key_exists(): The first argument should be...When opening the address accordion on advanced search (e.g. /civicrm/contact/search/advanced?qfKey=blah_blah&searchPane=location&snippet=json), drupal watchdog logs this warning:
Warning: array_key_exists(): The first argument should be either a string or an integer in CRM_Contact_Form_Search::getModeValue() (line 305 of .../CRM/Contact/Form/Search.php)
It doesn't seem to affect search results, and oddly isn't displaying a red box on the screen even if you have drupal set to display them.
Seeing it in 5.19beta1 and on master. It looks like it was in 5.14.0 at least too.5.20.0https://lab.civicrm.org/dev/core/-/issues/1356Add user friendly way to report issues2023-01-19T05:03:35ZRichAdd user friendly way to report issues
We should have a way from within CiviCRM to provide the user with a template they can use to submit an issue.
See https://github.com/civicrm/civicrm-core/pull/15665#issuecomment-548268840
Having an "issue reporting" helper could just...
We should have a way from within CiviCRM to provide the user with a template they can use to submit an issue.
See https://github.com/civicrm/civicrm-core/pull/15665#issuecomment-548268840
Having an "issue reporting" helper could just do that paperwork for me so I could copy and paste.
- might reduce the barrier to contributing
- might get more accurate data (civicrm version, nginx, php, browser...) leading to quicker fixes
- we have better control of the template - could ask questions intereactively to generate it.
- we would have space to explain things like gitlab/hub to users.
- (one day could use api to search/report to gitlab!)homotechsualhomotechsualhttps://lab.civicrm.org/dev/core/-/issues/1371E Notice 'info' Extension.php:248 -> When installing via cv2019-11-08T01:28:44Zluke.stewartE Notice 'info' Extension.php:248 -> When installing via cvOn a wordpress install running 5.19.beta1 I get the following E Notice when running cv ext:download
`
Notice: Undefined variable: info in /wp-content/plugins/civicrm/civicrm/api/v3/Extension.php on line 248
`
This looks like it ...On a wordpress install running 5.19.beta1 I get the following E Notice when running cv ext:download
`
Notice: Undefined variable: info in /wp-content/plugins/civicrm/civicrm/api/v3/Extension.php on line 248
`
This looks like it was introduced in https://github.com/civicrm/civicrm-core/commit/19ec0aa50bafbe5748fba71a7d94b2e891051717
Which introduces a new parameter to the checkRequirements function, which defaults to NULL.
My reading of this is that the new Check Requirements functionality is only designed to work if executed via the UI. However, it looks like the info parameter is only populated if the 'url' param doesn't exist. If it does exist then the info parameter is not created.
As long as the UI doesn't call this function with a url param then this should be fine, but I'm wondering if it makes sense to populate the $info variable if a url is passed as a parameter to civicrm_api3_extension_download, a quick fix for the E Notice would be to simply initialise this variable to NULL.5.19.1https://lab.civicrm.org/dev/core/-/issues/1380No easy way to import signatures to petition2022-11-30T19:32:57ZCoreyBurgerNo easy way to import signatures to petitionSo there is no easy way to mass import signatures to a petition.
When looking at Petitions on Campaign > Dashboard > Petitions on the right side under the more option, there should be an option to "import signatures", which should be a...So there is no easy way to mass import signatures to a petition.
When looking at Petitions on Campaign > Dashboard > Petitions on the right side under the more option, there should be an option to "import signatures", which should be a custom version of the Import Activities.
As a workaround, I had to manually lookup how to import it, include the required numeric fields for source_record_id and activity_id.
CiviCRM 5.15 on Wordpresshttps://lab.civicrm.org/dev/core/-/issues/1387"config_backend" should be thoroughly removed2023-02-05T05:03:36Ztotten"config_backend" should be thoroughly removedOverview
----------------------------------------
In CiviCRM 4.7.0, the column `civicrm_domain.config_backend` was migrated to the `civicrm_setting` table. However, the migration was incomplete.
Reproduction steps
----------------------...Overview
----------------------------------------
In CiviCRM 4.7.0, the column `civicrm_domain.config_backend` was migrated to the `civicrm_setting` table. However, the migration was incomplete.
Reproduction steps
----------------------------------------
1. Create a new site (e.g. `civibuild create dmaster`)
2. Run `DESC civicrm_domain`
3. Observe that column `config_backend` exists
Current behaviour
----------------------------------------
* If a site upgrades from `$ver <= 4.6`, then the column `civicrm_domain.config_backend` does NOT exist.
* If a new site is created in `4.7 <= $ver <= 5.21`, then the column `civicrm_domain.config_backend` DOES exist.
Expected behaviour
----------------------------------------
The column should not exist in v5.21 (or whatever gets the fix). It should not matter if the site originated on v4.5, v4.7, or v5.20.
Comments
----------------------------------------
Historically, this field is related to `CRM_Core_BAO_ConfigSetting`. One should grep on both `config_backend` and `ConfigSetting` to track down code-paths that may be referencing it.
It is still desirable to retain upgrade/transitional logic (eg `CRM_Upgrade_Incremental_php_FourSeven`, `Civi\Core\SettingsBag`); but otherwise these should be removed, and any dependent code-paths should be re-tested.https://lab.civicrm.org/dev/core/-/issues/1388civicrm_group is missing important indexes on cache fields2023-01-10T05:03:25Zeileencivicrm_group is missing important indexes on cache fieldsWe had a recent server degradation where queries ran a lot slower and I spotted a non-indexed query that the small table size would normally cause to fly under the radar - basically we need to add these indexes:
```
$tables = ['civicr...We had a recent server degradation where queries ran a lot slower and I spotted a non-indexed query that the small table size would normally cause to fly under the radar - basically we need to add these indexes:
```
$tables = ['civicrm_group' => ['cache_date', 'refresh_date']];
CRM_Core_BAO_SchemaHandler::createIndexes($tables);
```
Note I'm just logging, rather than doing a PR, at this stage as I'm pretty snowed under.
@seamuslee @mattwire FYI - you might get benefit from indexing thishttps://lab.civicrm.org/dev/core/-/issues/1396No membership tokens available in mailing2021-10-12T02:23:59ZmarcelklehrNo membership tokens available in mailingOverview
----------------------------------------
When selecting memberships using "find memberships" and drafting an email to them, I would like to have membership tokens like membership.fee available.
Reproduction steps
--------------...Overview
----------------------------------------
When selecting memberships using "find memberships" and drafting an email to them, I would like to have membership tokens like membership.fee available.
Reproduction steps
----------------------------------------
1. Click on **Membership -> Find memberships**.
1. Select some memberships
1. Create an email using the actions
1. Try to add a membership token
Current behaviour
----------------------------------------
No membership tokens are available and using them anyway doesn't work.
Expected behaviour
----------------------------------------
Membership tokens should be available for use.
Environment information
----------------------------------------
<!-- Some of the items below may not be relevant for every bug - if in doubt please include more information than you think is neccessary. -->
* __Browser:__ _Firefox 70.0.1_
* __CiviCRM:__ _5.18.4_
* __PHP:__ _7.2...__
* __CMS:__ _Drupal 7.30..._
* __Database:__ _MariaDB 10.4_
* __Web Server:__ _Nginx 1.16_
Comments
----------------------------------------
My organisation is quite dependent on this feature for our yearly membership fees, so any help is appreciated.5.43.0https://lab.civicrm.org/dev/core/-/issues/1401Meta ticket for issues related to problems with closed cases2023-08-23T05:03:20ZDaveDMeta ticket for issues related to problems with closed casesJust trying to collect it all in one place.
## Open or Closed-but-Unmerged work:
Print Report for closed cases doesn't show the roles
* https://lab.civicrm.org/dev/core/-/issues/2441
* https://lab.civicrm.org/dev/core/-/issues/1948 (Re...Just trying to collect it all in one place.
## Open or Closed-but-Unmerged work:
Print Report for closed cases doesn't show the roles
* https://lab.civicrm.org/dev/core/-/issues/2441
* https://lab.civicrm.org/dev/core/-/issues/1948 (Related but for open cases, but is probably the same underlying reason.)
## Merged or sort of related:
Case manager not displayed for closed cases
* https://lab.civicrm.org/dev/core/issues/542 (**description includes a proposed idea that was never worked on**)
* https://civicrm.stackexchange.com/questions/27215/case-roles-on-closed-cases
* https://github.com/civicrm/civicrm-core/pull/13144
* https://github.com/civicrm/civicrm-core/pull/13831
* https://lab.civicrm.org/dev/core/-/issues/1947 (**contains some analysis and possibly more general long-term solution**)
Better handle Case Manager and roles on closed cases
* https://github.com/civicrm/civicrm-core/pull/13510
* https://github.com/civicrm/civicrm-core/pull/19737 (merged as a forms-level improvement)
* dev/core#500 Fix user-specific Case filtering on dashboard and searches to exclude cases from inactive relationships
* https://github.com/civicrm/civicrm-core/pull/13134
* Users with 'view own cases' permission can't open resolved cases
* https://lab.civicrm.org/dev/core/issues/1400
* https://civicrm.stackexchange.com/questions/33742/users-with-view-own-cases-permission-cant-access-resolved-cases
## Memory might be hazy:
* To-find: There's an earlier one somewhere about whether people want to see closed cases on dashboard.
* To-find: Something about different opinions on whether "closed" is like "disabled" when searching for cases and so some people don't want to even see it.https://lab.civicrm.org/dev/core/-/issues/1404Test assertions should include message describing the assertion2020-09-17T22:58:00ZFrancis (Agileware)Test assertions should include message describing the assertionWhile checking test failures for a PR, received the test error:
> Failed asserting that true is false.
On quick review of the refs in the phpunit tests directory, I found that almost none of the assertFalse calls in the test suite use ...While checking test failures for a PR, received the test error:
> Failed asserting that true is false.
On quick review of the refs in the phpunit tests directory, I found that almost none of the assertFalse calls in the test suite use the second argument to provide a descriptive message about the assertion. The assumption is then that the other assertion types are in the same situation.
The provides a less than stellar testing environment, as you have to check a source code reference to understand your test failure.
We should improve the tests so that they explain (summarise) the assertion that failed.https://lab.civicrm.org/dev/core/-/issues/1407CiviContribute Confirm Text2023-02-21T05:04:08ZanilpremlallCiviContribute Confirm TextOverview
----------------------------------------
Minor text change for clarity. Replace Continue with Make Contribution
Example use-case
----------------------------------------
1. Enable "Use a confirmation page?" option on Contributi...Overview
----------------------------------------
Minor text change for clarity. Replace Continue with Make Contribution
Example use-case
----------------------------------------
1. Enable "Use a confirmation page?" option on Contribution Page
2. Launch a test-drive contribution
3. Enter required fields and click "Confirm Contribution"
4. Help text in reference is at the top of the confirmation page
Current behaviour
----------------------------------------
Text: Please verify the information below carefully. Click **Go Back** if you need to make changes. To complete your contribution, click the **Continue** button below.
Proposed behaviour
----------------------------------------
Text: Please verify the information below carefully. Click **Go Back** if you need to make changes. To complete your contribution, click the **Make Contribution** button below.
Comments
----------------------------------------
Thank you for looking into this![CiviContribute-Text](/uploads/350d742bc23b81bc337b0c07cdb63434/CiviContribute-Text.png)https://lab.civicrm.org/dev/core/-/issues/1410civicrm/case/search?reset=1&force=1&case_subject=test gives php warning2019-11-22T01:47:09ZDaveDcivicrm/case/search?reset=1&force=1&case_subject=test gives php warningI know there's still ongoing work related to force=1 in urls for search, but reporting that `civicrm/case/search?reset=1&force=1&case_subject=test` gives `Warning: htmlspecialchars() expects parameter 1 to be string, array given in HTML_...I know there's still ongoing work related to force=1 in urls for search, but reporting that `civicrm/case/search?reset=1&force=1&case_subject=test` gives `Warning: htmlspecialchars() expects parameter 1 to be string, array given in HTML_Common->_getAttrString()`
The results seem correct, there's just the php warning.5.21.0seamusleeseamusleehttps://lab.civicrm.org/dev/core/-/issues/1416Export to PDF with useful filename2023-11-22T05:03:22ZCoreyBurgerExport to PDF with useful filenameIf you export a report to PDF, the file name is "CiviReport.PDF". That is a major headache if you are exporting multiple reports. Ideally, the report should be exported with some kind of useful title, likely a shortening of the report titleIf you export a report to PDF, the file name is "CiviReport.PDF". That is a major headache if you are exporting multiple reports. Ideally, the report should be exported with some kind of useful title, likely a shortening of the report titlehttps://lab.civicrm.org/dev/core/-/issues/1417Default view on Constituent details wastes space with unneeded headers2023-01-11T05:03:27ZCoreyBurgerDefault view on Constituent details wastes space with unneeded headersThe default Constituent Detail report wastes huge amounts of space on pages, while the Constitient Summary report, which is nicely organized, lacks key details like membership.
My use case is as follows: I want to print off the high lev...The default Constituent Detail report wastes huge amounts of space on pages, while the Constitient Summary report, which is nicely organized, lacks key details like membership.
My use case is as follows: I want to print off the high level details for a committee meeting. My contacts are organized into a group. What I want to be able to view for that meeting is the following: Name, Email, Address and Membership Status.
There are three reports I could use for this:
1. Constituent Summary - no membership
2. Constituent Details - wasted space
3. Membership Summary - misses all non-members
The simplest solution to this problem is to edit the Constituient Details template to remove unneeded headers. I'm happy to help make this change, but I honestly have no idea where in the code I would find the needed templates to edithttps://lab.civicrm.org/dev/core/-/issues/1433CRM_Case_XMLProcessor::allActivityTypes() doesn't do caching right2020-06-16T11:13:35ZDaveDCRM_Case_XMLProcessor::allActivityTypes() doesn't do caching rightThis isn't recent. The function looks like this:
```php
public static function &allActivityTypes($indexName = TRUE, $all = FALSE) {
if (self::$activityTypes === NULL) {
self::$activityTypes = CRM_Case_PseudoConstant::caseActiv...This isn't recent. The function looks like this:
```php
public static function &allActivityTypes($indexName = TRUE, $all = FALSE) {
if (self::$activityTypes === NULL) {
self::$activityTypes = CRM_Case_PseudoConstant::caseActivityType($indexName, $all);
}
return self::$activityTypes;
}
```
So it works fine the first time in any given page run, but then if you call it again with different parameters it just returns the thing it cached last time regardless of the parameters. It isn't used very often and so I guess it doesn't come up in a typical page run, but it was driving me a bit nuts while trying to write a unit test and not getting what I was expecting.
PR coming, just debating whether it's worth trying to eliminate completely since it isn't used in that many places, i.e. deprecate it and replace everywhere it's used in core with CRM_Case_PseudoConstant::caseActivityType which does its own caching anyway.5.28.0https://lab.civicrm.org/dev/core/-/issues/1439No way to identify 'deceased' contacts when viewing or reporting on relations...2023-01-15T05:03:21Zellen_compucorpNo way to identify 'deceased' contacts when viewing or reporting on relationshipsOverview
----------------------------------------
Marking a contact record as 'is_deceased' doesn't currently appear to have any impact on the contact's relationships, which makes sense overall (for example, if a contact was marked as de...Overview
----------------------------------------
Marking a contact record as 'is_deceased' doesn't currently appear to have any impact on the contact's relationships, which makes sense overall (for example, if a contact was marked as deceased and then a scheduled job were to automatically expire all it's relationships, it would be very manual and annoying to reverse that if 'is_deceased' had been added by accident. However, it would be extremely useful (a) when viewing relationships on contact records and (b) when reporting on relationships, to know whether one of the contacts involved in the relationship is deceased.
Example use-case
----------------------------------------
On a contact record:
1. Create a contact (contact A)
1. Add a relationship to another contact (contact B)
1. Mark contact A as deceased
1. View relationships tab on contact record for contact B
Within reports:
1. Go to create new relationships report (/civicrm/report/instance/5?reset=1&output=criteria)
1. View columns/ filters tabs; no configurations available relating to 'is_deceased'
Current behaviour
----------------------------------------
On a contact record:
- No change to relationship (or relationship display) when one of the contacts is marked as deceased
Within reports:
- As described above
Proposed behaviour
----------------------------------------
On a contact record:
- Propose that - on the relationships tab of the contact record - after the name of the contact that is deceased is added in red "(deceased)" in the same way that it is added next to the main display name at the top of the contact record for a deceased contact currently.
![3DC980F2-DC13-440B-A9D3-6875552B2006](/uploads/fb62f7fa05eeaa9002a9298cff5813d5/3DC980F2-DC13-440B-A9D3-6875552B2006.png)
On reports:
- Propose that a filter is added so that 'deceased' contacts can be excluded from relationships reports
Comments
----------------------------------------https://lab.civicrm.org/dev/core/-/issues/1452Recurring contributions label on contribution pages is unstylable text, leadi...2021-05-03T11:44:27ZlarsssandergreenRecurring contributions label on contribution pages is unstylable text, leading to problems with themesOn a contribution page with recurring contributions enabled, the label for the recurring selection shows up as:
`<label for="is_recur">I want to contribute this amount</label>
every month
...On a contribution page with recurring contributions enabled, the label for the recurring selection shows up as:
`<label for="is_recur">I want to contribute this amount</label>
every month
`
(including some odd spacing around between the label and the word every). If you allow more than one option (e.g. weeks and months), only the word every is outside the label tags.
Because of this, any theme that changes the styling of the labels ends up looking very bad, as the words "every month" will be in a different font, size, etc. and there can also be some weird spacing. It seems like the fix would be to apply additional label tags around the words.
This is fixable on individual sites by applying styles to the divs that contain this label, but that's obviously not a great solution.
Confirmed on latest demo.5.38.0https://lab.civicrm.org/dev/core/-/issues/1458Searches with force=1&sort_name don't support spaces in the sort_name parameter2023-01-18T05:03:45ZDaveDSearches with force=1&sort_name don't support spaces in the sort_name parameterFor example if I want to return all contacts with first name `Jar Jar` but not `Jar Joe` I can't search for `sort_name=Jar%20Jar` or `sort_name=Jar+Jar`. It just ignores the parameter completely and returns all contacts.
I don't have a ...For example if I want to return all contacts with first name `Jar Jar` but not `Jar Joe` I can't search for `sort_name=Jar%20Jar` or `sort_name=Jar+Jar`. It just ignores the parameter completely and returns all contacts.
I don't have a stake in this, and not sure how important it is to anyone, just noting it as it has come up in testing of the force=1 searches.https://lab.civicrm.org/dev/core/-/issues/1468Advanced search fails to properly search for contribution source2019-12-11T19:17:56ZRichAdvanced search fails to properly search for contribution sourceOverview
----------------------------------------
Try searching for a contribution source from the Advanced search - bet you don't get any results.
Reproduction steps
----------------------------------------
1. Create a contact; add ...Overview
----------------------------------------
Try searching for a contribution source from the Advanced search - bet you don't get any results.
Reproduction steps
----------------------------------------
1. Create a contact; add a contribution with a source `findme`
1. Do an advanced search, specifying a contribution with a source `findme`
1. no results - expected to find your contact.
Current behaviour
----------------------------------------
No results.
Reason: the SQL generation generates SQL like this: `civicrm_contribution.source IN ("%findme%")`
i.e. it's added `%` wildcards as if for a `LIKE` operator, but then it's used `IN`!
Expected behaviour
----------------------------------------
It should generate SQL like this: `civicrm_contribution.source LIKE ("%findme%")` and return the result.
Environment information
----------------------------------------
* __CiviCRM:__ _Master_ and _5.20.0_5.22.0RichRichhttps://lab.civicrm.org/dev/core/-/issues/1487Scheduled Reminders, Tokens listed as being available for use in the Schedule...2020-09-17T09:49:12Zjustinfreeman (Agileware)Scheduled Reminders, Tokens listed as being available for use in the Scheduled Reminder ignore the context which is used to trigger the reminder and therefore do not evaluateScheduled Reminders, Tokens listed as being available for use in the Scheduled Reminder ignore the context which is used to trigger the reminder and therefore do not evaluate. This is a bug in the Scheduled Reminder UI and is a regular p...Scheduled Reminders, Tokens listed as being available for use in the Scheduled Reminder ignore the context which is used to trigger the reminder and therefore do not evaluate. This is a bug in the Scheduled Reminder UI and is a regular point of confusion for users.
Proposed change:
1. The available Tokens shown in the Tokens drop-down list should be filtered to be relevant to the selected Entity.
2. Tokens for Contact which will work in all context should remain available.
Agileware Ref: CIVICRM-1403
![DiUC6edfBY](/uploads/d90c1aba5e288b56f2f78fa0a7afbcd4/DiUC6edfBY.png)
![chrome_MLUcPI966g](/uploads/9b015f82e89720faa6c66283819ba90d/chrome_MLUcPI966g.png)https://lab.civicrm.org/dev/core/-/issues/1500Add system check for required PHP extensions (bcmath, curl, etc.)2023-03-21T05:03:21ZAllenShawAdd system check for required PHP extensions (bcmath, curl, etc.)I was recently bitten by the bcmath requirement (along the lines of https://civicrm.stackexchange.com/q/31932/907), on a system that (for unrelated reasons) was making error messages fairly hard to get to.
It occurs to me that since Civ...I was recently bitten by the bcmath requirement (along the lines of https://civicrm.stackexchange.com/q/31932/907), on a system that (for unrelated reasons) was making error messages fairly hard to get to.
It occurs to me that since CiviCRM core requires several php extensions (https://docs.civicrm.org/sysadmin/en/latest/requirements/#php-extensions), it would be helpful to have a system check that uses `extension_loaded()` to confirm these are installed, and presents a 'critical' error if any are missing.https://lab.civicrm.org/dev/core/-/issues/1502Make Deja Vu Sans the default font for mailing labels2020-10-15T20:14:26ZDaveDMake Deja Vu Sans the default font for mailing labelsAs per https://civicrm.stackexchange.com/questions/34182/make-mailing-labels-not-working-for-bosnia-language and similar pdf issues elsewhere, the default font of Helvetica doesn't work for unicode characters and you just get a `?` in th...As per https://civicrm.stackexchange.com/questions/34182/make-mailing-labels-not-working-for-bosnia-language and similar pdf issues elsewhere, the default font of Helvetica doesn't work for unicode characters and you just get a `?` in the output. It's configurable at Administer - Communications - Label Formats but why not make the default font one that supports unicode.
One downside is that the pdfs will be larger because Helvetica is a core pdf font and deja vu needs to be embedded in every file, but at least for mailing labels once the file is printed you usually discard the pdf. So right now I'm just talking about mailing labels and the default font setting on that admin page.
Any other reasons not to?5.23.0https://lab.civicrm.org/dev/core/-/issues/1509Mirror the ISO 3166 country / province databases including IDs2023-01-25T05:03:28ZndavisMirror the ISO 3166 country / province databases including IDsThe country/province lists do not have the correct ISO 3166 numeric ids (ex 1228 for USA should be 240).
This is important because everyone else uses ISO ids and in order to map the right country IDs for CiviCRM, you need to create a ma...The country/province lists do not have the correct ISO 3166 numeric ids (ex 1228 for USA should be 240).
This is important because everyone else uses ISO ids and in order to map the right country IDs for CiviCRM, you need to create a mapping table.
As well not all of the country names match.
Why not just use the ISO data dumps to create these tables?
This becomes very important when you need to create forms with addresses in them. You have to use one ID for civi and the standard ID for everything else....https://lab.civicrm.org/dev/core/-/issues/1510"_[custom field id number]" suffix is causing issues2020-01-10T13:06:15Zndavis"_[custom field id number]" suffix is causing issuesThis custom field id number changes between environments requiring a lookup algorithm to get the correct field name when writing code.
Why add this ID at all? Developers should be entrusted to name their custom fields the way they see f...This custom field id number changes between environments requiring a lookup algorithm to get the correct field name when writing code.
Why add this ID at all? Developers should be entrusted to name their custom fields the way they see fit. If this causes a name collision that's on the developer. It's not the project's responsibility to manage custom field names.
At the most you should force a "custom_" prefix or something similar. Forcing an _[custom field id number] suffix causes more problems than it solves, at least for those of us that don't develop on our production server since these ids change from one environment to the next, depending on what order features get implemented by the organizational development team. _PLEASE_ fix this. It makes custom fields nearly unusable for some organizations.https://lab.civicrm.org/dev/core/-/issues/1511Expose "is_show_location" to control display of event locations2020-02-27T19:57:26Zaydunsaidan.saunders@squiffle.ukExpose "is_show_location" to control display of event locationsOverview
----------------------------------------
The Event DAO has a boolean field 'is_show_location' that determines whether the event location is shown or not. This field is available via the API and existing code suggests it was int...Overview
----------------------------------------
The Event DAO has a boolean field 'is_show_location' that determines whether the event location is shown or not. This field is available via the API and existing code suggests it was intended to be available to event administrators, but it is not currently shown.
Current behaviour
----------------------------------------
This field allows event locations to be configured, but not shown to users. The field already exists and is referenced in multiple places but is not configurable via the GUI.
CRM_Event_Form_ManageEvent_Location::buildQuickForm() adds the field to the form but it is not included in the template - see https://github.com/civicrm/civicrm-core/blob/master/CRM/Event/Form/ManageEvent/Location.php#L184
Proposed behaviour
----------------------------------------
Add the field to the template templates/CRM/Event/Form/ManageEvent/Location.tpl
Comments
----------------------------------------
This improves consistency between API & GUI.
Original motivation for this was that some events on a client site do not have this field set but there is no way to see or correct this for administrators.
PR
-----
https://github.com/civicrm/civicrm-core/pull/162305.23.0aydunsaidan.saunders@squiffle.ukaydunsaidan.saunders@squiffle.ukhttps://lab.civicrm.org/dev/core/-/issues/1518Add additional columns to Pledged But not Paid Report report2023-02-13T05:03:22ZyashodhaAdd additional columns to Pledged But not Paid Report reportAdd additional columns to *Pledged But not Paid Report* report:
* Total Amount Paid
* Balance DueAdd additional columns to *Pledged But not Paid Report* report:
* Total Amount Paid
* Balance Dueyashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1531Requirement to include event date in invoice2023-02-04T05:03:29Zmagnolia61Requirement to include event date in invoiceOverview
----------------------------------------
Hello there, In the Netherlands we ran into an issue where a funding organisation (Leergeld) which supports families with low income needed an invoice that would include the date of the e...Overview
----------------------------------------
Hello there, In the Netherlands we ran into an issue where a funding organisation (Leergeld) which supports families with low income needed an invoice that would include the date of the event. Long story short: would it be possible to incude the name and date of the event the contribution is for in the invoice?
Current behaviour
----------------------------------------
The current event invoice does not include the date of the event.
Proposed behaviour
----------------------------------------
For events invoices the start and end date for the event should be included
Comments
----------------------------------------
I have no clue on how to do this, but I wanted some reflection on this by you all anyway.https://lab.civicrm.org/dev/core/-/issues/1534Position on scalar type checking?2021-05-13T21:33:15ZJonGoldPosition on scalar type checking?Coleman's recent API4 PR to return values with their correct types made me realize that now that we have a PHP 7.0 requirement, we can start using type hinting for scalars.
I was wondering if this has been discussed yet, and if not, thi...Coleman's recent API4 PR to return values with their correct types made me realize that now that we have a PHP 7.0 requirement, we can start using type hinting for scalars.
I was wondering if this has been discussed yet, and if not, this can be the space for it. I'd be curious to hear the more active devs' positions on starting to use them in the codebase. Some questions to consider:
* Strong type-checking, or weak? Is it something that perhaps should be different for new vs. legacy classes?
* Do we want to implement Jenkins testing for type checking?
* Do we want to consider some sort of wholesale shift, like when we implemented code formatting standards? I just spotted this: https://github.com/dunglas/phpdoc-to-typehinthttps://lab.civicrm.org/dev/core/-/issues/1536Develop unit tests that catch red warning boxes on common forms2023-08-17T05:03:27ZDaveDDevelop unit tests that catch red warning boxes on common formsMaking myself a rainy day todo.
* Forms are not well covered by unit tests. In general that's not what pure unit tests are supposed to do, but I'm thinking there could be something minimal.
* Since the addition of popup forms, warnings ...Making myself a rainy day todo.
* Forms are not well covered by unit tests. In general that's not what pure unit tests are supposed to do, but I'm thinking there could be something minimal.
* Since the addition of popup forms, warnings and notices don't get seen when testing because they get snippet'd out.
* It's happening often enough where changes introduce some type of "missing XXX" from forms.
So it might be as simple as a test that runs through some common forms and sets up some vars and calls preprocess and buildform and when run as tests that should show notices. It won't catch everything, but might reduce the problem.https://lab.civicrm.org/dev/core/-/issues/1540Add user friendly error message on merge error.2020-01-21T05:14:18ZjitendraAdd user friendly error message on merge error.When a user tries to merge 2 contacts from an Advanced search screen, the following error is displayed if there is no Supervised rule present on the site.
![image](/uploads/efbef3eb21d963a0e8affd6afec30d53/image.png)
Related SE - https...When a user tries to merge 2 contacts from an Advanced search screen, the following error is displayed if there is no Supervised rule present on the site.
![image](/uploads/efbef3eb21d963a0e8affd6afec30d53/image.png)
Related SE - https://civicrm.stackexchange.com/questions/17432/error-message-when-merging-contactsjitendrajitendrahttps://lab.civicrm.org/dev/core/-/issues/1543WMF Search Discovery2020-03-25T15:18:32ZcolemanwWMF Search DiscoveryThe Core Team has been commissioned to improve Search & Reporting in CiviCRM.
* [Statement of Work](https://docs.google.com/document/d/1dG-aRyRs-pTHpd0XMoqsIhTRDNLQqFkUSzrZXLOb4AQ/edit?usp=sharing)
* [WMF Use-Cases](https://docs.google....The Core Team has been commissioned to improve Search & Reporting in CiviCRM.
* [Statement of Work](https://docs.google.com/document/d/1dG-aRyRs-pTHpd0XMoqsIhTRDNLQqFkUSzrZXLOb4AQ/edit?usp=sharing)
* [WMF Use-Cases](https://docs.google.com/document/d/1LqwhrNfKjSvN1tezaE7Z3S2-BdmWs1yWS-VemiCZq7s/edit?usp=sharing)
* [Analysis by Eileen](https://docs.google.com/document/d/1OyEXfGHq0s8MWxCqTz5bzdA5a86O4ad3bVefpEDKXuw/edit?usp=sharing)https://lab.civicrm.org/dev/core/-/issues/1544Add option for Last 6 months including today in relative date filter2020-01-24T07:18:17ZyashodhaAdd option for Last 6 months including today in relative date filterAdd option for *Last 6 months including today* in relative date filterAdd option for *Last 6 months including today* in relative date filteryashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1547Group search form template does not add Datatables CSS classes (DT_RowClass)2023-02-14T05:04:04ZjensschuppeGroup search form template does not add Datatables CSS classes (DT_RowClass)Overview
----------------------------------------
As noted in [a TODO](https://lab.civicrm.org/dev/core/blob/master/templates/CRM/Group/Form/Search.tpl#L208), the Group search form template does not use jquery.datatables for loading chil...Overview
----------------------------------------
As noted in [a TODO](https://lab.civicrm.org/dev/core/blob/master/templates/CRM/Group/Form/Search.tpl#L208), the Group search form template does not use jquery.datatables for loading child rows. That might be ok, since it's working without it, but there are CSS classes in each `response.data.DT_RowClass` and maybe other properties that are not being injected into the template.
This makes it difficult to distinguish nested groups from their parents and subsequent non-nested groups, since the CSS class `crm-group-child` (which actually has CSS for visual nesting, see [here](https://lab.civicrm.org/dev/core/blob/master/css/civicrm.css#L3477-3484)) is being added to the `DT_RowClass` attribute [here](https://lab.civicrm.org/dev/core/blob/master/CRM/Contact/BAO/Group.php#L973), but that is not added to the actual markup.
Reproduction steps
----------------------------------------
1. Click on **Contacts -> Manage Groups**.
1. Add a nested group
1. Expand the parent group to see the nested group
Current behaviour
----------------------------------------
There is no indentiation, making the nested group not be visually distinguishable from neither its parent group (ok, the parent has a triangle) nor any subsequent groups that are not nested within the same parent group.
Expected behaviour
----------------------------------------
Nested groups should be visually distinguishable by indenting them.
It should be enough to add `DT_RowClass` to the markup for now, but using jquery.datatables would be the _real_ solution, I guess.
Environment information
----------------------------------------
Can be reproduced on dmaster.https://lab.civicrm.org/dev/core/-/issues/1549Regen.sh/setup.sh would be nice if the output for civicrm_generated.mysql had...2021-06-07T14:49:56ZDaveDRegen.sh/setup.sh would be nice if the output for civicrm_generated.mysql had long lines broken upRelated mysql feature request: https://bugs.mysql.com/bug.php?id=65465
i.e. having super-long lines in a git-controlled file is awkward for file conflicts, and just generally awkward.
In particular the civicrm_option_value table.
I ha...Related mysql feature request: https://bugs.mysql.com/bug.php?id=65465
i.e. having super-long lines in a git-controlled file is awkward for file conflicts, and just generally awkward.
In particular the civicrm_option_value table.
I haven't looked how hard this is to do yet. TBD. Even if there's no mysql command line arg to do it maybe it can be done with a regex that runs right after mysqldump.5.39.0https://lab.civicrm.org/dev/core/-/issues/1550Invalid links to extension directory2020-01-28T06:42:06ZDaveDInvalid links to extension directoryCopied from https://lab.civicrm.org/dev/translation/issues/33
> Administer > System Settings > Payment Processors, in the Payment Processors Help, the link one for Extension Directory is wrong. The same error for the help WYSIWYG Edito...Copied from https://lab.civicrm.org/dev/translation/issues/33
> Administer > System Settings > Payment Processors, in the Payment Processors Help, the link one for Extension Directory is wrong. The same error for the help WYSIWYG Editor when : Display Preferences.
https://github.com/civicrm/civicrm-core/blob/5.21.0/templates/CRM/Admin/Page/PaymentProcessor.hlp#L20
and here
https://github.com/civicrm/civicrm-core/blob/5.21.0/templates/CRM/Admin/Form/Preferences/Display.hlp#L205.23.0https://lab.civicrm.org/dev/core/-/issues/1558CQ: Eliminate 'contribution_invoice_settings' 'Setting' in favour of followin...2023-02-07T05:04:30ZeileenCQ: Eliminate 'contribution_invoice_settings' 'Setting' in favour of following our standardWhen invoicing code was added the setting standard of one setting per key was ignored & several settings (some only relevant when invoicing is enabled), were jumbled into one setting. This is not our standard & there is no intent to chan...When invoicing code was added the setting standard of one setting per key was ignored & several settings (some only relevant when invoicing is enabled), were jumbled into one setting. This is not our standard & there is no intent to change our standard so we need to migrate them into 'real' settings to clean this up. We did 'defered_revenue_enabled' a while back &
I just finished it off via https://github.com/civicrm/civicrm-core/pull/16395
I currently have a PR open to migrate out https://github.com/civicrm/civicrm-core/pull/16397 - this includes code to support attempts to get this setting via contribution_invoice_settings for a few releases (in case any extensions are accessing the settings).
I think I need to enhance the spec to handle the show hide thinghttps://lab.civicrm.org/dev/core/-/issues/1565Failing to copy file when creating new attachment with APIv32020-02-10T03:07:09ZalbionbrownFailing to copy file when creating new attachment with APIv3In this block of code in civicrm/api/v3/Attachment.php:
```
$path = $config->customFileUploadDir . DIRECTORY_SEPARATOR . $fileDao->uri;
if (is_string($content)) {
file_put_contents($path, $content);
}
elseif (is_string($moveF...In this block of code in civicrm/api/v3/Attachment.php:
```
$path = $config->customFileUploadDir . DIRECTORY_SEPARATOR . $fileDao->uri;
if (is_string($content)) {
file_put_contents($path, $content);
}
elseif (is_string($moveFile)) {
// CRM-17432 Do not use rename() since it will break file permissions.
// Also avoid move_uplaoded_file() because the API can use options.move-file.
copy($moveFile, $path);
unlink($moveFile);
}
```
Is there a reason why we can't check if the copy failed and throw an API_Exception if it did?
The reason being, is that I've had some issues with the new Catalina MacOS update and the NFS mounting option lately. I couldn't figure out why my file upload wasn't working. Ultimately it came down to directory permissions as a result of the Catalina update.
Is it possible we could change this to:
```
$path = $config->customFileUploadDir . DIRECTORY_SEPARATOR . $fileDao->uri;
if (is_string($content)) {
file_put_contents($path, $content);
}
elseif (is_string($moveFile)) {
// CRM-17432 Do not use rename() since it will break file permissions.
// Also avoid move_uploaded_file() because the API can use options.move-file.
if (!copy($moveFile, $path)) {
throw new API_Exception("Cannot copy uploaded file ".$moveFile." to ".$path);
}
unlink($moveFile);
}
```
So we know when the move has failed?5.24.0https://lab.civicrm.org/dev/core/-/issues/1566CustomValue.GetTree API Does Not Return Display Value for Money Select/Radio ...2023-03-26T05:03:14Ztunbola@compucorp.co.ukCustomValue.GetTree API Does Not Return Display Value for Money Select/Radio Custom fieldOverview
----------------------------------------
The CustomValue.gettree API returns custom fields and its values for an entity. When the custom field is of data type Money and the field type is Select/Radio. The CustomValue.gettree doe...Overview
----------------------------------------
The CustomValue.gettree API returns custom fields and its values for an entity. When the custom field is of data type Money and the field type is Select/Radio. The CustomValue.gettree does not return any value for the display field for the custom field even though there is data in the field.
Reproduction steps
----------------------------------------
Take for example a Case that has a custom group that has a Money select field with options
Field Label: Two Dollars, Field Value : 2.
If the select option of Two Dollars is selected when creating the case and the API is invoked after creation:
```php
$result = civicrm_api3('CustomValue', 'gettree', [
'entity_id' => 29,
'entity_type' => "Case",
]);
//Result
{
"is_error": 0,
"version": 3,
"count": 2,
"values": {
"Apha_Num": {
"id": "11",
"name": "Apha_Num",
"table_name": "civicrm_value_apha_num_11",
"title": "Apha Num",
"extends": "Case",
"is_public": "1",
"fields": {
"Money_Select": {
"value": {
"id": "9",
"data": "2.00",
"display": "" // THE DISPLAY FIELD IS EMPTY
},
"id": "40",
"name": "Money_Select",
"label": "Money Select",
"column_name": "money_select_40",
"data_type": "Money",
"html_type": "Select",
"option_group_id": "119",
"in_selector": "0"
}
}
}
}
}
```
Current behaviour
----------------------------------------
I did a bit of investigation about this. For Money fields that are select or radio, the values are stored in a DECIMAL column type in the database. These value stored in this field is formatted as decimal. So for the example given above. The value of 2.00 was stored in the column for the Case.
![_MySQL_5.7.28-0ubuntu0.16.04.2-log__case-award.localcivicrmcivicrm_value_apha_num_11_2020-01-30_12-06-27](/uploads/6010bc9f7a8ae207b01def6ba2340e2e/_MySQL_5.7.28-0ubuntu0.16.04.2-log__case-award.localcivicrmcivicrm_value_apha_num_11_2020-01-30_12-06-27.png)
While the option group created for the Select option values has a value of 2.
![Apha_Num_-_Custom_Fields__CiviAwards_2020-01-30_12-13-57](/uploads/a55347fc5ebf40a75718468c3170b7d0/Apha_Num_-_Custom_Fields__CiviAwards_2020-01-30_12-13-57.png)
When the display for the Money field select type is being fetched here: https://github.com/civicrm/civicrm-core/blob/master/CRM/Core/BAO/CustomField.php#L1120. The value set is an empty string because the options contain something similar to this
```php
array (
2 => 'Two Dollars',
)
```
While the `$value = 2.00`, So the value can not be found in the array and `''` is returned.
Expected behaviour
----------------------------------------
Ideally, I think the label for the option value (in this case Two Dollars) should be returned when the CustomValue.gettree API. Although the Money field is a bit different and not sure if it is the value (2.00) that should be returned in this case as the display field.https://lab.civicrm.org/dev/core/-/issues/1569Need to Increase Data Size for `form_values` column on civicrm_report_instanc...2020-03-19T21:27:11Ztunbola@compucorp.co.ukNeed to Increase Data Size for `form_values` column on civicrm_report_instance tableOverview
----------------------------------------
Currently form_values column of the civicrm_report_instance table is of data type TEXT. This is sufficient for saving most report instances. However we have a couple of custom reports bas...Overview
----------------------------------------
Currently form_values column of the civicrm_report_instance table is of data type TEXT. This is sufficient for saving most report instances. However we have a couple of custom reports based on the Core Civi report functionality with some dynamic filters that may vary based on some conditions in the system. As such some of the reports have a lot of custom form filters fields and when these reports are saved in the database, the serialized data in the `form_values` column of the civicrm_report_instance table gets truncated and this renders the saved report unusable.
Proposed behaviour
----------------------------------------
The Proposal is to change the data type of the form_values column of the civicrm_report_instance table to MEDIUMTEXT which can hold much more data (~16MB) as compared with TEXT (64KB). With this change, the data will not be truncated and any custom report form with much form fields will not having any issue getting saved at all.5.25.0https://lab.civicrm.org/dev/core/-/issues/1573Add columns to Contribution Detail report: Employer, Location Type, Preferred...2020-02-05T03:07:10ZAllenShawAdd columns to Contribution Detail report: Employer, Location Type, Preferred Communication MethodFor some time I've been running a PHP file override to get some extra columns into the *Contribution Detail* report. Adding these to the core report is fairly easy, and these columns seem like they'd be useful to others (who could also o...For some time I've been running a PHP file override to get some extra columns into the *Contribution Detail* report. Adding these to the core report is fairly easy, and these columns seem like they'd be useful to others (who could also of course just move right along as usual without using them, if they like).
Because these columns simply amount to more information about entities already included in the report, this change would not make any changes to the underlying logic (or lack thereof) of the report itself.
PR forthcoming.5.23.0AllenShawAllenShawhttps://lab.civicrm.org/dev/core/-/issues/1579CRM_Core_Payment_PayPalProIPN should not call getPayPalPaymentProcessorID() i...2020-08-06T21:15:00ZAllenShawCRM_Core_Payment_PayPalProIPN should not call getPayPalPaymentProcessorID() if processor_id is clearly provided in URLWhen processing PayPal Pro IPN messages, `CRM_Core_Payment_PayPalProIPN::main()` attempts to determine the payment processor ID by calling `self::getPayPalPaymentProcessorID()` ([code reference](https://github.com/civicrm/civicrm-core/bl...When processing PayPal Pro IPN messages, `CRM_Core_Payment_PayPalProIPN::main()` attempts to determine the payment processor ID by calling `self::getPayPalPaymentProcessorID()` ([code reference](https://github.com/civicrm/civicrm-core/blob/990a93e05dceeba0f6e1872a2d8081e06825d3d9/CRM/Core/Payment/PayPalProIPN.php#L460)), despite having already determined the processor ID `xx` based on the url `civicrm/payment/ipn/xx ` earlier ([here](https://github.com/civicrm/civicrm-core/blob/990a93e05dceeba0f6e1872a2d8081e06825d3d9/CRM/Core/Payment/PayPalImpl.php#L711), then passed in [here](https://github.com/civicrm/civicrm-core/blob/990a93e05dceeba0f6e1872a2d8081e06825d3d9/CRM/Core/Payment/PayPalImpl.php#L726))
This method immediately logs a warning message, "Unreliable method used to get payment_processor_id for PayPal Pro IPN - this will cause problems if you have more than one instance", which seems needless if the processor_id is already provided in the url.
I propose skipping this call if processor_id is already known.https://lab.civicrm.org/dev/core/-/issues/1580Allow to search on contribution id2023-03-10T06:17:56ZyashodhaAllow to search on contribution idAllow to search on contribution idAllow to search on contribution id5.28.1yashodhayashodhahttps://lab.civicrm.org/dev/core/-/issues/1826Dedupe: Location type is treated inconsistently2023-03-18T04:15:46ZJonGoldDedupe: Location type is treated inconsistentlyPer [this Stack Exchange discussion](https://civicrm.stackexchange.com/questions/34671/dedupe-rule-ignores-the-location-type-for-email-phone-but-does-not-ignore-for-ad), there's a UX issue that dedupe ignores location type ID for email a...Per [this Stack Exchange discussion](https://civicrm.stackexchange.com/questions/34671/dedupe-rule-ignores-the-location-type-for-email-phone-but-does-not-ignore-for-ad), there's a UX issue that dedupe ignores location type ID for email and phone but not postal address. The consensus on that page is that we should be consistent in favor of ignoring location type everywhere.
Note that this is a change from the position taken in [https://issues.civicrm.org/jira/browse/CRM-5026](https://issues.civicrm.org/jira/browse/CRM-5026), but I think the 11 years that have passed since that position have given us real-world experience to favor the newly-suggested approach.
I have a patch for this, but no test yet. Once I have a test I'll submit a PR.JonGoldJonGoldhttps://lab.civicrm.org/dev/core/-/issues/1610Notice: Array to string conversion in CRM_Utils_Address::format() (line 167 o...2023-02-15T05:03:30ZbrianhNotice: Array to string conversion in CRM_Utils_Address::format() (line 167 of CRM/Utils/Address.php).This seems to be spamming our logs, I checked and `$fields['world_region']` is indeed an array.This seems to be spamming our logs, I checked and `$fields['world_region']` is indeed an array.https://lab.civicrm.org/dev/core/-/issues/1614META Token improvements (TokenProcessor)2023-03-18T06:38:34Zmattwiremjw@mjwconsult.co.ukMETA Token improvements (TokenProcessor)For quite a long time there has been a newer "TokenProcessor" in CiviCRM core, but it was only implemented for scheduled reminders initially. It can be used with this branch of the emailapi extension: https://lab.civicrm.org/mattwire/em...For quite a long time there has been a newer "TokenProcessor" in CiviCRM core, but it was only implemented for scheduled reminders initially. It can be used with this branch of the emailapi extension: https://lab.civicrm.org/mattwire/emailapi/tree/newtokenprocessor
Basically it is a more flexible token processor. @ayduns did a big chunk of work to implement activity tokens:
* https://github.com/civicrm/civicrm-core/pull/12012 - Add functionality to create PDF/Word docs from Activity searches
* https://github.com/civicrm/civicrm-core/pull/14662 - Add PDF letter functionality for Activities using new token processor
This part allows for more advanced "keyed" tokens so you can (for example) select a specific contact when there are multiple on an activity and supports activity PDFs:
* https://github.com/mattwire/civicrm-core/tree/activity_pdf_71_rebased
It would be good to extend to all token entities and we have a trait to help with that:
* ~~https://github.com/civicrm/civicrm-core/pull/16468 - REF Refactor ActivityTokens to use a trait that can be shared with other entities~~ merged
Draft PR for adding tokenprocessor support to contributions:
* https://github.com/civicrm/civicrm-core/pull/16612 - WIP Support contribution tokens using TokenProcessor
Support for Case tokens using tokenProcessor:
* https://github.com/mattwire/civicrm-core/tree/casetokenprocessor
There is some work that needs to be done to improve consistency and make development of the TokenProcessor easier. Reviewers are needed for:
* https://github.com/civicrm/civicrm-core/pull/16983 - Standardise what we pass to tokenProcessor so we don't have to add specific handling in each class for actionSchedule
* https://github.com/civicrm/civicrm-core/pull/18612 - Simplify TokenProcessor codehttps://lab.civicrm.org/dev/core/-/issues/1617Contribution Invoice template improvements2022-06-24T03:29:06Zmagnolia61Contribution Invoice template improvementsThe Contribution Invoice workflow template needed some quick fixes:
* style wise clean up
* some layout fixes
* make CiviCRM logo comply with Display "empowered by CiviCRM" setting
**BEFORE** (bit of a messy layout)
![Screenshot_from_2...The Contribution Invoice workflow template needed some quick fixes:
* style wise clean up
* some layout fixes
* make CiviCRM logo comply with Display "empowered by CiviCRM" setting
**BEFORE** (bit of a messy layout)
![Screenshot_from_2020-02-17_22-41-59](/uploads/291c8d5752d6aa26de2c96b9fd11961f/Screenshot_from_2020-02-17_22-41-59.png)
**AFTER** (clean professional layout)
![Screenshot_from_2020-02-17_22-52-02](/uploads/231174cee285853c5bf2d86b2e23622c/Screenshot_from_2020-02-17_22-52-02.png)https://lab.civicrm.org/dev/core/-/issues/1620Extend content array of hook_civicrm_alterMailContent2023-03-18T05:03:32ZscardiniusExtend content array of hook_civicrm_alterMailContentOverview
----------------------------------------
Extend `$content` array of alterMailContent hook
Example use-case
----------------------------------------
More fields improve possibilities durign processing the hook.
Current behavio...Overview
----------------------------------------
Extend `$content` array of alterMailContent hook
Example use-case
----------------------------------------
More fields improve possibilities durign processing the hook.
Current behaviour
----------------------------------------
According to doc https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_alterMailContent/ the `$content` array should have mailing_id field/index. However during sending mailings there are only 'html', 'text' and 'subject' indexes.
Proposed behaviour
----------------------------------------
The `$content` is generated by CRM_Mailing_BAO_Mailing->getTemplates() method. This method should always adds more fields, like 'mailing_id' or 'campaign_id' which can be used during processing the hook.
Comments
----------------------------------------
This modification is used for altering urls with utm params, see https://github.com/WeMoveEU/utmaltorhttps://lab.civicrm.org/dev/core/-/issues/1625IDN-Domain Emails - dont pass email check.2022-09-29T14:42:46ZRar9IDN-Domain Emails - dont pass email check.See Issue https://issues.civicrm.org/jira/browse/CRM-15975 and
Email validation is too restrictive (rejects IDN addresses) https://issues.civicrm.org/jira/browse/CRM-16313
Emails with these Characters should pass
https://www.denic.de/...See Issue https://issues.civicrm.org/jira/browse/CRM-15975 and
Email validation is too restrictive (rejects IDN addresses) https://issues.civicrm.org/jira/browse/CRM-16313
Emails with these Characters should pass
https://www.denic.de/en/know-how/idn-domains/idn-character-list/
Last tested with Civicrm 5.22.1 + Drupal 7
Php 7.2x Intl enabled.https://lab.civicrm.org/dev/core/-/issues/1634Evaluate if any indexed fields are unused2022-12-04T23:07:09ZeileenEvaluate if any indexed fields are unused
**Proposal** (note this is being updated based on discussion & comments may refer to an earlier version)
1. Remove the following columns from the xml from civicrm_activity
* phone_id
* phone_number
* relationship_id
1. Remove th...
**Proposal** (note this is being updated based on discussion & comments may refer to an earlier version)
1. Remove the following columns from the xml from civicrm_activity
* phone_id
* phone_number
* relationship_id
1. Remove the index from the xml on
* medium_id
* is_deleted
1. During upgrade we drop the above columns, if empty.
**Follow ups to consider**
2. There are other columns in the civicrm_activity table that are case specific - we might consider indexing is_current_revision & original_id only when CiviCase is enabled
3. I've been doing some tests on searches and found that searching is faster if I DROP the contribution_status_id index - it might be interesting to test the activity_type_id index although I suspect it has a much greater cardinality & is more useful
**Impact of the above**
1. Data would not be lost but api fields would no longer access those fields
2. Developers who might be using them outside of core could be impacted - we can mitigate by communicating on the dev list & perhaps putting checks & deprecation notices onto sites with data in the fields for a few months before making any changes.
3. DB size would be reduced. Note that empty fields contribute notably to table size IF they are indexed
4. Dev confusion & efficiency is improved by not having unused stuff in core.
**Background**
Obviously that's not something we should rush into so I'll have to ping the dev list etc
Looking at our civicrm_activity table it appears that each index has a base size - of around a half a gig. From there, the index size increases based on how much data is in the table. So an index on an empty field is around 57% of the size of our largest index.
There are 5 fields that are indexed + empty in our database for the civicrm_activity table (
```
Original id used for CiviCase
Medium id
Phone id
relationship_id
is_deleted
```
Plus - is_current_revision is effectively null
So my first question is are these all used in other databases - e.g when civicase is in use.
I couldn't spot references to phone_id and it feels 'wrong' to me anyway as I think you would want to either link to the contact or have a hard reference. I wonder if some of these fields are quietly obsolete?
It's very unsafe to drop core fields. However, I'm pondering dropping the indexes on these fields
@DaveD I'd appreciate your thoughts....https://lab.civicrm.org/dev/core/-/issues/1638Introduce "civi.dao.preUpdate" and "civi.dao.preInsert" events2020-05-18T17:53:27ZhaystackIntroduce "civi.dao.preUpdate" and "civi.dao.preInsert" eventsOverview
----------------------------------------
Following on from the action taken some time ago in [Add civi.dao.preDelete event](https://issues.civicrm.org/jira/browse/CRM-20458) (and the proposal raised in #161 to an extent) it woul...Overview
----------------------------------------
Following on from the action taken some time ago in [Add civi.dao.preDelete event](https://issues.civicrm.org/jira/browse/CRM-20458) (and the proposal raised in #161 to an extent) it would be helpful to apply the same `hook_civicrm_pre` + `hook_civicrm_post` pattern to the Symfony events in `CRM_Core_DAO::save()`. I propose CiviCRM introduces `civi.dao.preUpdate` and `civi.dao.preInsert` events to complement the existing `civi.dao.preDelete` event.
Symfony events have advantages over "old-style" hooks of the form `hook_civicrm_preSave`. The old-style hook format is likely to lead some devs to write callbacks in the format `extensionname_civicrm_preSave_table_name` which are difficult to unhook or prevent from running endlessly. Symfony events _can_ be unhooked and therefore make it relatively easy to avoid endless loops such as @colemanw raises concerns about in [his comment](https://lab.civicrm.org/dev/core/issues/161#note_9549). Also, they are largely undocumented and therefore avoid the effort of having to add to the Docs :-)
Example use-case
----------------------------------------
Let's look at what can be done with operations on "Option Value" data:
In both the [CiviCRM Event Organiser](https://github.com/christianwach/civicrm-event-organiser) and the [CiviCRM ACF Integration](https://github.com/christianwach/civicrm-acf-integration) plugins, I'd like to be able to inspect an Option Value _before_ it is saved to the database so that I know what the full state of the Option Value was before the update is applied. Once the edit has happened, there's (obviously) no way of retrieving the required data.
(FWIW, this is to perform actions on synced entities in WordPress rather than modifying the Option Value before it is saved, but the same applies should Option Value data need to be modified.)
Current behaviour
----------------------------------------
As far as I can tell, there isn't a hook available for me to inspect an Option Value data prior to it being created or updated programatically. I _partially_ solve this for changes made via the CiviCRM UI using the equivalent pre-post combination of `hook_civicrm_preProcess` and `hook_civicrm_postProcess`. However changes made via AJAX actions on the main "Event Type Options" listing screen can only be detected _after_ the edit has been made.
Proposed behaviour
----------------------------------------
To mirror the pattern of `hook_civicrm_pre` + `hook_civicrm_post` and `hook_civicrm_preProcess` + `hook_civicrm_postProcess` and the existing pattern of `civi.dao.preDelete` + `civi.dao.postDelete` to complete the set with:
* `civi.dao.preInsert` + `civi.dao.postInsert`
* `civi.dao.preUpdate` + `civi.dao.postUpdate`
Comments
----------------------------------------
PR to follow.5.26.0haystackhaystackhttps://lab.civicrm.org/dev/core/-/issues/1640Update pending contribution status action also send email without warning2020-03-21T19:38:53ZjaapjansmaUpdate pending contribution status action also send email without warningWhen you search for contributions with status pending. You have an action to batch update all contribution statuses to completed. See screenshots
![Screenshot_from_2020-03-10_22-38-02](/uploads/e533c6e42f3ed4d1545f3855d3dd81b8/Screensho...When you search for contributions with status pending. You have an action to batch update all contribution statuses to completed. See screenshots
![Screenshot_from_2020-03-10_22-38-02](/uploads/e533c6e42f3ed4d1545f3855d3dd81b8/Screenshot_from_2020-03-10_22-38-02.png)
![Screenshot_from_2020-03-10_22-39-20](/uploads/d57cd774f224eb3ec62c73dc446628e7/Screenshot_from_2020-03-10_22-39-20.png)
When you do this the system also sends an email receipt to the donor.
**There is no warning about this e-mail.**
Possible solutions:
1. Checkbox for sending e-mails or not (this will give the user control)
2. A warning text indicating that this action also sends an e-mai.
I will see if I can work on option 1.jaapjansmajaapjansmahttps://lab.civicrm.org/dev/core/-/issues/1644Merge related activities not deleted when permanently deleting a contact2023-02-26T05:03:38ZeileenMerge related activities not deleted when permanently deleting a contactWhen a contact is merged into a another contact the following happens
- the data is moved over
- the merged contact is 'deleted'
- an activity is created of type 'Contact Merged' - source is logged in contact, target is the retained...When a contact is merged into a another contact the following happens
- the data is moved over
- the merged contact is 'deleted'
- an activity is created of type 'Contact Merged' - source is logged in contact, target is the retained contact
- If the merged contact is being deleted to trash an activity is created of type 'Contact Deleted by Merge' - source is logged in contact, target is deleted contact
When we later fully delete the contact deleted-by-merge only activities linked to no other contact are deleted - in other words the 'Contact Deleted by Merge' activity remains, linked to the source contact.
I believe this activity should be deleted on true-death , as it would not be present had they been fully deleted in the first instance
@pfigel @DaveDhttps://lab.civicrm.org/dev/core/-/issues/1653Civi::paths() - Allow bare variable lookup via getUrl/getPath2023-02-24T05:03:58ZtottenCivi::paths() - Allow bare variable lookup via getUrl/getPathOverview
----------------------------------------
The `Civi::paths()->getUrl(...)` and `Civi::paths()->getPath(...)` have a quirky interpretation of bare variable expressions (eg `getPath('[civicrm.packages]')`).
Example use-case
------...Overview
----------------------------------------
The `Civi::paths()->getUrl(...)` and `Civi::paths()->getPath(...)` have a quirky interpretation of bare variable expressions (eg `getPath('[civicrm.packages]')`).
Example use-case
----------------------------------------
```
# (A) With a file/folder/subpath
cv ev "echo Civi::paths()->getUrl('[civicrm.packages]/foo/bar');"
# (B) No slash, no dot
cv ev "echo Civi::paths()->getUrl('[civicrm.packages]');"
# (C) With a slash
cv ev "echo Civi::paths()->getUrl('[civicrm.packages]/');"
# (D) With a slash and dot
cv ev "echo Civi::paths()->getUrl('[civicrm.packages]/.');"
```
Current behavior
----------------------------------------
In scenarios (A), (C), and (D), the value of `[civicrm.packages]` is substituted. But in situation (B), it is treated as a literal file-name and given the default prefix.
```
$ cv ev "echo Civi::paths()->getUrl('[civicrm.packages]');"
http://site/[civicrm.packages]
```
Proposed behavior
----------------------------------------
All examples -- including (B) -- should do substitution.
The `Civi\Core\PathsTest` should be expanded to check scenario (B).
Comments
----------------------------------------
[Historically](https://lab.civicrm.org/dev/wordpress/issues/47#note_33046), when `getPath()`/`getUrl()` were first drafted to support expressions like `[civicrm.files]/persist/contribute`, the primary concerns were (1) backward compatibility for older absolute+relative expressions (without any `[foo]` expressions) and (2) new use-cases like (A). The `[foo]` notation was conceived as an *optional prefix* (with an *implied default*) - and not as a straight-up *variable*. And if you *just* wanted a raw variable, I'd've imagined it'd be faster to call `getVariable()` (bypass the string-munging with `getPath()` etc).
OTOH, if you learned of this API by skimming docblocks or examples (without that historical context), then it'd be natural to assume that (B) would work, and it really is a more approachable interface that way.
Strictly speaking, it is a change in the contract for an obscure edge-case: if you had a file named `/var/www/sites/default/files/civicrm/[foo]`, and if you requested `getPath('[foo]')`, then it currently resolves to the file. With this change, it would interpret `[foo]` as a variable - the variable is probably undefined, which leads to an exception. You'd have to rewrite the call as `getPath('[civicrm.files]/[foo]')`. That's an exceedingly marginal edge-case, and I don't really think it's worth preserving.https://lab.civicrm.org/dev/core/-/issues/1663PHP warning on Add relationship form2020-04-05T00:59:27ZjitendraPHP warning on Add relationship formTo replicate - simply open a relationship form on a new window.
![image](/uploads/7ec093404a3d1f14892583b8a001aca6/image.png)
This seems to be related to the addition of option_context in https://github.com/civicrm/civicrm-core/pull/11...To replicate - simply open a relationship form on a new window.
![image](/uploads/7ec093404a3d1f14892583b8a001aca6/image.png)
This seems to be related to the addition of option_context in https://github.com/civicrm/civicrm-core/pull/11853/files#diff-f9397c2b103c68ffb588679b5d4784a25.25.0jitendrajitendrahttps://lab.civicrm.org/dev/core/-/issues/1665MySQL uses filesort index when building the query which can cause performance...2020-08-13T00:03:03Zjustinfreeman (Agileware)MySQL uses filesort index when building the query which can cause performance issuesMySQL uses filesort index when building the query which can cause performance issues. This can be solved by simply removing the GROUP BY and ORDER BY options from query in **function alphabetQuery**, **CRM/Contact/BAO/Query.php** see htt...MySQL uses filesort index when building the query which can cause performance issues. This can be solved by simply removing the GROUP BY and ORDER BY options from query in **function alphabetQuery**, **CRM/Contact/BAO/Query.php** see https://github.com/civicrm/civicrm-core/blob/master/CRM/Contact/BAO/Query.php#L5012
Original query:
~~~
$query = "SELECT DISTINCT LEFT(contact_a.sort_name, 1) as sort_name
{$sqlParts['from']}
{$sqlParts['where']}
{$sqlParts['having']}
GROUP BY sort_name
ORDER BY sort_name asc";
~~~
Change query to:
~~~
$query = "SELECT DISTINCT LEFT(contact_a.sort_name, 1) as sort_name
{$sqlParts['from']}
{$sqlParts['where']}
{$sqlParts['having']}";
~~~
This change has no visible impact on the search results pager or listing.
The query was generated by CiviCRM when doing an Advanced Search and selecting 6 CiviCRM Groups (not Smart Groups) - displaying results as contacts.
Before this change, note the "Using filesort" on 24754 rows. Query takes longer than 90 seconds to complete - can trigger a PHP timeout.
~~~
MariaDB [ajpulmse_crm]> explain SELECT DISTINCT LEFT(contact_a.sort_name, 1) as sort_name FROM civicrm_contact contact_a LEFT JOIN civicrm_group_contact `civicrm_group_contact-5e742600a44d
7` ON (contact_a.id = `civicrm_group_contact-5e742600a44d7`.contact_id AND `civicrm_group_contact-5e742600a44d7`.status IN ('Added')) LEFT JOIN civicrm_group_contact `civicrm_group_contact-
5e742600a47a7` ON (contact_a.id = `civicrm_group_contact-5e742600a47a7`.contact_id AND `civicrm_group_contact-5e742600a47a7`.status IN ('Added')) LEFT JOIN civicrm_group_contact `civicrm_gr
oup_contact-5e742600a4a78` ON (contact_a.id = `civicrm_group_contact-5e742600a4a78`.contact_id AND `civicrm_group_contact-5e742600a4a78`.status IN ('Added')) LEFT JOIN civicrm_group_contact
`civicrm_group_contact-5e742600a4d39` ON (contact_a.id = `civicrm_group_contact-5e742600a4d39`.contact_id AND `civicrm_group_contact-5e742600a4d39`.status IN ('Added')) LEFT JOIN civicrm_g
roup_contact `civicrm_group_contact-5e742600a4fde` ON (contact_a.id = `civicrm_group_contact-5e742600a4fde`.contact_id AND `civicrm_group_contact-5e742600a4fde`.status IN ('Added')) LEFT JO
IN civicrm_group_contact `civicrm_group_contact-5e742600a529d` ON (contact_a.id = `civicrm_group_contact-5e742600a529d`.contact_id AND `civicrm_group_contact-5e742600a529d`.status IN ('Adde
d')) WHERE ( ( ( ( `civicrm_group_contact-5e742600a44d7`.group_id IN ("498") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a47a7`.group_id IN ("499") ) ) ) OR ( ( ( `civicrm_group_contact-5
e742600a4a78`.group_id IN ("505") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a4d39`.group_id IN ("504") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a4fde`.group_id IN ("503") ) ) ) OR
( ( ( `civicrm_group_contact-5e742600a529d`.group_id IN ("502") ) ) ) ) AND (contact_a.is_deleted = 0) GROUP BY sort_name;
+------+-------------+-------------------------------------+------+----------------------------+----------------------------+---------+---------------------------+-------+------------------
-----------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
|
+------+-------------+-------------------------------------+------+----------------------------+----------------------------+---------+---------------------------+-------+-----------------------------------------------------------+
| 1 | SIMPLE | contact_a | ref | index_is_deleted_sort_name | index_is_deleted_sort_name | 1 | const | 24754 | Using where; Using index; Using temporary; Using filesort |
| 1 | SIMPLE | civicrm_group_contact-5e742600a44d7 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a47a7 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a4a78 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a4d39 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a4fde | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Distinct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a529d | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Distinct |
+------+-------------+-------------------------------------+------+----------------------------+----------------------------+---------+---------------------------+-------+-----------------------------------------------------------+
7 rows in set, 1 warning (0.00 sec)
~~~
After this change, note absence of the "Using filesort". Query completes in 5 seconds or less.
~~~
MariaDB [ajpulmse_crm]> explain
-> SELECT DISTINCT LEFT(contact_a.sort_name, 1) as sort_name FROM civicrm_contact contact_a LEFT JOIN civicrm_group_contact `civicrm_group_contact-5e742600a44d7` ON (contact_a.id = `civ
icrm_group_contact-5e742600a44d7`.contact_id AND `civicrm_group_contact-5e742600a44d7`.status IN ('Added')) LEFT JOIN civicrm_group_contact `civicrm_group_contact-5e742600a47a7` ON (contact
_a.id = `civicrm_group_contact-5e742600a47a7`.contact_id AND `civicrm_group_contact-5e742600a47a7`.status IN ('Added')) LEFT JOIN civicrm_group_contact `civicrm_group_contact-5e742600a4a78`
ON (contact_a.id = `civicrm_group_contact-5e742600a4a78`.contact_id AND `civicrm_group_contact-5e742600a4a78`.status IN ('Added')) LEFT JOIN civicrm_group_contact `civicrm_group_contact-5e
742600a4d39` ON (contact_a.id = `civicrm_group_contact-5e742600a4d39`.contact_id AND `civicrm_group_contact-5e742600a4d39`.status IN ('Added')) LEFT JOIN civicrm_group_contact `civicrm_grou
p_contact-5e742600a4fde` ON (contact_a.id = `civicrm_group_contact-5e742600a4fde`.contact_id AND `civicrm_group_contact-5e742600a4fde`.status IN ('Added')) LEFT JOIN civicrm_group_contact `
civicrm_group_contact-5e742600a529d` ON (contact_a.id = `civicrm_group_contact-5e742600a529d`.contact_id AND `civicrm_group_contact-5e742600a529d`.status IN ('Added')) WHERE ( ( ( ( `civicr
m_group_contact-5e742600a44d7`.group_id IN ("498") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a47a7`.group_id IN ("499") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a4a78`.group_id IN
("505") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a4d39`.group_id IN ("504") ) ) ) OR ( ( ( `civicrm_group_contact-5e742600a4fde`.group_id IN ("503") ) ) ) OR ( ( ( `civicrm_group_conta
ct-5e742600a529d`.group_id IN ("502") ) ) ) ) AND (contact_a.is_deleted = 0);
+------+-------------+-------------------------------------+------+----------------------------+----------------------------+---------+---------------------------+-------+------------------
------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
|
+------+-------------+-------------------------------------+------+----------------------------+----------------------------+---------+---------------------------+-------+------------------
------------+
| 1 | SIMPLE | contact_a | ref | index_is_deleted_sort_name | index_is_deleted_sort_name | 1 | const | 24754 | Using index; Usin
g temporary |
| 1 | SIMPLE | civicrm_group_contact-5e742600a44d7 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Dist
inct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a47a7 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Dist
inct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a4a78 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Dist
inct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a4d39 | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Dist
inct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a4fde | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Dist
inct |
| 1 | SIMPLE | civicrm_group_contact-5e742600a529d | ref | UI_contact_group | UI_contact_group | 4 | ajpulmse_crm.contact_a.id | 1 | Using where; Dist
inct |
+------+-------------+-------------------------------------+------+----------------------------+----------------------------+---------+---------------------------+-------+------------------
------------+
7 rows in set (0.00 sec)
~~~
Agileware ref: CIVICRM-14575.30.0https://lab.civicrm.org/dev/core/-/issues/1693allow inline help text title to be overriden2020-04-14T15:08:10Zlcdweballow inline help text title to be overridenExtend the intent of this PR -- to support overriding the inline help text title too.
https://github.com/civicrm/civicrm-core/pull/13488/filesExtend the intent of this PR -- to support overriding the inline help text title too.
https://github.com/civicrm/civicrm-core/pull/13488/fileslcdweblcdwebhttps://lab.civicrm.org/dev/core/-/issues/1696Update attachment message on mailing form.2020-04-10T03:15:49ZjitendraUpdate attachment message on mailing form.The Attachment tab on the Mailing page displays a message on the screen to add new files. But there is no indication of the size of the file which could be attached here. Larger file attachments lead to failure in the mailing process and...The Attachment tab on the Mailing page displays a message on the screen to add new files. But there is no indication of the size of the file which could be attached here. Larger file attachments lead to failure in the mailing process and eventually results in not sending mails to the recipients.
![image](/uploads/ab7354a0ecb366409ce0994ee58b6471/image.png)
The above message should be displayed something like -
>Alternatively, you may add new files using drag/drop. Each file must be less than <max_size>M in size. For larger files, please upload it somewhere else and paste a link in the body of this mailing.
Normal email form do have this specified -
![image](/uploads/6534588f143cb4241497d62d7795fef1/image.png)5.26.0https://lab.civicrm.org/dev/core/-/issues/1697set is_deceased to not null in schema and upgrade script2020-04-09T23:07:11ZMichael McAndrewset is_deceased to not null in schema and upgrade scriptOver the past few years, compelling evidence has has emerged to suggest that Zombies do exist in CiviCRM databases. Here are a couple of the most high profile cases:
- https://civicrm.org/extensions/zombie-check
- https://civicrm.org/bl...Over the past few years, compelling evidence has has emerged to suggest that Zombies do exist in CiviCRM databases. Here are a couple of the most high profile cases:
- https://civicrm.org/extensions/zombie-check
- https://civicrm.org/blog/simonparkervitiligosocietyorguk/solution-all-recipients-not-showing-up-for-sending-mass-email
Whilst various attempts have been made to eliminate the scourge of zombies once and for ever, the most notable of which being https://lab.civicrm.org/dev/core/-/blob/master/CRM/Upgrade/Incremental/sql/4.7.beta2.mysql.tpl#L15-17 ...
```sql
-- CRM-17147 People with empty deceased-flag ('is null') get removed from recipient list of a mailing
UPDATE civicrm_contact SET is_deceased = 0 WHERE is_deceased IS NULL;
ALTER TABLE civicrm_contact ALTER COLUMN is_deceased SET DEFAULT 0;
```
... it has come to light that Zombies persist across CiviCRM instances.
Although the upgrade script defaults all existing fields to 0, and new sites have a default of 0, this does not prevent the columns from being asssigned a null value.
:coffin: :cross:
PR here that alters the definition for new tables and adds another upgrade step: https://github.com/civicrm/civicrm-core/pull/170255.26.0https://lab.civicrm.org/dev/core/-/issues/1703Clarify difference between regular and "system" extensions2020-04-15T20:50:17ZjaapjansmaClarify difference between regular and "system" extensionsI discovered that CiviCRM version 5.24 shipps with an extension called Sequential Credit Notes. See screenshots below
![Screenshot_20200412_213322](/uploads/0ba5e27d521fab0b7a1424c0b6287ae2/Screenshot_20200412_213322.png)
![Screenshot_...I discovered that CiviCRM version 5.24 shipps with an extension called Sequential Credit Notes. See screenshots below
![Screenshot_20200412_213322](/uploads/0ba5e27d521fab0b7a1424c0b6287ae2/Screenshot_20200412_213322.png)
![Screenshot_20200412_213825](/uploads/07c8d71eccd1e60e1669331d584d1862/Screenshot_20200412_213825.png)
However when I looked this up in the manage extension page I did not see this extension:
![Screenshot_20200412_213642](/uploads/a18fb75c37fec661a7d72df199faa524/Screenshot_20200412_213642.png)
I discovered that this extension has the tag `mgmt:hidden` and that this was the reason this extension did not show up in the manage extension screen.
I don't know the reasoning behind an hidden extension and I believe they should at least be visible to an system administrator
because the purpose of an extension is that you can disable it and replace it by another extension. This way CiviCRM stays flexible and of use in different contexts.
That said I understand that there are reasons for shipping a certain extension with core and enable those by default.
So I would propose three changes:
1. Add an extra tab on the manage extension screen called System extension (with a warning sign).
2. Probably rename the tag `mgmt:hidden` to `mgmt:system`
3. Update the documentation discouraging disabling system extensions
Regarding 1: A screenshot of the prposal is below and a PR at https://github.com/civicrm/civicrm-core/pull/17059
![Screenshot_20200412_214828](/uploads/ae4c1828e1fdfe6b31e04e8101130f9d/Screenshot_20200412_214828.png)
@eileen @BjoernE @ErikHommel @MikeyMJCO @michaelmcandrew @pfigel @totten what do you think of this proposal?jaapjansmajaapjansmahttps://lab.civicrm.org/dev/core/-/issues/1705APIv4 - how do I interact with option values???2023-03-10T05:03:23ZeileenAPIv4 - how do I interact with option values???In apiv3 I can filter on an option value by passing in the name. So
```
civicrm_api3('Contribution', 'get', ['contribution_status_id' => 'Pending'])
```
will retrieve me Pending contributions. By the same token the v3 api returns me t...In apiv3 I can filter on an option value by passing in the name. So
```
civicrm_api3('Contribution', 'get', ['contribution_status_id' => 'Pending'])
```
will retrieve me Pending contributions. By the same token the v3 api returns me the status of the contributions.
In the api explorer I don't see a way to do that. I DO see a way to JOIN the optionValue table in - but that literally joins the table in from the looks of so I would wind up with an unindexed join in my query
![Screen_Shot_2020-04-15_at_1.57.36_PM](/uploads/449ed24187e3fbdd5f0bcfdd9c2efc18/Screen_Shot_2020-04-15_at_1.57.36_PM.png)
@colemanw I know you hate the apiv3 double loading but what is the apiv4 expectation here? I really don't want to have to do endless CRM_Core_PseudoConstant::getKey() calls on every line....https://lab.civicrm.org/dev/core/-/issues/1706APIv4 MessageTemplates & workflow_ids2022-06-24T03:28:18ZeileenAPIv4 MessageTemplates & workflow_idsMy expectation is that using one of the apis I could do something like
```
MessageTemplate::get()->addSelect('workflow_id', '=', 'participant_confirm');
```
And it would retrieve it (avoiding any nasty joins per https://lab.civicrm.or...My expectation is that using one of the apis I could do something like
```
MessageTemplate::get()->addSelect('workflow_id', '=', 'participant_confirm');
```
And it would retrieve it (avoiding any nasty joins per https://lab.civicrm.org/dev/core/-/issues/1705) - However, I'm 'up against' the fact the workflow_ids were done in a really weird way.
The 'normal' design would be one option group for message templates & then we would have options against that for each defined workflow_template, with a component id as a filter & the value being meaningful.
Instead MessageTemplates break the option_group structure by using id as the value and using different option groups to separate by components.
I guess options are
1) fix it - update all values to be equal to the ids in an upgrade script, define a normal pseudoconstant in the xml & switch code accross
2) add a pseudoconstant that defines the join as it actually is This kinda says 'never gonna fix you up, never gonna let you down, never gonna turn around & standardise you'
3) Add the correct values for the component ids to the option_values, add a new function for pseudoconstant callback that handles it - still aspire to fix properly one day.
It does depend a bit on https://lab.civicrm.org/dev/core/-/issues/1705 and how much the api will or won't mask the underlying structurehttps://lab.civicrm.org/dev/core/-/issues/1709Better localised address handling.2023-04-30T05:03:22ZhomotechsualBetter localised address handling.Overview
----------------------------------------
_Currently, address forms in CiviCRM are built from a US-centric default set of form fields, currently we're using the translation system to alter the titles of these for different region...Overview
----------------------------------------
_Currently, address forms in CiviCRM are built from a US-centric default set of form fields, currently we're using the translation system to alter the titles of these for different regions (e.g a string translation exists for State/Province to County for EN_GB)._
_This ends up giving us a bad DX and bad UX we end up in a situation where even US address fields end up with a "County" field if we're using the EN_GB translation, not to mention that we're violating a rather fundamental aim of translation in that we're not actually translating - we're substituting a different string for a localised requirement that's unconnected to the language in use._
Proposed Solution
----------------------------------------
_We should investigate using a library e.g: [CommerceGuys/Addressing](https://github.com/commerceguys/addressing) (or another mechanism) to provide country-aware address forms/fields which work for CiviCRM's global community._https://lab.civicrm.org/dev/core/-/issues/1711Display SMS segment count when constructing a Mass SMS2021-08-23T19:49:34ZJohn TwymanDisplay SMS segment count when constructing a Mass SMSOverview
----------------------------------------
SMS messages over 160 characters in length are split into 153 character segments. If you use non-GSM characters (eg. ideograms, curly quotes, etc.) those messages are sent in UCS-2 encod...Overview
----------------------------------------
SMS messages over 160 characters in length are split into 153 character segments. If you use non-GSM characters (eg. ideograms, curly quotes, etc.) those messages are sent in UCS-2 encoding which limits segments to 67 characters.
SMS providers (Clickatel, Twilio, Nexmo, etc.) charge *per segment*.
I propose a modification to the New Mass SMS wizard to display the number of SMS segments required to send a Mass SMS on the *SMS Content* step of the New Mass SMS wizard. It will give users better visibility of the cost of their desired message.
Example use-case
----------------------------------------
1. Click on **Mailings -> New Mass SMS**.
2. Step through the first step of the wizard (Select Recipients).
3. On the SMS Content step, as the SMS message is typed in, the number of segments required is displayed and dynamically updated alongside the display of the number of characters entered.
Current behaviour
----------------------------------------
As a SMS message is entered Civi displays the number of characters used. There is no indication of the number of message segments.
Proposed behaviour
----------------------------------------
Modify [the maxCharInfoDisplay function in CRM/Contact/Form/Task/SMSCommon.tpl](https://github.com/civicrm/civicrm-core/blob/a3628d0b7a4d5d253fa38d87ddc7eb2525ef2775/templates/CRM/Contact/Form/Task/SMSCommon.tpl#L67) that dynamically displays the number of characters entered to also calculate and display how many segments are required.
![civisms-improvement-mockup](/uploads/c2bc774996a3b8a659c63e9e190abfd6/civisms-improvement-mockup.png)
The simplest approach might be to adopt this code ([thanks StackOverflow](https://stackoverflow.com/questions/12673120/how-to-detect-non-gsm-7-bit-alphabet-characters-in-input-field/12673229)):
`gsm = "@£$¥èéùìòÇØøÅåΔ_ΦΓΛΩΠΨΣΘΞ^{}\[~]|€ÆæßÉ!\"#¤%&'()*+,-./0123456789:;<=>?¡ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÑܧ¿abcdefghijklmnopqrstuvwxyzäöñüà";
var letter = 'a';
var letterInAlfabet = gsm.indexOf(letter) !== -1;`
We could also consider adding a help icon to trigger a modal that provides some basic information about SMS segments, "weird" characters, etc. too.
Comments
----------------------------------------
The mockup I've attached is a good example of how a message that looks like it fits within a single segment can produce unexpected outcomes. The use of curly quotes push 148 characters across three segments, tripling the cost per recipient.
This happens relatively frequently as people often copy/paste content from Outlook, Gmail, Word, etc., documents/messages.5.40.0https://lab.civicrm.org/dev/core/-/issues/1715CiviCase dashboard/find case: Additional columns and filters needed2022-05-11T14:39:19ZDetlev SieberCiviCase dashboard/find case: Additional columns and filters neededIn order to improve the workflow, the following should be added to the find case / dashboard functionality of CiviCase:
New column: "Case_ID" -> with sorting
New filter: "Next Sched. assignee"
* This should refer to the "Next Sched." ...In order to improve the workflow, the following should be added to the find case / dashboard functionality of CiviCase:
New column: "Case_ID" -> with sorting
New filter: "Next Sched. assignee"
* This should refer to the "Next Sched." actitivity from the list.
* The filter list should contain "myself" as the first entry, and then should display all other assignee contained in the activities displayed on the case list.
This functionality should be available on:
* case dashboard
* search results (case search)
* case dashlets