# Question
Title: CiviCRM - Mailpoet plugin conflict with Html2Text
We upgraded CiviCRM to the most recent version back in November and had the problem in the related ticket with ANY report failing when ANY filter was enabled. The error was:

Error thrown

Call to undefined method Html2Text\Html2Text::getText()

Another user reported finding this was a conflict with MailPoet (newsletter plugin) and we confirmed same. We had a workaround available in that the newsletter is only active for part of the month, so we deactivated MailPoet plugin when we needed to run reports.

Unfortunately, we didn't notice that it also affected the automatic (& manual) issuing of receipt emails with the same issue/error. I've spent the evening manually sending 100 email receipts. This isn't viable to continue. MailPoet is at latest version, CiviCRM is currently running 5.55.0 on a Wordpress install running 6.1.1. Issue present with PHP 7.4 & also after updated to 8.1

Related to this question

# Answer
> 1 votes
We managed to fix it by replacing the Html2Text\Html2Text with Civi version.

```
cd wp-content/plugins/mailpoet/vendor/soundasleep/html2text/src

cp ../../../../../civicrm/civicrm/vendor/html2text/html2text/src/Html2Text.php .

```

---
Tags: civicontribute, civireport, php, receipts
---


# Question
Title: How is CiviCRM different in Drupal, Joomla, Backdrop, and WordPress?
I understand that CiviCRM is the same app regardless of which CMS it runs under. But I've been told that there are important differences in the way it integrates with the four. What are the main differences? Are there downsides to choosing WordPress, Backdrop or Joomla instead of Drupal?

# Answer
> 32 votes
**Availablity of extensions**

The biggest difference is the availability of extensions/add-ons/extra-integrations -- there are more addons for Civi+Drupal, but the differences are shrinking over time.

Civi 1.x didn't originally support its own extension mechanism - the only option was to write a Drupal module. Consequently, Civi-Drupal modules grew first/fastest. The platform now supports plugins on Joomla (Civi v3.3+?) and WordPress (Civi v4.6+) the same way.

There are a few big-ticket addons that can make a difference for site-builders:

* CiviCRM comes with many out-of-the-box forms for event registration, donations, etc. but if you'll be making a lot of customized forms, then the Drupal module `webform_civicrm` is pretty cool. There are no published solutions which provide as much flexibility on Joomla/WordPress.
* Drupal and WordPress have CLI frameworks (`drush`, `wp-cli`) which are quite handy for developers and sysadmins. Joomla CLI is still immature.
* Drupal Views and Rules are substantial systems which have Civi integrations.
* WP BuddyPress is a substantial system which has an upcoming Civi integration.

However, the importance of these differences has diminished since ~v4.2 -- when Civi introduced a flexible, cross-CMS extension system.

**Integration features**

There are some differences which arise because of distinctive features/norms in each CMS community, e.g.

* In WordPress, it's pretty common to embed content in your web-pages using short-codes. Civi has several short-codes in WP.
* In Drupal, it's pretty common to embed content in your web-pages using blocks. Civi has several blocks in Drupal.
* In Drupal, the core CMS has decent support for "roles" and "permissions", so Civi uses this. In Joomla/WordPress, these are regarded more as "hidden/advanced" functionality, so Civi has to fill in some gaps.

**Installation process**

The installers are a bit different -- web-based installation is easier in Joomla (because there are fewer forms to fill out), but it's more flexible in Drupal/WP. CLI-based installation is easier in Drupal/WP.

**Testing**

The core system is the same across all CMSs, but occasionally there are bugs in the CMS integration code. Most of the testing is performed on Drupal/CiviCRM, and it may take a bit longer to identify/resolve bugs in the WordPress and Joomla integrations.

# Answer
> 14 votes
Besides what Tim wrote, it is currently still important to note that most people use it with Drupal. This means Drupal integration has the least amount of bugs and more active maintenance, which is even more significant in the context of the long term support (LTS) releases.

# Answer
> 10 votes
I think the big differences relate to architectural differences between the three, and of course all come about as you increasingly seek to integrate between the CMS side and the CRM side. If you just want to use the core CRM it is self contained. So in Joomla you really use plugins (that respond to event triggers) and modules. Once key difference is that Joomla webmasters are used to systems where they can very easily use layout overrides to control html outputs and with the CiviCRM hook system things are different. You can't just make a layout override and put it in the template html folder, it's a bit more work. If you look at the frontend code you see that all it does is basically provide a container for code produce by the CiviCRM templating system, there is no integration at all.

Also the integration with the Joomla ACL is (from my understanding) a bit different, for most cases you can use the Joomla ACL and not think about the CiviCRM ACL at all.

# Answer
> 4 votes
I don't think Backdrop was available when this question was asked, but for the sake of making this complete:

# Backdrop

* Very similar to Drupal 7 integration, including `drush`, `Views` and `Webform CiviCRM` (Note that the Drupal 7 `CiviCRM Entity` module has *not* been ported yet)
* Some visual improvements have been added (e.g. CiviCRM menu icon to match Backdrop menu style, CiviCRM version reported in Backdrop system status report, CiviCRM notifications have been styled to fit Backdrop's message style)
* Some new modules underway to provide CiviCRM Contribution and Event Registration pages to Backdrop as fields and blocks. This can make it easier to integrate CiviCRM content into Backdrop pages, giving more control over display and URLs, etc. *Inspired by the Wordpress shortcodes functionality*

# Answer
> 2 votes
Agree with most that was said here. Drupal has most extensions and users, and at the moment the integration is most thorough. WordPress is probably growing fast and has the biggest potential looking at the usage of WordPress in general. I have found that customers that put a lot of importance on community sharing, security, access limitations etc. tend to go for Drupal and do some CiviCRM customizations too. Most customers that want standard CiviCRM probably go for WordPress. But that might be more of a snapshot of this day and age than a decision based on structure :-)

# Answer
> 1 votes
In my opinion, the differences are somewhat historical and somewhat incidental. The fact that a few more integrations exist with one CMS over another should be a small consideration in the overall scope of your website discovery process. Obviously the more users there are on any given platform the more integrations and support there will be for that audience long term. A great example of this is the Gravity Forms integration for WordPress from CiviVIP. Built as the result of demand from users of that platform for an integrated form solution for CiviCRM.

# Answer
> 0 votes
Anybody want to chime in on which CMS is really being supported these days? It seems that PHP8 is having similar effects like what happened back in the day with PHP4 ( broke so much stuff that a lot people just abandoned their PHP3 projects!)

I've tried the latest "BackDrop" port and though Backdrop is running fine on PHP8, the CiviCMS certainly isn't ...

I'm pondering trying Joomla or WP, but already wasted many hours getting CIvi running (somewhat!) on BackDrop/PHP8 ... certainly it's way past the time to even consider building anything that only works in PHP7...

---
Tags: wordpress, drupal, joomla, backdrop
---


title: Administer Payment Processor Page Error

text:
# Question
Title: Administer Payment Processor Page Error
I am installing a new installation of Civicrm 5.58.0 on Wordpress 6.1.1. I am trying to add Stripe as a payment processor on the "Administer Payment Processor" page and the only processor I can add is Paypal - Website Payment Pro. I have the Stripe extension installed along with the associated other extensions required. However, when I chose "Stripe" as the processor when adding a new processor, the screen immediately refreshes and redirects back to the "Administer Payment Processor" page without adding Stripe... I am not even able to enter any Stripe specifics because as soon as I select Stripe in the dropdown, the page redirects. This happens on all the other processors as well. As a test, I installed Authorize.net's extension and tried to add that one as a processor with the same redirect occurring as soon as selected it in the dropdown.

I get no error in the console or Civicrm log files, apache logs or syslog. Any help would be appreciated.

# Answer
Are you using the experimental 'CiviCRM Administration UI' extension? There was a problem like this in 5.58 that is fixed for 5.59. Try disabling that extension, or applying https://github.com/civicrm/civicrm-core/pull/25340
> 1 votes

---
Tags: civicontribute, payment-processor, stripe
---


title: Batch retrying Stripe webhooks

text:
# Question
Title: Batch retrying Stripe webhooks
Sometimes you have webhooks from Stripe, or other processors that use the *civicrm\_paymentprocessor\_webhook* table, that were not successfully processed and need to be re-tried. This is most commonly observed with recurring contributions and them showing in pending status in CiviCRM.

I know I can replay individual contributions from the https://example.org/wp-admin/admin.php?page=CiviCRM&q=civicrm%2Fa#/paymentprocessorWebhook but what if I want to audit and check a batch of transactions at once?

# Answer
> 2 votes
The webhook UI resets the *processed\_date* and *status* columns in *civicrm\_paymentprocessor\_webhook* table when you click "Retry".

Here is how you can target failed transactions and replay them in batch webhook table.

## Get a list of failed transactions

Get the transaction ID's from a contribution report like this and select the transaction ID column:

## Download the transactions from civicrm\_paymentprocessor\_webhook table

You can specify the date range in question.

```
SELECT * FROM `civicrm_paymentprocessor_webhook` WHERE `payment_processor_id` = 1 AND `created_date` LIKE '%2023-02%' AND `trigger` = 'invoice.payment_succeeded'

```

## Compare to get event ID's to retry

Within the webhook table there is an identifier column. Use text to columns to split the transaction ID's on ":" into their own columns. It may have Invoice ID, Charge ID, and subscription ID.

You will want to compare on Invoice ID (what Civi currently has in transaction field). Use VLOOKUP or similar method to do this and put the event\_id column to the right of the invoice column you are using as your key.

example formula: =VLOOKUP(E2,civicrm\_paymentprocessor\_webhoo!I:J,2,FALSE)

