Skip to main content

Since latest update fluent crm 3.0 The campaigns section is very slow. Have around 155 campaigns and 7 labels. The filtering takes around 35 seconds and crashes the page. Anyone else experiencing this?

# [Bug] v3 email editor cannot open legacy v2 "Classic"/HTML templates (`_edit_type=html`) β€” "invalid block" and white-text-on-lost-background broken render

## Environment
- FluentCRM: 3.1.0
- FluentCRM Pro: 3.1.0
- WordPress: 7.0
- WooCommerce: 10.8.1
- PHP: 8.3.30
- Database: MariaDB 11.4.10
- Theme: Astra child
- Note: templates were created in 2.9.x (where they work); the editor breaks them after upgrading to 3.1.0. We had to downgrade to 2.9.87 / Pro 2.9.86 so the client could keep building newsletters.

## Summary

Email templates created with the v2.9.x classic / HTML editor are stored as `fc_template` posts whose `post_content` is raw, table-based HTML with inline styles, and meta `_edit_type = 'html'` (in our case also `_design_template = 'simple'`).

When such a template is opened in the v3.0+ block-based (Vue 3) editor:

  1. The editor shows the toast "Invalid blocks were auto-recovered and saved" and tries to "recover" the content by dumping the raw HTML into text blocks, and

  2. in doing so it drops the table-cell `background-color` styling. Text that was intentionally white (`color:#ffffff`) on a colored cell then sits on a white/default background β†’ all text becomes invisible (appears white) and the layout collapses.

Where it happens: the server side passes the legacy template through faithfully β€” `TemplateController::template()` returns `'edit_type' => 'html'` together with the raw `post_content` (FluentCRM 3.1.0, `app/Http/Controllers/TemplateController.php` ~L48–83). The breakage is in the v3 client-side block editor (`assets/BlockComposer.js`), which parses the `edit_type=html` content into blocks, marks them invalid, and "auto-recovers" them lossily instead of rendering the HTML faithfully.

## Reproduction

  1. In v2.9.x, create an email template with the Classic/HTML editor (`_edit_type='html'`) containing white text on a colored table cell, e.g.:

```html

\
Β  \\
Β  Β  \
Β  Β  Β  \Newsletter title\
Β  Β  \
Β  \\
\
```

  1. Upgrade to 3.1.0.

  2. Email Templates β†’ open the template in the editor.

  3. Observe the "invalid block" error and/or the colored backgrounds gone, leaving white text invisible and the table layout broken.

Our real template had 25 `color:#ffffff` spans on `#fcae23` / `#708cb1` cells β€” every one of them became invisible.

## Impact

Existing customers with v2.x classic/HTML newsletter templates cannot edit or use them after upgrading to v3.x. For a business that sends a weekly newsletter from a fixed branded template, this is a blocking regression β€” it forced us to roll back to 2.9.x.

## Expected

The v3 editor should either:

- render legacy `_edit_type=html` templates faithfully in a compatible "classic / raw HTML" mode (preserving raw HTML, inline styles, and especially table-cell `background-color`), or

- provide a lossless one-time migration.

It must not silently drop `background-color` (which inverts white-on-color text into invisible white-on-white), and it should not reject legacy templates as "invalid block" without a fallback.

## Attachments

- Offending template export (raw HTML, `_edit_type=html`, `_design_template=simple`).

- Screenshot 1: the "Invalid blocks were auto-recovered and saved" toast + the collapsed/blank render (white text invisible).

- Screenshot 2: the raw HTML dumped into text blocks (the parser could not interpret the classic HTML).

Thanks!

v3 email editor cannot open legacy v2 "Classic"/HTML templates v3 email editor cannot open legacy v2 "Classic"/HTML templates

# [Bug] Campaign Revenue Report: order list shows wrong/old orders and "Re-Sync Revenue" destroys cached revenue β€” `Collection::map('intval')` passes the array key as the `intval()` base

## Environment

- FluentCRM: 3.1.0
- FluentCRM Pro: 3.1.0
- WordPress: 7.0
- WooCommerce: 10.8.1 (tested with both HPOS-authoritative and WP-posts/legacy authoritative; compatibility sync on)
- PHP: 8.3.30
- Database: MariaDB 11.4.10
- Theme: Astra child
- Note: we had to downgrade to FluentCRM 2.9.87 / Pro 2.9.86 to recover; 2.9.x does not have this bug.

## Summary

In `FluentCrm\App\Http\Controllers\CampaignAnalyticsController::getAttributedOrderIds()`, each source branch ends with a point-free `intval` map:

```php
// woo + HPOS branch
->pluck('order_id')->map('intval')->all();

// woo + legacy branch
->pluck('post_id')->map('intval')->all();

```

The wpFluent `Collection::map()` (`vendor/wpfluent/framework/src/WPFluent/Support/Collection.php`) is implemented as:

```php
public function map(callable $callback)
{
Β  Β  $keys = array_keys($this->items);
Β  Β  $items = array_map($callback, $this->items, $keys); // <-- passes (value, key)
Β  Β  return new static(array_combine($keys, $items));
}
```

Because `array_map` receives the keys array as a second source, the callback is invoked as `$callback($value, $key)`. With `'intval'` this becomes `intval($value, $key)`, so the array index is used as the integer base of `intval()`. Only index `0` (base 0 = auto-detect) is parsed correctly; every subsequent order ID is corrupted.

## Reproduction