Now that you've returned the event id's, combine them and format to be put added to a MySQL statement. Your result will looks like: (using dummy event ID's)

```
'evt_1','evt_2','evt_3','evt_4','evt_5'

```

## Reset and Retry event ID's in MySQL

Using dummy data below, event ID's are normally like evt\_3MXs5MGUXvR5yNII0RwNHBiM.

Now drop the event id's into a MySQL statement like below:

```
UPDATE `civicrm_paymentprocessor_webhook` SET
`processed_date` = NULL,
`status` = 'new'
WHERE `payment_processor_id` = '1' AND `created_date` LIKE '%2023-02%' AND `trigger` = 'invoice.payment_succeeded' AND `event_id` IN ('evt_1','evt_2','evt_3','evt_4','evt_5');

```

The Process PaymentProcessor Webhooks scheduled job will now look thru these entries that were reset and retry them. You can let the job run or manually kick off by "executing now."

While the root cause of why transactions do not process on the first run should be investigated, sometimes you just need to target and retry transaction quickly. This process takes about 20 minutes to do and is much faster and if you have a lot of transactions that need re-processing (I've had cases where I needed to do over 100).

---
Tags: payment-processor, recurring-contributions, stripe
---


# Question
Title: CiviCase Dashboard exports all cases instead of the results
If I start at the CiviCase dashboard, select "All Cases", then select a Status - I get the search results that I would expect. Something like all the cases of Type X that have status "Awarded"

If I select All, and then Export Cases from the Actions menu, it exports all the cases of any status or type.

The export works as expected from any other search or if I use "My Cases" from the Case Dashboard. I'm thinking this must be a bug, but I'm unsure!

# Answer
Yes this is a bug. While it's picking up the status for the search the search form field for status isn't getting filled in so it gets lost on the next page for export. The url should be using case\_type\_id and status\_type\_id instead of type and status. Can you file an issue at https://lab.civicrm.org/dev/core/-/issues/new and reference this stackexchange post?
> 1 votes

---
Tags: civicase, export
---


title: Cannot Complete Upgrade

text:
# Question
Title: Cannot Complete Upgrade
Earlier I wrote in with a question about a database upgrade failing because of date constraints (Upgrade to 5.57.1 Fails With Error executing task "Fix dangerous delete cascade"). I did not think that this failure left the database partially upgraded. In retrospect this make sense but it did not occur to me at the time.

I think I tried with both cv and the CiviCRM Upgrade page (/civicrm/upgrade).

Now after fixing the dates I am unable to upgrade the database because the database is in a partially upgraded state. I get the following error with CV.

> Found CiviCRM database version 5.57.alpha1.upgrade.

> Found CiviCRM code version 5.57.3.

> In UpgradeDbCommand.php line 80:

> Cannot resume upgrade: The log file (/root/.cv/upgrade/dcda99f3a7060a8eeb8c255df45c3907.dat) is missing. Consider a regular upgrade (without --retry or --skip).

I have tried both --skip and --retry and I get the same message.

I have not removed any files from the /root/.cv/upgrade/ directory and this is the only CiviCRM install I have on this server. There is another dat file in the directory but I do not think it is the right one as it appears to shown a successful upgrade.

Reverting back to a database before attempting the upgrade is not a viable option.

Is there anything I can do? I appreciate any help with this.

Thanks!

# Answer
You can try `UPDATE civicrm_domain SET version='5.56.0';` in mysql and then run the upgrade normally. Sometimes this causes different problems because some steps are not rerunnable, but I don't think that will happen between 5.56 and 5.57.
> 1 votes

---
Tags: upgrade, database
---


title: How do I reset directory settings?

text:
# Question
Title: How do I reset directory settings?
Discovering a problem with image uploads (no directory available in CK) I thought I should set the Resource Directory for images as per recommended using a variable, so I set it to "\[cms.root\]/images".

Now our site is not loading, giving a `Cannot resolve path using "cms.root.path"`.

1. I think Civi really needs to verify that the directory exists before saving the setting
2. How do I reset that directory to something that makes the site live again?

I only changed the path to the image directory.

By overriding the image URL in `civicrm.settings.php` I managed to get the admin interface up again. But the site is still erroring out with `Cannot resolve path using "cms.root.path"`. And the values in the Resource URL dialogue are read-only since they are overridden.

Are the original setting stored in the database? How can I change it?

# Answer
In the database for your installation there is a table named `civicrm_setting`. Using SequelPRO, myPhpAdmin or something similar you will find entries for all settings, including the directory settings, here.

I was looking for the image upload directory and found

```
39    imageUploadDir    s:17:"[cms.root]/images";

```

With `mysql` you can do

```
select value from civicrm_setting where name = 'imageUploadDir';

```

The initial part (`s:17`) means that the content is a 's'tring with length 17, so I changed the content of the string to something reasonable, taking that into account, and the site worked again.

Don't forget to remove any possible overrides you made in `civicrm.settings.php`.

Also if your CiviCRM menus disappear you probably changed it to something different that it originally was.
> 1 votes

---
Tags: configuration, images, directory
---


title: Installation configuration Stripe

text:
# Question
Title: Installation configuration Stripe
Bonjour,

J'aimerais savoir si qqn peut m'Expliquer comment installer et configure Stripe et pouvoir configurer mon civicmemberships

=== From Google Translate:

Good morning,

I would like to know if someone can Explain to me how to install and configure Stripe and be able to configure my civicmemberships

# Answer
> 1 votes
Welcome to SE. Stripe installation instructions are here: https://docs.civicrm.org/stripe/en/latest/install/

If anything is not clear, do ask more specific questions.

---
Tags: stripe
---


# Question
Title: Can I manage 2 level access for my federation
I am investigating the possible use of CIVI CRM for my federation. We are a hobby federation and our main clients are the local clubs. The federation maintains the club's information and invoice these clubs once a year. The Clubs themselves need to access their Club information to manage their members (add, modify, and delete) Are these two levels of access possible in CIVI CRM?

Thank you for your time. daniel

# Answer
> 3 votes
Welcome. There are a few options to look at

1/ Permissioned Relationships

2/ Multisite systems

3/ ACLs

---
Tags: permissions
---


title: Uploading files through the API

text:
# Question
Title: Uploading files through the API
I see an older thread on the forum about potential improvements to the API to allow file uploads, but I'm not sure that ever happened. Has anyone ever uploaded files in CiviCRM using the API?

I see in the API Explorer that there is a **File \> Create** with a parameter for **File Contents** but I'm not sure if you feed in the MIME contents, a URL, or...?

# Answer
Yes, it did happen and it's called the "attachment" api. You can look up the docs for it in the api explorer:
> 5 votes

# Answer
Example to upload a image in custom field. Important, if you want to upload in custom field, you can't fill the `entity table`.

The field need to be of type file.

```
$fields = [
  'key' =>  $key,
  'api_key' => $api_key,
  'entity' => 'Attachment',
  'action' => 'create',
  'mime_type' => 'image/jpeg',
  'name' => 'test.jpg',
  'content' => file_get_contents('test.jpg'),
  'entity_id' => 2, // Contact id, contribution_id,....
  'field_name' => 'custom_247' // Custom field type file
];

```
> 0 votes

---
Tags: api, upload, files
---


# Question
Title: Setting Outbound Email to SMTP results in 504 Error - how to reset
I set my outbound email setting to SMTP. After that the server is not responsive anymore. After a long time I get a 504 Error "Gateway Timeout".

How can I retract that setting then, as my wordpress is not reachable anymore?

I can rename the civicrm folder in the WP plugin to deactivate the plugin in WP, but when renaming and activating the plugin again, I again get the 504 error - I guess because it again tries to do something with the SMTP server but it does not respond in time.

how can I reset the outbound email setting without access to the wordpress frontend?

cheers

# Answer
I'm not sure why changing that would cause the problem you're seeing, but if you have command line access and have cv installed, you can run this to reset outbound mailing to the default:

```
$ cv api4 Setting.revert +s mailing_backend

```
> 2 votes

---
Tags: wordpress, email, smtp
---


# Question
Title: Issues with contact importing - Mismatched Contact Type and more
I'm seeing some issues with contact importing, and I wondered if anyone else is? Civi 5.58.0 on Wordpress with PHP 7.4

We have a process where we fairly regularly reimport existing contacts back into the system, using the contact update option to update the contents of custom fields, with data from a CSV file.

* Attempting any import of individuals using First Name & Email supervised dedupe, even if only first name, last name and email is contained in the data results in all contacts failing with error "Mismatched contact type." I was initially seeing this bug: https://lab.civicrm.org/dev/core/-/issues/3927 but it is happening even when the update to a related contact is removed.
* Attempting to import a list of individuals using first name & email unsupervised dedupe, and also trying to update a single custom field results in all imports failing with error "'1' is not a valid option for field custom\_12" even though "1" is not a value contained anywhere in the CSV
* So far as I can see, randomly one attempted import did "work", but the process erased the contents of some custom fields in Civi despite there being valid data in the CSV.

All was working fine before the recent security update - though the third item, where the import appeared to work, does obviously make me wonder if something is up with the server.

Thank you.

# Answer
> 1 votes
Looks like the first issue (Mismatched contact type) was to do with some stale data in the runner queue - removing those rows fixed the error.

The second error " "'1' is not a valid option for field custom\_12"" is a bug, which is replicable on the demo site. When importing CSV data to a field with multiple possible defined answers (e.g. checkboxes), the import succeeds where multiple options are 'ticked' in the CSV file (i.e. an array) but fails where there is only 1 option ticked in the CSV. i.e.:

In the example above, the import of the second row fails with the error described.

# Answer
> 0 votes
Robin - is it possible to replicate the issue on https://dmaster.demo.civicrm.org/ \- we can investigate as a bug but need to be able to replicate it (also you should log a bug over on gitlab to track it)

---
Tags: import, core
---


title: FormBuilder submission and add to group

text:
# Question
Title: FormBuilder submission and add to group
Once I've created a form in FormBuilder form and exposed it to the front end, how can I wrap some rules around it once a submission is sent? For example, add the user to a group, notify these people that form has been submitted, that kind of thing.

I'm using it to collect volunteer interest, including from anonymous users. Once they submit, I'd like to add that contact to a group and notify the volunteer coordinator.

Any insight appreciated :)

# Answer
> 3 votes
I'd create a "volunteer inquiry" activity type and configure the form to log that activity. The benefit is you know when they inquired, not just they are a volunteer. Yes, the group added date would have that but activities are the best way to track interactions. When you assign an activity, it automatically notifies the assignee.

Then, create a CiviRule to trigger on the *activity is added* trigger targeting the activity source with a *Add Contact to a Group* action.

You optionally can add an additional CiviRule targeting the activity assignee to send an email notification (via the emailapi extension) to the volunteer coordinator.

This may be preferred if you want to easily customize the message of the notification. If so, then you'd want to disable the default notification at Display Preferences.

---
Tags: formbuilder
---


# Question
Title: Feature request: Combine log and activities when merging double contacts
When contacts are merged, only the log and activities of one of the contacts are kept. Part of the change history is deleted and this is not always the right way, e.g. for auditing purposes.

It would be great to have an option when merging.

# Answer
> 0 votes
Just adding 'for the record' but not necessarily as an Answer to the core question.

Merging two contacts should result in the saved contact ending up with both sets of Activities (unless that option has been unchecked) - have tested and confirmed this is working as expected on dmaster

Contact A

Contact B

Merge screen

Outcome on Contact that is saved

The above assumes the Activities are not related to Cases.

---
Tags: activities, duplicate-contacts, logs
---


# Question
Title: error creating Membership : Mandatory key(s) missing from params array: membership_id
Civicrm : When creating a new membership I get this error message. : Mandatory key(s) missing from params array: membership\_id Membership is not created, but the contribution is created. I have double-checked the membership types and pricing and see nothing out of the ordinary. The list of members is displayed normally with new contribution. Registration for events and activities is hassle-free. -Joomla 3.10.6, Civicrm: 5.43.2, php 7.4.28

# Answer
> 1 votes
Resolved. errors in the creation of contribution. confusion between pricing and membership in civimember

# Answer
> 1 votes
If you have "Admin only" membership types, this stops the ability to create contribution and membership record. Change the membership types to "Public" as a workaround. Using Pricesets negates the need to have "Admin only" membership types.

# Answer
> 0 votes
I saw this on a Wordpress site recently and opening the Membership Type and resaving it in the UI (without changing any settings) seemed to resolve it. I'm guessing it was something related to a past upgrade process that left a wrinkle somehow and resaving ironed it out.

---
Tags: civimember
---


# Question
Title: Confusion about CiviRules > Trigger for 'Source', 'Target', 'Assignee'
This question comes off the back of a (now answered) question I asked previously about FormBuilder and email routing.

I setup a CiviRule to trigger and perform some actions when a specific activity is created. It works. The problem is....I don't know why.

Under LINKED TRIGGER, what are the difference between 'For all targets', 'Activity Targets', 'Activity Assignee', and 'Activity Source'? How will changing this effect the Rule? I'm concerned that my lack of understanding means it won't trigger in certain scenarios, or something is going to be routed somewhere I don't want it to go.

I couldn't find any documentation explaining it (or I'm too dumb to have understood what I read) :)

Any insight appreciated.

# Answer
There's some definition mapping to help here. All activities have 3 possible roles. See in parentheses the civirule terminology.

* **added by (source)** the person who added this Activity, or the contact if they carried out the Activity themselves via the website
* **with contact(s) (target)** the contacts in your database that are the subject of the Activity.
* **assigned to (assignee)** the person (usually within your organisation) that will carry out (or has carried out) the Activity

In your case, the source (because it is web-based) and the target is the volunteer signing up, which is who you want effected by the CiviRule (e.g. add to Volunteer group). It automatically uses the source by default but you'll want to also have the target be the volunteer signup as well for comprehensive reporting purposes. The source may be a back-end user adding that someone wants to volunteer and not the volunteer themselves, so best to use the target as the trigger.
> 2 votes

---
Tags: civirules, activity
---


# Question
Title: What's the most stable CMS platform for running CiviCRM on PHP8?
I really like CiviCRM... In many ways its kind of overkill for our small NFP (soon to be RC), but it has enough features to make it a better option than having some ERP built up from scratch.

The thing is, I just tried an install on BackDrop CMS and although BackDrop itself is running perfectly well on PHP8, the CiviCRM port there is breaking all over the place with PHP8 warnings and errors. I was able to get it installed, but some of the configuration pages error out and don't save to database :(

It seems that platform is not really supported now, and maybe won't be kept under development in the future.(??) I'm quite familar with Drupal7 ( and thus BackDrop) but have had nothing but grief from Drupal 8 / Composer, so have no interest in going down *that* rabbithole.

So I guess my question is this: WordPress or Joomla?? I've never been a fan of WP, but have run Joomla for years. It does look like the CiviCRM port for Joomla 4 is still somewhat work-in-progress ( from what I can glean from postings here and there).

**Is anyone running a stable live site on Joomla 4**?

Is the current WordPress incarnation suitable for going live (**on PHP8** ??)

I'm don't feel like I can rely on the current CiviCRM documentation... it implied that BackDrop was ready for prime time, but clearly it isnt! Also some of the current online CiviCRM Demos are not functioning well... so I am not sure what is the best path to take here!

Any advice would be much appreciated, thanks!

# Answer
Welcome - if you like CiviCRM you're in the right place!!

See https://docs.civicrm.org/installation/en/latest/general/requirements/#php-version Although php 8.0 and 8.1 are compatible with Core, extensions may not be.

The recommended version is still php 7.4

The vast majority of the CiviCRM code base is the same regardless of CMS so any php8 issues will exist on all CMSes. There are lots of fixes being applied to address php8 warnings but you shouldn't be getting anything more serious than warnings.

If you really want to run php8, check the various settings for reporting of php warnings.