```php
$ids = ['225345','224377','223655','223194','222906','222262'];
collect($ids)->map('intval')->all();
// Actual: Β  [225345, 0, 0, 8, 42, 312]
// Expected: [225345, 224377, 223655, 223194, 222906, 222262]
```

Why: `intval('224377', 1) === 0` (base 1 invalid), `intval('223655', 2) === 0` (`2` invalid in base 2), `intval('223194', 3) === 8` (`'22'` in base 3), `intval('222906', 4) === 42`, `intval('222262', 5) === 312`.

Real-world: open a campaign Revenue Report (or press Re-Sync Revenue) for a campaign with many attributed orders.

## Impact

  1. Revenue Report order list (`getRevenueReport`): only the newest attributed order renders correctly. The rest become invalid IDs (`0` β†’ skipped) or coincidentally-valid ancient order IDs (e.g. `8`, `42`) that are then shown as unrelated, years-old orders. The `total` counter stays correct (array length), which masks the bug.

  2. "Re-Sync Revenue" (`getRevenueReSyncReport` β†’ `reSyncSourceRevenue`) iterates these corrupted IDs through `wc_get_order()`, sums a near-random subset, and overwrites the cached `_campaign_revenue` meta with a wrong (much smaller) value. Pressing Re-Sync therefore permanently destroys a campaign's historical revenue figure. (In our case a campaign dropped from 2,350,771 to 107,903.)

The underlying `_fc_cid` attribution data is intact in both `postmeta` and `wc_orders_meta`; only the in-memory ID list is corrupted by the map call, so the damage is fully recoverable once the code is fixed.

## Suggested fix

Use an explicit single-argument closure so the key is not passed as a base:

```php
->pluck('post_id')->map(fn($v) => (int) $v)->all();
```

More broadly, consider making `Collection::map()` not forward keys to callbacks that are not key-aware (`intval`, `strval`, `floatval`, etc. are common point-free callables that silently break under a `(value, key)` invocation).

## Secondary observations (same feature; lower priority)

- `getAttributedOrderIds()` (woo + HPOS) reads `wc_orders_meta` exclusively, with no `postmeta` fallback and no sync-completeness guard. During an in-progress HPOS backfill this returns a partial set, compounding the issue above.

- `reSyncSourceRevenue()` switched to paid-net semantics (only `wc_get_is_paid_statuses()`, refunds subtracted) versus the v2.9.x all-status sum. This silently changes historical numbers after upgrade (e.g. cancelled/on-hold orders that used to count no longer do). Worth calling out in the release notes / migration guide.

Thanks!

Currently, in the social media fields for businesses or companies, it’s possible to add a link to a Facebook profile, a LinkedIn profile, and an X or Twitter profile. And that’s fine, but could you please add fields for Instagram and TikTok -since many people around the world use Instagram for their businesses?

Thank you very much!

P.S. BTW... does anyone still use Twitter? πŸ€ͺ
P.S.2. I know I can add custom fields, BUT it's NOT what I'm talking about here... Thanks for not suggesting custom fields for this feature I'm requesting for. Thanks...

I've tried using both a Sequence and an Automation, but neither seems to fit my use-case. I have a monthly Zoom event, and it needs a series of reminder emails to go out, leading up to the Zoom meeting time. An Automation doesn't seem to allow date-definite scheduling β€”Β and in fact it sent the first email AS I WAS CREATING THE SEQUENCE, which was embarrassing.

I tried using an Automation, but Automations appear to run from the time they are triggered, not relative to a specific date in the future, or to absolute calendar dates.

So I hacked together a Sequence, controlling it by limiting the sends by day of week. But new subscribers are NOT being added to the Sequence, so it's broken in that regard for me as well, based on my use-case or intended workflow.

Am I missing something basic?

After updating to v3.0, the padding-right setting no longer appears to work correctly.

As shown in the attached screenshots, the right padding appears correctly in the editor view. However, it is not applied in the preview or in the test email.

To reproduce this issue, please align the text to the right and check the preview or test email.

Padding-right issue after updating to v3.0 Padding-right issue after updating to v3.0

I'm having trouble getting the smartcodes that use hashtags like site_url and web_preview_url etc (these are not the exact names). These do not currently get replaced in the emails as viewed by the recipients. I'm assuming that I have to configure something to get them to work. I can't find any specifics about this in the documentation. Can someone either point me to that, or give me some info on how to get these working?

Also, I'm currently using 3.1.0 and using Gutenberg editor option when I compose.

Minor complaint. The changelog seems to be lagging the releases.

https://fluentcrm.com/docs/change-log/

I guess you can get to the current information from your website's plugin page, but it would be nice to have the change log page updated too.

Hi we cant connect claude desktop some one ha ve try ? we cant add mcp config in the file because is overwrited every time

EDIT: Solved. You need to close ALL process of claude before add some changing to the config file and you need to go via claude desktop settings to find the virtual directory of the sandbox.

In Emails > All Activities , currently, we only have the option to filter by emails that are (1) Automation; (2) Campaigns.

Again, transactional emails (key in a CRM) can not be filtered here.

I am sure this would be super useful for using FCRM daily as a real CRM.

Yet, again, a pipeline is key.
But improving how transactional features works overall is a must for that hopeful future.

--
Another "funny" thing is that on the Dashboard, you can see the stats of all the "Campaign Emails". But, even Transactional emails are treated on All Activities Filter as Campaigns, we do not have any space for checking all the stats of the Transactional emails...