The documentation in the core guides (https://docs.civicrm.org/) is fairly reliable and is updated regularly. BackDrop is fine.

There are certainly Joomla4 sites in progress although I don't know whether they are live yet.

It sounds like your issues are more related to php8 and your warning settings than any particular CMS. For now, I'd suggest you stick with the recommended 7.4
> 1 votes

# Answer
We run most of our CiviCRM sites on the latest WordPress (6.1) and PHP 8.0. That combination works absolutely fine for us and should work without issue for CiviCRM core without extensions.

As Aidan says, you *may* encounter compatibility issues with some less frequently updated CiviCRM extensions. The majority of the most popular CiviCRM extensions should be compatible with PHP 8.0 and there is a push to ensure the remaining few are updated.
> 0 votes

---
Tags: wordpress, joomla, php8
---


title: Setting up cron

text:
# Question
Title: Setting up cron
Please talk to me like I'm five with this one.

What we're using:

* civiCRM version 5.41.0
* Wordpress 5.9.5
* PHP 7.2.34 (I do get a warning that this one should be updated)
* Mosaico 2.7.16

The web guy told me that cron is set up as per docs instructions every six hours:

But when I get into civi I get greeted with the "Cron not running" message and I don't know how to make it work. I have to execute everything by hand from Administer \> System settings \> Scheduled jobs menu.

Civirules cron is enabled (no parameters) and so are Send scheduled mailings and Update membership statuses.

I would like to illustrate the problem when sending out e-mail (Mailtrap is being used for testing):

What works:

1. Mailings \> New mailing \> send test (immediately works)

What sort of works:

1. Mailings \> New mailing \> next \> Schedule (Send immediately) \> Submit mailing (but only after I manually execute scheduled job in System settings)

What doesn't work:

1. Contact \> more \> Send an email results in "Mailing error - expected a string or file resource"
2. Contact \> Actions \> Email - send now results in "Mailing error - expected a string or file resource"
3. Contact \> Actions \> Email - Email - schedule/send via Civimail results in Send test to either single person or group as greyed out and being able only to save the draft

How do I activate cron jobs so that I don't have to do it all by hand? Is it something that can be done from civi or do I need to contact the web guy and what should I tell him?

Thank you

# Answer
Your 'web guy' appears to have set up a (linux system) cron correctly, but it's not "working", likely for any of many possible reasons, e.g. permissions, ownership, environment, etc. It's not something you'd be normally be able to diagnose or fix without access to the server or reports that might get generated.

You could look at your list of system jobs and see if any of them are running - it's possible that one of them early on is breaking the cron in some way, that might be a helpful clue (e.g. the php process in the cron may be a different version of php, be running out of memory, be hitting some kind of security issue, etc.).

re: your notes about what works and what doesn't. The bit that works tells me that if your cron is setup, then civimail should work. The bit that doesn't work suggests your server doesn't have any mail server installed. You can likely fix that by installing this excellent extension: https://civicrm.org/extensions/transactional-emails
> 1 votes

# Answer
It isn't possible to configure cron jobs within CiviCRM itself. This is something that needs to be done on the server. So this is probably something that you will need your 'web guy' to help you with.

The documentation about how to set this up is here:

https://docs.civicrm.org/sysadmin/en/latest/setup/jobs/
> 0 votes

---
Tags: wordpress, cron, mailing, mosaico
---


# Question
Title: Producing a list of donors who have setup a recurring donation
I need to be able to pull a list (in CSV or Excel format) that lists people with a recurring donation. This is so we can contact them annually and ask if it's OK to roll over their donation.

I know I can go to an individual contact and see this, but I need to be able to see everyone, not one at a time, so I need to design a report and know what field stores this info, since none of what I see listed seems to relate to recurrence.

Thanks, Dave United Way of Monroe County (IN)

# Answer
> 4 votes
You can use Search Kit and do a search like this:

You can add the Frequency Unit field within the "Contact Recurring Contributions" join to filter on month or year depending on what type of recurring you're looking for.

# Answer
> 2 votes
You can also use Advanced Search to search for recurring contributions:

---
Tags: recurring-contributions, reports
---


# Question
Title: CiviXero extension broken after upgrade to 2.1.0
I'm using version CiviCRM 5.57.0 and have just upgraded CiviXero to 2.1.0

CiviXero has fallen over and prevented Cron from running. When I run Cron I get the following errors...

```
Notice: Undefined variable: nvpreq in /wp-content/uploads/civicrm/ext/nz.co.fuzion.civixero/packages/Xero/Xero.php on line 255
Fatal error: Uncaught Error: Class 'Civi\Api4\AccountContact' not found in /wp-content/uploads/civicrm/ext/nz.co.fuzion.civixero/CRM/Civixero/Contact.php:96

Stack trace:
#0 /wp-content/uploads/civicrm/ext/nz.co.fuzion.civixero/api/v3/Civixero/Contactpush.php(50): CRM_Civixero_Contact->push(Array)
#1 /wp-content/plugins/civicrm/civicrm/Civi/API/Provider/MagicFunctionProvider.php(89): civicrm_api3_civixero_contactpush(Array)
#2 /wp-content/plugins/civicrm/civicrm/Civi/API/Kernel.php(158): Civi\API\Provider\MagicFunctionProvider->invoke(Array)
#3 /wp-content/plugins/civicrm/civicrm/Civi/API/Kernel.php(81): Civi\API\Kernel->runRequest(Array)
#4 /wp-content/plugins/civicrm/civicrm/api/api.php(22): Civi\API\Kernel->runSafe('Civixero', 'contactpush', Array)
#5 /wp-content/plugins/civicrm/civicrm/CRM/Core/JobManager.php(131): civicrm_api('Civixero', 'contactpush', Array)
#6 in /wp-content/uploads/civicrm/ext/nz.co.fuzion.civixero/CRM/Civixero/Contact.php on line 96

```

Any suggestions? Thanks!

# Answer
You will need to update AccountSync extensions as well.

There isn't a recent released version available but you can download the latest code from here.

HTH

Pradeep
> 2 votes

---
Tags: wordpress, civixero
---


# Question
Title: Integration to multiple Content Management Systems?
Can you Integrate your Civi CRM into multiple Content Management Systems? like WordPress and Drupal at the same time?

# Answer
> 0 votes
A lot depends on what sort of integration you are looking for.

CiviCRM uses the CMS to manage logins and theming so its not really possible to integrate with more than one system in that sense. CiviCRM sits on top of a single CMS.

However, you can display forms on multiple different platforms linked to a common CiviCRM. You can do that in platform-specific ways (eg webforms on Drupal, Caldera Forms on WordPress) or more platform-independent ways, like inlay.

---
Tags: cms-integration
---


# Question
Title: Repeatedly getting this error in CiviCRM WordPress version "1298 ** Unknown or incorrect time zone: 'Europe/Berlin'" - how do I fix this?
I've redacted the client name for privacy, but the following appears repeatedly in our CiviCRM error log. Can someone please help me with an explanation / solution? Thanks a bunch!

```
Feb 21 11:01:04  [debug] $backTrace = #0 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Error.php(954): CRM_Core_Error::backtrace("backTrace", TRUE)
#1 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/pear-core-minimal/src/PEAR.php(945): CRM_Core_Error::exceptionHandler(Object(DB_Error))
#2 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/db/DB.php(997): PEAR_Error->__construct("DB Error: unknown error", -1, 16, (Array:2), "SET @@time_zone = \"Europe/Berlin\" [nativecode=1298 ** Unknown or incorrect ...")
#3 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/pear-core-minimal/src/PEAR.php(575): DB_Error->__construct(-1, 16, (Array:2), "SET @@time_zone = \"Europe/Berlin\" [nativecode=1298 ** Unknown or incorrect ...")
#4 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/pear-core-minimal/src/PEAR.php(223): PEAR::_raiseError(Object(DB_mysqli), NULL, -1, 16, (Array:2), "SET @@time_zone = \"Europe/Berlin\" [nativecode=1298 ** Unknown or incorrect ...", "DB_Error", TRUE)
#5 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/db/DB/common.php(1928): PEAR->__call("raiseError", (Array:7))
#6 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/db/DB/mysqli.php(943): DB_common->raiseError(-1, NULL, NULL, "SET @@time_zone = \"Europe/Berlin\" [nativecode=1298 ** Unknown or incorrect ...", "1298 ** Unknown or incorrect time zone: 'Europe/Berlin'")
#7 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/db/DB/mysqli.php(413): DB_mysqli->mysqliRaiseError()
#8 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/vendor/pear/db/DB/common.php(1234): DB_mysqli->simpleQuery("SET @@time_zone = \"Europe/Berlin\"")
#9 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/DataObject.php(2696): DB_common->query("SET @@time_zone = \"Europe/Berlin\"")
#10 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/packages/DB/DataObject.php(1829): DB_DataObject->_query("SET @@time_zone = \"Europe/Berlin\"")
#11 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/DAO.php(494): DB_DataObject->query("SET @@time_zone = \"Europe/Berlin\"")
#12 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/DAO.php(1747): CRM_Core_DAO->query("SET @@time_zone = \"Europe/Berlin\"", TRUE)
#13 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Check/Component/Timestamps.php(39): CRM_Core_DAO::singleValueQuery("SET @@time_zone = \"Europe/Berlin\"")
#14 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Check/Component.php(76): CRM_Utils_Check_Component_Timestamps->checkTimezoneAPIs(FALSE)
#15 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Check.php(215): CRM_Utils_Check_Component->checkAll((Array:0), FALSE)
#16 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Check.php(185): CRM_Utils_Check::checkStatus()
#17 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Utils/Check.php(93): CRM_Utils_Check::checkAll()
#18 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Page.php(255): CRM_Utils_Check->showPeriodicAlerts()
#19 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Contact/Page/DashBoard.php(57): CRM_Core_Page->run()
#20 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(319): CRM_Contact_Page_DashBoard->run((Array:2), NULL)
#21 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(69): CRM_Core_Invoke::runItem((Array:17))
#22 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm/CRM/Core/Invoke.php(36): CRM_Core_Invoke::_invoke((Array:2))
#23 /home/xxxxxxxx/public_html/wp-content/plugins/civicrm/civicrm.php(1199): CRM_Core_Invoke::invoke((Array:2))
#24 /home/xxxxxxxx/public_html/wp-includes/class-wp-hook.php(308): CiviCRM_For_WordPress->invoke("")
#25 /home/xxxxxxxx/public_html/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters("", (Array:1))
#26 /home/xxxxxxxx/public_html/wp-includes/plugin.php(517): WP_Hook->do_action((Array:1))
#27 /home/xxxxxxxx/public_html/wp-admin/admin.php(259): do_action("toplevel_page_CiviCRM")
#28 {main}

```

# Answer
If you have access to root user on your server, you can fix it. On Plesk that command did the job and I don't have the message any more:

```
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uadmin -p`cat /etc/psa/.psa.shadow` mysql

```

source: https://dev.mysql.com/doc/refman/8.0/en/mysql-tzinfo-to-sql.html\](https://dev.mysql.com/doc/refman/8.0/en/mysql-tzinfo-to-sql.html
> 3 votes

---
Tags: timezone
---


# Question
Title: Porting an old installation to a fresh CiviCRM
We have a very old installation, it is totally upgraded, but has been around for more than 10 years and survived both major Civi-upgrades and server migrations.

I'm starting to feel that all the upgrades is starting to take its toll. E.g. when I ask about some things it is evident that the current default is different than what it was when we started. And that makes for some misunderstandings and errors. I tried to change the Resource URLs to using URL-variables as per recommendation and almost lost the whole installation... This just feels fragile.

Is there a way, probably not simple, but perhaps straight forward, that we could get all data from our current installation into a shiny, new and freshly installed CiviCRM?

Much of the configuration is in the database, such as the Resource URLs, which obviously forces some manual work. But I'm still interested in suggestions, even on a principal level, if only to understand what work would be involved.

# Answer
> 3 votes
I have a few installs that are around 10 years since they started and I've run into a few problems similar to those you describe. But the problems were all fixable and those installs are still working & being upgraded just fine. My take on it would be do things like change resource urls as you mention (I did this too), have backups & battle through. I don't know of any easy way of unloading & reloading the system, the idea is appealing but almost certainly not worth the hassle IMHO.

---
Tags: upgrade, data-import, migration
---


# Question
Title: How do I know if I need to update to fix security problems?
I have recently upgraded to the latest version of CiviCRM and shortly after I received these security warnings

**CiviCRM Security Patch Needed**

> "Fix security issues CIVI-SA-2023-04, -05, and -06."

Would you like to think that there is no need to update again? And if so, how can I update for **WordPress**?

# Answer
For clarity, what version are you actually on?

The current version is 5.58.1 which is a security release. Any version earlier than that will show you need to upgrade. (Unless you're on ESR)

If you ***are*** on 5.58.1 then those messages are spurious and you don't need to upgrade further at the moment. Try clearing the cache and running the 'version\_check' scheduled job.

Instructions for upgrading in WordPress are here: https://docs.civicrm.org/sysadmin/en/latest/upgrade/wordpress/
> 2 votes

---
Tags: wordpress, upgrade, issues, security, security-advisory
---


# Question
Title: 5.58.1 causes Undefined index: job_id in Civi\Aws\Subscriber\Mailing
Upgraded to 5.58.1 this week and now AWS extension causing errors which slow down mail processing and lead to civimail mailings not going out. Each address leaves an error in the log from /civicrm/admin/job?action=view&id=1&reset=1:

```
 Undefined index: job_id in Civi\Aws\Subscriber\Mailing->addTrackingDataHeaders() (line 153 of .........sites/all/civiextensions/aws/Civi/Aws/Subscriber/Mailing.php).

```

May be related to Drush errors I get:

```
Error: Array and string offset access syntax with curly braces is no
longer supported in
/sites/default/files/civicrm/ext/aws/aws.civix.php,
line 246

```

# Answer
> 2 votes
You can consider switching to the AirMail extension which supports AWS. Instructions for setup are here.

# Answer
> 1 votes
Do you mean this extension? https://github.com/mecachisenros/aws

You're using php 8 and that extension isn't compatible with it.

---
Tags: civimail, upgrade, aws
---


# Question
Title: CiviRule Triggers but doesn't send email
*UPDATE Feb 2023* \- Nothing changed, but my emails will not send anymore. I tried to create a new rule to see if that helped trigger something, but no emails are sent.

Mickey Mouse is the record of the deceased person where the soft credit was added. There is an email on Mickey's record and I would expect my template to go to that email address.

Adding a picture of the settings:

I have read this thread CiviRules triggers, but fails to send email but didn't see a resolution.

My CiviRule is setup and IS getting triggered when a soft credit of "in memory of" is added to a record. However, the email does not send.

I've never dug into logging or anything so I'm not sure how to troubleshoot.

I have other CiviRules that are successfully sending email to the contacts primary email address, and I don't see any difference in the way I've setup this rule as to why the emails aren't being sent.

Any help greatly appreciated.

# Answer
Did you try with another action @erin like adding to group? It might well be that the trigger for soft credit does not function correctly? I do not know of any organization that uses that specific trigger.
> 0 votes

---
Tags: civirules
---


# Question
Title: MySQL OptionGroup values, retrieve in SELECT statement
Using Drupal 8.9.20 and CiviCRM 5.39.1 (on Ubuntu 18.04 LTS). I need to write a query in MySQL to retrieve the values of an optiongroup.

The OptionGroup is used to assign keywords to a contact record and the number of keywords is different for each record.

There are some examples on StackOverflow for how to create a function to split the string but most / all of them require an "index" parameter to indicate which substring you want to pull out after the ASCII 001 character (that Civi uses to separate the values), but I can't find anything that would return all of them. MySQL returns something like:

```
------------------
+ keywords_56    +
------------------
- 63210013056479 -
------------------

```

which in reality is 632 100 130 564 79

Thanks in advance A.

# Answer
> 1 votes
The answer at https://stackoverflow.com/a/17942691/8332458 works you just need to have as many "n"s as the maximum number of possible keywords. Below there are 5 but just add more if you need more, e.g. add `union all select 6`. I'd also just slightly change it to add a `WHERE` to remove the extra blanks it creates because civi stores the ascii 1 as bookends, like so:

```
select
  civicrm_value_XXX.id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(civicrm_value_XXX.keywords_56, CHAR(1), numbers.n), CHAR(1), -1) singlevalue
from
  (select 1 n union all
   select 2 union all select 3 union all
   select 4 union all select 5) numbers INNER JOIN civicrm_value_XXX
  on CHAR_LENGTH(civicrm_value_XXX.keywords_56)
     -CHAR_LENGTH(REPLACE(civicrm_value_XXX.keywords_56, CHAR(1), ''))>=numbers.n-1
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(civicrm_value_XXX.keywords_56, CHAR(1), numbers.n), CHAR(1), -1) <> ''
order by
  id, n

```

---
Tags: mysql, drupal-8
---


# Question
Title: The mysql commands you need to run are stored in
Have got this after the most recent CiviCRM 5.58.1. update on Drupal 7 ( same udate went fine on WP sites ).

ConfigAndLog/CiviCRM.trigger63f7a62151e54WPFX4db1365ff9d7f93fb47a7eb13184cce6.sql contains, well, a lot of "delete/insert trigger" instructions; however any attempt executing even a single command, like thisone

> CREATE TRIGGER civicrm\_campaign\_group\_after\_insert after insert ON civicrm\_campaign\_group FOR EACH ROW BEGIN IF ( @civicrm\_disable\_logging IS NULL OR @civicrm\_disable\_logging = 0 ) THEN INSERT INTO log\_civicrm\_campaign\_group (`id`, `campaign_id`, `group_type`, `entity_table`, `entity_id`, log\_conn\_id, log\_user\_id, log\_action) VALUES ( NEW.`id`, NEW.`campaign_id`, NEW.`group_type`, NEW.`entity_table`, NEW.`entity_id`, COALESCE(@uniqueID, LEFT(CONCAT('c\_', unix\_timestamp()/3600, CONNECTION\_ID()), 17)), @civicrm\_user\_id, 'insert')

in phpmyadmin leads to "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1"

Looks like this breaks normal system operations and leads to errors like the one below:

> \[db\_error: message="DB Error: constraint violation" code=-3 mode=callback callback=CRM\_Core\_Error::exceptionHandler prefix="" info="INSERT INTO `civicrm_mailing_event_queue` (`email_id` , `contact_id` , `hash` ) VALUES ( 6984 , 7051 , '0828cd3309c1d93d' ) \[nativecode=1452 \** Cannot add or update a child row: a foreign key constraint fails (`comedyev_crm_civicrm`.`civicrm_mailing_event_queue`, CONSTRAINT `FK_civicrm_mailing_event_queue_job_id` FOREIGN KEY (`job_id`) REFERENCES `civicrm_mailing_job` (`id`) ON DELETE CASCADE)\]"\] )

Not quite sure why the triggers weren't created while update; how do I get out from here please?

# Answer
> 2 votes
For some reason you have the civi setting `logging_no_trigger_permission` set. Possibly at one time it temporarily solved a different problem.

You can remove it with `DELETE FROM civicrm_setting WHERE name='logging_no_trigger_permission';`.

Then clearing cache or `cv flush` or visit `civicrm/menu/rebuild?reset=1&triggerRebuild=1` should rebuild the triggers.

---
Tags: drupal, mysql, trigger
---


# Question
Title: When a membership is created by webform, is it possible to automatically have it set to auto-renew?
We are using drupal 9, civi 5.58, and stripe 6.7.8-dev. The webform membership form we created works perfectly in creating the membership, but it will not set it to auto-renew. The membership type in civicrm is set to auto-renew.

Is it possible to do this in the webform configuration? Or is there a robust workaround that someone has discovered?

# Answer
> 3 votes
You need to enable RECURRING CONTRIBUTION in your webform settings under CiviCRM \>\> Contribution section.

---
Tags: civimember, webform-civicrm, stripe, auto-renew
---


title: Too Many Custom Fields show up in form

text:
# Question
Title: Too Many Custom Fields show up in form
We have created a Custom Data Group call Certifications. The Certification fields are 5 multi-select check boxes.

The problem is when we create more than 22 of these Certification Data Fields, then when editing the fields for a specific Contact, we lose the View/Edit field at the far right, and the actual certification data fields don't show up.

I think this is more of a FORM/web-page problem than a DB issue. I see there is an issue (https://lab.civicrm.org/dev/core/-/issues/1330) where more than 92 custom fields is an issue. This problem shows up with 23 custom data fields.

Presumably I can work around the problem by break up our data into different Certification Categories. But thought I would point out the issue here, to see if anyone has suggestions. Here are the screen shots that show the problem. Thanks in advance.

# Answer
I switched from the Certification field being a TAB (in Contacts) to INLINE, and now the certification list is a VERTICAL list inside the Contact form and it works. And I like it better.

However, side-note, we have a hard limit of 63 custom fields in the Certification group. I think this is an SQL Join limit (we are using Civi-Spark).
> 1 votes

---
Tags: custom-fields
---


# Question
Title: How to disable to the review page for event registration in CiviEvent?
A lot of times people who register mistake the review page for the confirmation page and assume they have successfully registered for the event. This creates a headache for paid events. Is there a way to disable review page and register the participant directly without showing the review page.

# Answer
Skip confirmation extension provides a settings on every event page settings to turn on/off confirmation/review page.
> 1 votes

---
Tags: civievent
---


title: Menu bar missing on startup Drupal

text:
# Question
Title: Menu bar missing on startup Drupal
I am running 5.21.1 with Drupal 7.69 (latest at time of posting). It was fine until I upgraded to this version of Drupal. Now I have as issue with the menu bar. When you first log-in the bar does not appear. However, if you then refresh the browser page, the menu appears and works fine after that. I have read all the posts about "menu missing", cleared the caches etc. and checked the .htaccess files but no joy. If you close the browser and then start a new browser session the menu is fine as long as you are still logged in. Has anyone else seen this?

PHP ver is: 7.2.27-1+ubuntu18.04.1+deb.sury.org+1

# Answer
> 4 votes
Hi @yobba I would suggest you look at applying this patch https://github.com/civicrm/civicrm-core/pull/16177 in one site i was associated with this fixed the error for us.

# Answer
> 2 votes
Bumped into the same issue. added this:

composer civicrm:publish

and now it is working. (Drupal 9.5.3 / CiviCRM 5.58.1)

---
Tags: drupal
---


# Question
Title: CiviMail error: Could not find entry named in civicrm_mail_settings
I would like to know how I have to add an email in my domain

I have the following error:

**Failed to connect Could not find entry named in civicrm\_mail\_settings (See log for more details.)**

# Answer
There is information about how to configure CiviCRM to send email in the System Administrator Guide: Email system confirguration.
> 0 votes

---
Tags: civimail, extension
---


# Question
Title: How to hide extension upgrade notifications?
Is there a way to hide the notification about available updates for our clients i.e all non-admin users? I find it stressful for them.

# Answer
If the user has 'administer CiviCRM system' permission set the user should get the notification on screen
> 3 votes

# Answer
If you visit the CiviCRM system status page (Administer \> Administration Console \> System Status) you can choose to hide the notifications.
> 0 votes

---
Tags: user-interface
---


# Question
Title: Where can I find the reason for a civicrm.org extension not showing up in the list of managed extension of our site?
We have a test site with Drupal 9.5.3, CiviCRM 5.58.1 and PHP 8.1.11. A couple of the extensions that we use on our current productive site (Drupal 7.94, CiviCRM 5.57.1 and PHP 7.4.32) do not show up in the list of managed extension of our test site, for instance:

* de.systopia.birthdays
* de.systopia.osm
* com.ginkgostreet.mosaicotoolbarconfig (which should be replaced by mosaicoextras when that extension becomes available).

I imagine that there is currently no version of those extensions compatible with CiviCRM 5.58.1. Would it be conceivable to add a page in the extension management of CiviCRM that would explain why any given extension didn't make it in the list of automatically installable extensions and whether there is a timeline for inclusion?

# Answer
See https://docs.civicrm.org/dev/en/latest/extensions/publish/#automated-distribution

They just haven't applied for review/been reviewed. On your other sites you must have downloaded them manually into the extensions folder.
> 0 votes

---
Tags: extension
---


# Question
Title: Search Kit - rewrite date to display one week earlier
How can I rewrite the date in search kit so that it displays a date '7 days prior'? Field is \[start\_date\] of an event. One week before is the deadline for submissions. I just want to display that date.

Any insight appreciated.

# Answer
This works as a rewrite rule for a search display but see caveats below. Replace the Y-m-d with whatever date format you like.

`{capture assign="step1"}{"[start_date]"|date_format:"%s"}{/capture}{capture assign="step2"}{$step1-7*24*60*60}{/capture}{$step2|date_format:"%Y-%m-%d"}`

Caveats:

* Will eventually stop working in a future version of php (the date\_format modifier uses strftime which is deprecated in php 8)
* In certain rare situations in leap years and for dates crossing DST boundaries it may be off by 1 day.
* "%s" isn't available on all systems (e.g. windows)

The last two may not be of much concern. The first one depends on how aggressively you like to update php version.
> 0 votes

---
Tags: searchkit, dates
---


# Question
Title: SearchKit: Adding Multiple Notes to Contact Reporting Not Working as Expected
When performing a contacts search using SearchKit, I'd like to be able to get a list of notes associated with a contact (e.g. return all the notes associated with them). If I search on Notes with Contacts I can get a list, but if I search on Contacts with Notes I don't get any results. What's interesting is that it works on some older records, but not newer ones, so not sure if there's been a schema change at some point that's breaking things.

Steps to reproduce:

* Add a few notes to one or more contacts
* Create a SearchKit Search for "Contacts" With (Required) Contact Notes
* Add Note ID and Note to the report columns
* (Optionally) set the field transformations to List for Note ID and Note
* Execute the search

Expected results: A list of Contacts that have Notes associated with them, with the Notes detail in the related columns.

Actual results: No results

I tried this on https://dmaster.demo.civicrm.org/ as well.

Am I not understanding how this should work?

Does not work (Contacts)

Works (Notes)

# Answer
> 1 votes
If you expand the query info section it's interpreting the query as "notes entered by that contact", so the "older" ones might have been ones like that.

---
Tags: search-results, searchkit
---


# Question
Title: tokens not working in CiviMail automated message subject lines
I have the same problem as in this post: How can I add Subscribe Message subject line token?

But that post has no resolution.

Users can sign up to as many as 5 mailing groups on our form, so can receive multiple confirmation messages at once. Having the group name in the subject of each message would be helpful.

I've tried several different tokens, not just {subscribe.group} (the one I need) and none are evaluated. All tokens work fine in the message body. Is this expected behavior, or a bug?

System info: Civi 5.58.1 running on Drupal 9.

# Answer
There is an open issue that could match with your description. Check it at Some contact core tokens stopped working in 5.43 RC
> 0 votes

---
Tags: civimail, tokens, message-templates
---


# Question
Title: Best way to create an automated email sequence?
We've got CiviRules extension, but not sure how to build an automated email sequence that could be easily duplicated for events.

I'd rather not use "Event Reminders" because it doesn't appear we can send "Mosaico" emails using that feature.

Basically, we just want to create a 4-part email sequence using Mosaico templates.

That way, every time we have a new upcoming event, we can just edit the title, images, and subject line, then add our subscribers to the sequence.

What's the simplest way to create this sort of sequence? Thanks guys!

# Answer
> 2 votes
Have a look at Chassé That does email sequences.

---
Tags: email, automation
---


# Question
Title: Error saving CiviCrm profile card in Drupal's user area
everybody. I have an error every time that an existent user saves the contact profile data in drupal, associated to civicrm fields. The Drupal's user data are updated correctly. The error is a bad one (the website encounter an error...), but it's enough to go back and everything is fine. It's recorded in PHP and Drupal watchdog. Could you please help me debugging it? I tried deleting some fields, but it doesn't work. It seems that the data are saved, anyway, but the error is confusing for the users. The first three lines of the error:

\[27-Feb-2023 00:42:48 Europe/Rome\] TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in /home/user/droopler/priv\_files/civicrm/templates\_c/it\_IT/%%4D/4DC/4DC76B26%%body.tpl.php on line 15

#0 /home/user/droopler/vendor/civicrm/civicrm-packages/Smarty/Smarty.class.php(1915): include()

#1 /home/user/droopler/priv\_files/civicrm/templates\_c/it\_IT/%%0A/0AF/0AF6F87E%%Dynamic.tpl.php(43): Smarty-\>\_smarty\_include(Array)

# Answer
This is a problem related to php 8 that is fixed in civi 5.59. It will be released in about a week.

https://lab.civicrm.org/dev/core/-/issues/2301
> 0 votes

---
Tags: drupal, contacts, drupal-9
---


# Question
Title: Offer free places at events without generating £0 contributions
I'm using the 'regular fees' section of the Fees tab on the Events configuration screen to provide two options: one at £0 and one at £5.

When people sign up for the event at the free level, a £0 contribution is created.

I can see there's a certain stubborn logic here and that there may be situations where that's what's wanted, but is it possible to prevent the creation of these £0 contributions?

# Answer
> 3 votes
You can do it with a price set instead where you just leave the checkbox for "required" unchecked when creating the price field. Then it outputs a "none" option automatically which doesn't create a contribution.

---
Tags: civievent
---


# Question
Title: form builder: redirect to contact after creation
I'm using Form Builder to create a simple contact creation form that is available as a dashlet. I'd like to redirect to the newly created contact upon form submission -- but it's not clear if any variables or tokens are available and can be used in the post-submit page config setting. Documentation is also a bit sparse.

# Answer
> 3 votes
In the form settings section of any form, there’s now a ‘Post-Submit Page’ option -

/civicrm/contact/view?reset=1&cid=\[Individual1.0.id\]

Token was available in the drop down menu.

---
Tags: formbuilder
---


title: DataProcessor vs SearchKit?

text:
# Question
Title: DataProcessor vs SearchKit?
Which one to go? Both doing the same job, SearchKit is like a favourite kid. None satisfies my small task on 100% so which one to invest the time to, per your opinion?

# Answer
> 3 votes
As @Demerit says, the best option for a particular task depends on the specifics.

More generally, one key difference is that SearchKit is part of core (core extension) whereas DataProcessor is a third-party extension. SearchKit is developing rapidly and very closely linked to APIv4. It will eventually replace much of the existing core UI and work is underway on that - see for example recent changes to deduping and the AdminUI extension.

DataProcessor is also very capable but I don't see it ever being adopted within core.

You're asking where to invest your time: my choice is SearchKit first.

---
Tags: searchkit, data-processor
---


# Question
Title: do I have to delete Civicrm folder before upgrade - cant I just rename?
Cant I just rename it ? It would make the restore process quicker if the upgrade fails.

# Answer
My suggestion would be one of the below

1. Tar/zip the current civi folder and delete.
2. Move the current civi folder out of the cms directory.
> 2 votes

---
Tags: upgrade
---


# Question
Title: Controlling Available Search Kit Actions at a Granular Level
Some permissions allow actions that may not be desirable to have as a search action that can be done en masse. e.g. I may want contacts to merge records but not delete records en masse on a search display. Other actions don't have a specific permission tied to them that have no other way of being controlled.

**Goal: Control what available search actions show in core for a given user based on a given permission that exists in Civi.**

How do you go about restricting Search Kit actions at a more granular level (for each action?). Or is this something better to work into core?

We have done this for Advanced Search and all other entity searches in legacy search screens. Relevant snippet below done from a custom Wordpress MU plugin according to a org specific custom permissions structure:

```
add_filter( 'civicrm_searchTasks', 'advanced_search_actions_control_callback', 10, 4 );

//Remove some available actions on search pages for all users if login user does not have 'access_civicrm_advanced_search_actions' capability
function advanced_search_actions_control_callback( $objectType, &$tasks ) {

    $original_tasks = $tasks;
    $titles = array_column($tasks, 'title');
    $to_remove = array();

    if ( $objectType = array('contact','event','activities','membership')) {
        $capability = 'access_civicrm_advanced_search_actions';

        $actions_remove = array('Add relationship - to Household',
                    'Delete permanently',
                    'Delete contacts',
                    'Group - create smart group',
                    'Tag - add to activities',
                    'Tag - remove from activities',
                    'Tag - remove from activities',
                    'Add relationship - to Individual',
                    'Add relationship - to Organization',
                    'Communication preferences - alter',
                    'Email - unhold addresses',
                    'Group - create smart group',
                    'Register participants for event',
                    'Restore contacts from trash',
                    'Tag - add to contacts',
                    'Tag - remove from contacts',
                    'Update multiple contacts',
                    'Update multiple memberships'
                    );

        foreach($tasks as $key => $value) {

            if ( in_array( $value['title'], $actions_remove ) ) {
                //$to_remove[] = $key;
                unset($tasks[$key]);
            }
        }

        if(current_user_can( $capability) ) {
            $tasks = $original_tasks;
        }
    }
}

```

Looking at https://docs.civicrm.org/dev/en/latest/searchkit/tasks/#angular-based-tasks the Search Kit hook is `civicrm_searchKitTasks` so I replicated the function above and used but is not working. Obviously, using Angular is a major difference so more changes probably are needed. It would be ideal to not have to permission search actions independently of one other in this searching transtion time. I had hoped the permissioning we've done in advanced search legacy actions would apply over.

```
 add_filter( 'civicrm_searchKitTasks', 'searchkit_actions_control_callback', 10, 4 );

    //Remove some available actions on search pages for all users if login user does not have 'access_civicrm_advanced_search_actions' capability
    function searchkit_actions_control_callback( $objectType, &$tasks ) {

        $original_tasks = $tasks;
        $titles = array_column($tasks, 'title');
        $to_remove = array();

        if ( $objectType = array('contact','event','activities','membership')) {
            $capability = 'access_civicrm_advanced_search_actions';

            $actions_remove = array('Add relationship - to Household',
                        'Delete permanently',
                        'Delete contacts',
                        'Group - create smart group',
                        'Tag - add to activities',
                        'Tag - remove from activities',
                        'Tag - remove from activities',
                        'Add relationship - to Individual',
                        'Add relationship - to Organization',
                        'Communication preferences - alter',
                        'Email - unhold addresses',
                        'Group - create smart group',
                        'Register participants for event',
                        'Restore contacts from trash',
                        'Tag - add to contacts',
                        'Tag - remove from contacts',
                        'Update multiple contacts',
                        'Update multiple memberships'
                        );

            foreach($tasks as $key => $value) {

                if ( in_array( $value['title'], $actions_remove ) ) {
                    //$to_remove[] = $key;
                    unset($tasks[$key]);
                }
            }

            if(current_user_can( $capability) ) {
                $tasks = $original_tasks;
            }
        }
    }

```

# Answer
Via a WP MU Plugin, relevant code snippet:

```
// Remove some available Search Kit actions on search pages for all users if login user does not have 'access_civicrm_search_actions' capability

add_filter( 'civicrm_searchKitTasks', 'search_kit_actions_control_callback', 100, 3 );

        function search_kit_actions_control_callback( &$tasks, $checkPermissions, $userId ) {

            $original_tasks = $tasks;

            foreach ($tasks as $entity => $entityTasks) {
                // Uncomment this to see a list of tasks and keys
                //\Civi::log()->debug('entityTasks: ' . $entity . ': ' . print_r($entityTasks,TRUE));

                if (!in_array($entity, ['Contact', 'Event', 'Activity', 'Membership'])) {
                    continue;
                }
                $capability = 'access_civicrm_search_actions';

                $actions_remove = [

                    'delete', // Delete Contacts
                    'tag', // Tag - Add/Remove Tags
                    'update', // Update
                ];
                if ($entity === 'Activity') {
                    $actions_remove[] = 'tag';
                }

                foreach ($entityTasks as $key => $value) {

                    if (in_array($key, $actions_remove)) {
                        unset($tasks[$entity][$key]);
                    }
                }

                if(current_user_can( $capability) ) {
                    $tasks = $original_tasks;
                }
            }
        }

```
> 1 votes

# Answer
The hook will work to do what you want, but you should inspect the `$tasks` variable to see what it looks like. The array is keyed by entity type so your code needs to be updated accordingly.

But as noted in the comments, a better solution would be to add this ability to the UI when configuring a display. It wouldn't be difficult, would someone like to sponsor a few hours of Core Team work to do so?
> 3 votes

# Answer
As of CiviCRM v5.60 this is now doable in the UI!

**Selecting only certain tasks:**

**Results in limited choices:**

See https://github.com/civicrm/civicrm-core/pull/25521
> 3 votes

---
Tags: hooks, searchkit, actions
---


# Question
Title: SearchKit: incorrect contact profile opening from (list) Display Name column
When using SearchKit and there are multiple profiles in the same row of the result, when I click on a to open a contact profile, sometimes an incorrect contact profile will open.

This happens using the link in the (List) Display Name column, and the profile that opens does seem to be that of another contact in the row. However, for some of the contacts the correct profile does open. Is this happening for anyone else?

Steps to re-produce in demo site:

1. Create following search and click Search
2. Scroll to row where (Count) contact ID = 30, or you see multiple names in the (List) Display Name column

3. Click Alexia Müller to try to open their profile (contact ID 157)
4. It opens Kiara Jameson's profile (contact ID 42)
5. Repeat Steps 1-2 above search and try Mrs. Justina Jameson, it opens the correct profile.
6. Note that some contacts in Display Name list are correct like beulaj@testing.co.uk (https://dmaster.demo.civicrm.org/civicrm/contact/view?reset=1&cid=109) but the next contact in the list, brigettew19@fakemail.biz, has the same link to the beulaj@testing.co.uk contact .

# Answer
> 2 votes
It looks like the bug is triggered when you use "Distinct" mode for grouping. I'll take a look at what's going on there, but in the meantime you can disable "Distinct." When I did that, all the links pointed to the correct contact.

To disable it, open up "Field Transformations" and uncheck the box like this:

---
Tags: searchkit
---


# Question
Title: Problem with path to Mosaico versafix template
After Drupal (9.5.3) and CiviCRM (5.58.1) updates last week, all versafix-based templates are just displaying a blank screen. I had also updated Mosaico to the latest, but reverting to the version in use last week hasn't helped.

The problem is that something is adding /en/ to the template path, but the files are in the folder without a language id.

The Drupal site is multilingual (to allow for webforms in different languages) but CiviCRM is not.

(GET https://secure.srigeneva.org/\**en\**/sites/default/files/civicrm/ext/uk.co.vedaconsulting.mosaico/packages/mosaico/templates/versafix-1/template-versafix-1.html 404).

The file is where it says it should be, permissions 644.

https://secure.srigeneva.org/sites/default/files/civicrm/ext/uk.co.vedaconsulting.mosaico/packages/mosaico/templates/versafix-1/template-versafix-1.html

I can create new versafix templates, but not use them.

What works for today is to copy messages that worked last week and replace the contents, but several templates were created last week and not used so we can't pull them up.

Does anyone know how that /en is getting put into the path to the template?

Kathryn

# Answer
> 2 votes
Nothing else I could find worked so I totally removed and reinstalled Mosaico and can now use Versafix-1 to create and use new templates.

# Answer
> 0 votes
Check you extension url in Resource URL settings(CiviCRM \>\> System Settings \>\> Resource url)

---
Tags: drupal, mosaico
---


# Question
Title: Name and Telephone Number Fields are not displayed when trying to add an individual
Apparently, after upgrading to CiviCRM Version 5.58.1, the Name and Telephone number fields are not presented when attempting to add an individual contact. The telephone number field is available when viewing the record, but not when doing a whole record edit.

I see this response to a similar question: Individual Name Fields are not available when adding a new contact

However, that doens't seem to help me in any way.

Is there a way for a mere mortal to fix this via some simple setting under the Administrator console? I can't seem to find anything that will control this.

Thanks.

# Answer
> 1 votes
Can you check if the fields are not included in Editing Contacts options at CiviCRM \>\> Adminsiter \>\> Customize data and screen \>\> Display preferences.

# Answer
> 0 votes
I've got one site on 5.58.1 and it's showing me this when I add a new individual:

Sadly, I did nothing to achieve this. I looked at the reserved profile (Under Administer -\> Customize Data and Screens -\> Profiles) for new individual and it only shows First, Last, Email. Maybe you could add the additional fields there?

Kathryn

---
Tags: fields
---


# Question
Title: Searchkit: filter activity results in a query to show activity with earliest date
I have a list of cases- created in searchkit. And I've added in activity cases with a status of "scheduled".

Mostly- but not always this returns one activity per case. But sometimes it shows more.

Is there a way of filtering these activity results to show the scheduled activity with the earliest date?

# Answer
How about something like this. Group by case id and transform on activity date with `min`:
> 3 votes

---
Tags: searchkit
---


# Question
Title: Limit search of Activities to Cases for which I am the coordinator
The search specified below (image and Query Info \> API below) works brilliantly. It shows all activities and their corresponding cases where the Activity is "open" (i.e. not Completed nor a couple of other Activity statuses). The one refinement it needs is to limit the results "My Cases" (something like requiring that result column "Case Clients - Contact Case Roles: Contact (Near side) Display Name" equal Extra \> Current User ID). The use case is a My Open Activities in Cases dashlet.

I've tried adding conditions under "With (optional) Contact Case Roles" but in all cases the result is that the column "Case Clients - Contact Case Roles: Contact (Near side) Display Name" comes back blank.

Any guidance on how to approach this appreciated.

`{ "version": 4, "select": [ "Case_CaseActivity_Activity_01.activity_date_time", "Case_CaseActivity_Activity_01.created_date", "Case_CaseActivity_Activity_01.status_id:label", "Case_CaseActivity_Activity_01.activity_type_id:label", "Case_CaseActivity_Activity_01.subject", "case_type_id:label", "id", "Case_CaseContact_Contact_01.display_name", "Case_CaseContact_Contact_01_Contact_RelationshipCache_Case_01.near_contact_id.display_name" ], "orderBy": [], "where": [ [ "case_type_id:name", "IN", [ "college_assistance_fund" ] ], [ "status_id:name", "!=", "Closed" ], [ "is_deleted", "=", false ], [ "Case_CaseActivity_Activity_01.status_id:name", "NOT IN", [ "Cancelled", "No Followup", "Completed" ] ] ], "groupBy": [], "join": [ [ "Contact AS Case_CaseContact_Contact_01", "INNER", "CaseContact", [ "id", "=", "Case_CaseContact_Contact_01.case_id" ] ], [ "Activity AS Case_CaseActivity_Activity_01", "INNER", "CaseActivity", [ "id", "=", "Case_CaseActivity_Activity_01.case_id" ] ], [ "Case AS Case_CaseContact_Contact_01_Contact_RelationshipCache_Case_01", "LEFT", "RelationshipCache", [ "Case_CaseContact_Contact_01.id", "=", "Case_CaseContact_Contact_01_Contact_RelationshipCache_Case_01.far_contact_id" ], [ "Case_CaseContact_Contact_01_Contact_RelationshipCache_Case_01.near_relation:name", "=", "\"Case Coordinator\"" ], [ "Case_CaseContact_Contact_01_Contact_RelationshipCache_Case_01.is_active", "=", true ] ] ], "having": []`

# Answer
I got something close to this search working starting from a related contacts search and pulling in case id from the relationshop

And then filtering the relationship contact for current user
> 2 votes

# Answer
Is it a default install you're playing with - the role Case Coordinator - that role in a default install is never the case manager - it's either Homeless Services Coordinator or Senior Services Coordinator. So that would explain blanks.

Then for your "current user" part, you can do it if they are listed on the given activity in some role, either reporter/assignee/target. Because then the Activity Contact - Contact ID is available and you can equate it to "select current user".

But otherwise I don't think the case-contact-role-contact-id is available. But what you could do is leave that part out, then create a form for the search display and have contact display name as a filter. It just wouldn't automatically be *their* name, they'd have to type it in the filter.
> 2 votes

---
Tags: civicase, searchkit
---


title: Case Activities Hanging No Such FIeld

text:
# Question
Title: Case Activities Hanging No Such FIeld
I'm on Drupal 7, CiviCRM 5.57.2. Lately, I've been cleaning up a lot of custom fields in by deleting and adding new ones. I have one case activity type with 112 fields across three custom field sets (this is a workaround for +100 fields).

Anyway, when this case activity is being submitted, the logo hangs for a long time. I see that the Drupal logging indicates a DB error for no such field found. I cleaned up the cache and update the paths but the issue persist. Has the DB not fully deleted the fields?

```
$Fatal Error Details = Array ( [callback] => Array ( [0] => CRM_Core_Error [1] => exceptionHandler ) [code] => -19 [message] => DB Error: no such field [mode] => 16 [debug_info] => UPDATE civicrm_value_trac_72 SET `leave_1089` = 0,`what_is_the__1046` = '4',`what_is_the_youth_s_home_g_1047` = '7',`educational_status_1051` = '6',`if_yes_to_histor_1066` = '012',`does_the_youth_have_any_of_the_f_1067` = '01234' WHERE id = 1168 [nativecode=1054 ** Unknown column 'enrolled_in_a_job_r_1423' in 'field list'] [type] => DB_Error [user_info] => UPDATE civicrm_value_trac_72 SET `leave_1089` = 0,`what_is_the__1046` = '4',``what_is_the_youth_s_home_g_1047` = '7',`educational_status_1051` = '6',`if_yes_to_histor_1066` = '012',`does_the_youth_have_any_of_the_f_1067` = '01234' WHERE id = 1168 [nativecode=1054 ** Unknown column 'enrolled_in_a_job_r_1423' in 'field list'] [to_string] => [db_error: message="DB Error: no such field" code=-19 mode=callback callback=CRM_Core_Error::exceptionHandler prefix="" info="UPDATE civicrm_value_trac_72 SET `leave_1089` = 0,`what_is_the__1046` = '4',`what_is_the_youth_s_home_g_1047` = '7',`educational_status_1051` = '6',`if_yes_to_histor_1066` = '012',`does_the_youth_have_any_of_the_f_1067` = '01234' WHERE id = 1168 [nativecode=1054 ** Unknown column 'enrolled_in_a_job_r_1423' in 'field list']"] )

```

# Answer
> 0 votes
If you look at the "Trac" custom field group in the UI does it still have the "Enrolled in a job" field? If so try deleting it again.

---
Tags: custom-fields, civicase, activity
---


# Question
Title: How to define multiple types for one event?
Came upon a quite similar scenario as described HERE: event 1 (initial workshop) is the kickoff-"lesson" for **two types** of event-series, which will continue in two different date sequences afterwards.

The scenario: event 1 is an initial workshop-lesson of an event-series continuing during the whole year AND it is the first date of an intensive short training course of one month.

With the advanced events extension for the additional event registrations and using price sets, I could easily achieve the desired registration behaviour for both of the event-series.

But: **How can I define two or multiple additional event types for the first kickoff-event?** Using custom fields is not an option, as the event types are predefined in CiviEvent.

Any hint would be highly appreciated. Most probably, I don't realize at the moment, that there would be an easy solution.

# Answer
We built this extension which operates on the basis that you can set one Event as the parent of other events, and then when a person registers for the parent Event they get registered for all the child events too.

I don't think we have touched it for a couple of years but assume the battery won't be flat.

https://civicrm.org/extensions/multiple-event-registration
> 0 votes

---
Tags: civievent, repeating-events
---


# Question
Title: Fatal error Form Processor and/or Action Provider
I've been using the fabulous Form Processor and Action Provider extensions for several months, and have built up a very useful suite of forms implemented in Google Forms and connected to various form processors in CiviCRM to execute actions. Everything was working great until today. Now, if I even try to access the Form Process menu item I get the error in the screenshot below. I've tried disabling this extension and also the Action Provider extension upon which it depends and then re-enabling both but that hasn't helped. The Action Provider was updated on 3rd March but I don't exactly know when this issue arose. Can anyone suggest any lines of inquiry / resolutions based on the screenshot below? Many thanks, Patrick.

# Answer
> 2 votes
The issue is resolved by disabling form processor and action provider, rolling action provider back to version 1.18, and re-enabling form processor. Apparently the update of action provider on 3rd March broke form processor, at least in my instance of CiviCRM on WordPress.

---
Tags: form-processor, action-provider
---


title: Custom field FILE type location

text:
# Question
Title: Custom field FILE type location
I have created a custom field of the FILE type.

When I attach a file, the file is stored on the server in this location:

`/my/server/public_html/wp-content/uploads/civicrm/custom`

Now this does have an .htaccess file to prevent access, but this is still technically a publicly accessible location.

Can the location of where these files are stored be changed/moved behind the public\_html folder to say

`/my/server/cividocs/` ?

Thanks

# Answer
> 0 votes
Hi @jsherk you can set the directories if you navigate to Administer\>System Settings\>Directories.

---
Tags: wordpress, files
---


title: Unable to install email api extension

text:
# Question
Title: Unable to install email api extension
I was just installing the email api and got the following error (Drupal 9.5.3 / CiviCRM 5.55.2 with email api 2.9)

Sorry, due to an error, we are unable to fulfill your request at the moment. You may want to contact your administrator or service provider with more details about what action you were performing when this occurred. Could not find the SQL file.

The log gives me:

```
[error]
$Fatal Error Details = array:3 [
  "message" => "Could not find the SQL file."
  "code" => null
  "exception" => CRM_Core_Exception {#5686
    -errorData: array:5 [
      "error_code" => 0
      "entity" => "Extension"
      "action" => "install"
      "is_error" => 1
      "error_message" => "Could not find the SQL file."
    ]
    #cause: null
    -_trace: null
    #message: "Could not find the SQL file."
    #code: 0
    #file: "/var/www/html/wct/vendor/civicrm/civicrm-core/api/api.php"
    #line: 135
    trace: {
      /var/www/html/wct/vendor/civicrm/civicrm-core/api/api.php:135 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Admin/Form/Extensions.php:187 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Form.php:573 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/StateMachine.php:144 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/QuickForm/Action/Next.php:43 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-packages/HTML/QuickForm/Controller.php:203 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-packages/HTML/QuickForm/Page.php:103 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Controller.php:355 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Page/Basic.php:334 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Page/Basic.php:140 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Admin/Page/Extensions.php:105 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Invoke.php:319 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Invoke.php:69 { …}
      /var/www/html/wct/vendor/civicrm/civicrm-core/CRM/Core/Invoke.php:36 { …}
      /var/www/html/wct/web/modules/contrib/civicrm/src/Civicrm.php:88 {
        Drupal\civicrm\Civicrm->invoke($args)
        › ob_start();
        › $content = \CRM_Core_Invoke::invoke($args);
        › $output = ob_get_clean();
      }
      /var/www/html/wct/web/modules/contrib/civicrm/src/Controller/CivicrmController.php:80 { …}
      Drupal\civicrm\Controller\CivicrmController->main() {}
      /var/www/html/wct/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php:123 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/Render/Renderer.php:580 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php:124 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/EventSubscriber/EarlyRenderingControllerWrapperSubscriber.php:97 { …}
      /var/www/html/wct/vendor/symfony/http-kernel/HttpKernel.php:169 { …}
      /var/www/html/wct/vendor/symfony/http-kernel/HttpKernel.php:81 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/StackMiddleware/Session.php:58 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php:48 { …}
      /var/www/html/wct/web/core/modules/page_cache/src/StackMiddleware/PageCache.php:106 { …}
      /var/www/html/wct/web/core/modules/page_cache/src/StackMiddleware/PageCache.php:85 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php:48 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php:51 { …}
      /var/www/html/wct/vendor/stack/builder/src/Stack/StackedHttpKernel.php:23 { …}
      /var/www/html/wct/web/core/lib/Drupal/Core/DrupalKernel.php:718 { …}
      /var/www/html/wct/web/index.php:19 { …}
    }
  }
]

```

# Answer
The sql file was missing from the extension folder (so the error message meant exactly what it said).
> 0 votes

---
Tags: extension, civirules
---


# Question
Title: For an event, I'm using a price set - how do I check that everyone has selected some ticket type before they are status "registered"?
We're using a CiviRule to send tickets out to everyone with Status Registered (so if someone says pay later, they don't get their tickets until they pay) but when we're testing I can not select a ticket type and still get a ticket by email. We will also have some free tickets through CiviDiscount, so adding a minimum payment doesn't work.

# Answer
> 1 votes
You'll want to make the price set required, which will mean they have to select an option before they can continue.

---
Tags: civievent, price-sets
---


# Question
Title: Transfer Paypal subscriptions to CiviCRM
is it possible to migrate existing paypal subscriptions (not created with CiviCRM) to CiviCRM? I tried:

1. to create a recurring contribution with Paypal invoice Id in the field `civicrm_contribution_recur.invoice_id`
2. to activate PayPal IPN

Do you know what other steps need to be taken?

# Answer
I don't think so. Here's a similar question: What are my options for importing recurring contributions?

The subscription information held at paypal includes the IPN url (https://developer.paypal.com/api/nvp-soap/ipn/IPNIntro/), which is how paypal communicates about new payments made as part of the subscription. As far as I know, you can't modify the IPN url. If you had a way of redirecting or proxying those ipn calls to the equivalent CiviCRM ipn, you might get it working.
> 2 votes

---
Tags: recurring-contributions, paypal
---


# Question
Title: Event Online Registration - Random Errors
Random instances of errors occuring during online registration process. Registrants are completing the basic form - name and email, but the system responds "Oops you are already Registered" (certainly are not registered) or "email address is invalid" (nothing wrong with email address) or "log in required".

System settings have been checked - particularly the Permissions for Anonymous users, Profiles (create, edit and view), Event Registration and View. Date and time is set ok for Online Reg, and the Registration Link is working OK.

The majority of registrations are working OK - but periodically we are getting these random errors.

# Answer
> 0 votes
The first place to look is the "Online Registration" section of the event configuration - particularly the multiple participants and duplicate matching rule.

If those seem reasonable (and the corresponding matching rules aren't messed up), then you'd want to look in your civicrm error log for additional clues. If the errors are kind of random, then I'd be suspicious that it's a bigger issue with your CiviCRM install (running out of memory or other resources? unusual caching setup?).

---
Tags: civievent, online-registration
---


# Question
Title: Why is there no link to the rejection report when validating online gift aid submissions
When I try to submit a gift aid claim it tells me there are two errors, but for some reason there is no link to the rejection report.

# Answer
Gift Aid is not part of CiviCRM core, so that message and functionality is the responsibility of the extension. You probably want to post your question to the extensions issue queue, as an enhancement request (and thank them for providing the extension while you're there).

My best guess is that you're using this extension: https://lab.civicrm.org/extensions/ukgiftaid
> 0 votes

# Answer
We had a similar issue but managed to fix it by running the template report for 'Gift Aid Submission failure report' (under Reports - Contribution Report Templates) once and saving a copy as "GiftAid online failure". The report then appeared as necessary on the actual batch validation as well as on the overall online submission page.
> 0 votes

---
Tags: gift-aid-extension
---


title: Online event in civievent

text:
# Question
Title: Online event in civievent
How do you design an *online event*? An online event needs the time to *automatically reconfigure* by the *participant's location*. As an online event, the organizer's location is irrelevant. It may include several places (and thus time zones) with an organizing team. More important location-wise is to indicate which online platform the event will be on: Zoom, Teams, GoogleMeet, something else...

# Answer
> 1 votes
Yes, timezones are critical to online events where you may have people participating from more than one timezone.

The bad news is that CiviEvent isn't timezone aware. You can certainly use links to the online platform of your choice, and lots of CiviCRM users do make use of CiviEvent for virtual events, but you'll want to specify the timezone in the title and/or text of the event to avoid confusion.

There are some timezone aware bits in CiviCRM, maybe most of them, but CiviEvents is tricky and an earlier attempt to fix it failed.

https://lab.civicrm.org/dev/core/-/issues/2122

# Answer
> 1 votes
Likewise, CiviEvent doesn't itself know what platform you're using - you have to put the event information in the description and the email sent out (unless you're using an extension that is connected to your event platform).

I use a Drupal webform to handle the registration process and in the email sent out specify the time and link.

---
Tags: civievent
---


# Question
Title: Adding or Editing Civirule where Linked Trigger = "webform is submitted" returns error
Civicrm version: 5.45.1 Drupal 9.3.3

Adding (or editing an existing) civirule where the selected trigger is "webform is submitted" generates the fatal error:

> CiviRule trigger class "CRM\_WebformCivirules\_Trigger" does not exist

excerpt from the Drupal log:

> $Fatal Error Details = array:3 \[ "message" =\> "CiviRule trigger class "CRM\_WebformCivirules\_Trigger" does not exist" "code" =\> null "exception" =\> Exception {#3523 #message: "CiviRule trigger class "CRM\_WebformCivirules\_Trigger" does not exist" #code: 0 #file: "/***/***/public\_html/sites/default/files/civicrm/ext/org.civicoop.civirules/CRM/Civirules/BAO/Trigger.php" #line: 166 trace: { /***/***/public\_html/sites/default/files/civicrm/ext/org.civicoop.civirules/CRM/Civirules/BAO/Trigger.php:166 { CRM\_Civirules\_BAO\_Trigger::getTriggerObjectByClassName($className, $abort = true) › › throw new Exception('CiviRule trigger class "' . $className . '" does not exist'); › } }

Other rules are working fine, only the 'webform is submitted' trigger fails. I've not been able to find any information on this error.

Can anyone help?

# Answer
> 0 votes
Perhaps work around by using another type of trigger, eg if the webform adds a tag, or adds them to a group

---
Tags: webform-civicrm, civirules, drupal-9
---


# Question
Title: Gravity forms to civi extension for payments or Form processor and payments
Is anyone working on this/ has done this? Or any other elegant solution? (non Drupal)

Would much appreciate people's input - sorry if this is not the appropriate forum

# Answer
The Gravity Forms integration paid plugin created by a former Civi partner is no longer supported.

Also see: CiviCRM + Forms: Which is best? Gravity Forms/Ninja Forms/Contact Form 7 or Civi's own Profiles?
> 0 votes

---
Tags: contribution-page, forms
---


title: Access tags as admin only

text:
# Question
Title: Access tags as admin only
I would like to use tags only as admin. Is there a setting to prevent other users to use them?

I have looked into the roles in Drupal, but could not find it.

# Answer
It depends on if you mean admins should only add / remove tags on contacts or if no one else should be able to see and use them in any search? There are two main places where tags are updated: On the Contact Summary Screen and on two search results actions. (Also on the import screen final step, but you probably won't have them importing).

## Contact Summary Screen

You could use the Contact Summary Editor to have a layout only for admins which shows the "Tags" tab and another for non-admins which hides it.

If the "ID, Type and Tags" block is present, clicking tags will not do anything. You could hide this block entirely and then just make a new block for tags if you only want non-admin users to view them. To do that, make sure you set the tags field in the new block as "View Only".

If you wanted to get fancier and only want to have a certain set of tags be editable by admins, you could use a custom template Tag.extra file and add something like this at your `[your_path]/CRM/Contact/Page/View/Tag.extra.tpl`, where you find the proper CSS selector, where "X" is the tagset ID.

```
{if !call_user_func(array('CRM_Core_Permission','check'), 'administer CiviCRM')}
{literal}
<script>
 CRM.$( function( $ ) {
     $( document ).ajaxComplete(function( event, request, settings ) {
     $(".crm-section.tag-section.contact-tagset.contact-tagset-X-section").remove();
      })
    });
</script>
{/literal}
{/if}

```

## Search Result Actions

For the search action see the ques, Controlling Available Search Kit Actions at a Granular Level. You would remove:

* Tag - add to contacts
* Tag - remove from contacts

Note the extension, Civi improvement route @petednz -fuzion recommends is preferred for a comprehensive solution.
> 0 votes

# Answer
Looks like it does not have a specific 'use Tags' permission. It does have

* CiviCRM: edit all contacts: View, Edit and Delete ANY CONTACT in the CiviCRM database; Create and edit relationships, tags and other info about the contacts
* CiviCRM: manage tags: Create and rename tags

So i think this would require an extension to add that additional Permission along with the associated changes to then make it apply in civi.
> 1 votes

---
Tags: tags
---