Skip to Content Skip to Menu

🐰 Happy Easter! Great Savings on Professional and Developer Memberships! Get 20% off now with code EASTER-2026!

Search Results (Searched for: Triggers:)

  • krileon
30 Mar 2026 14:15
We have no functionality to auto downgrade someone into a different plan on expiration. Generally you just let the user do that themselves if they choose to not renew. It's possible to automate this with CB Auto Actions though. You'd use the same plan expiration logic I provided earlier.

Plan Expired
Global
Triggers: onCPayUserStateChange
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: Custom > Value
Custom Value: [var3]
Operator: Equal To
Value: PLAN_ID_HERE
Condition 2
Field: Custom > Value
Custom Value: [var2]
Operator: Not Equal To
Value: A

The above will work with any auto action type. So if you want to subscribe them into a new plan for example set the Type to CB Paid Subscriptions and configure the Action tab accordingly to your needs.
  • krileon
27 Mar 2026 16:28
That should be a pretty simple straight forward configuration. Do you have email confirmation and/or admin approval enabled? That'd change things a little bit since you'd probably want to wait for them to be confirmed and/or approved before forcing them to join. The below for example is without confirmation or admin approval.

Registered
Global
Triggers: onAfterUserRegistration
Type: CB GroupJive
User: Automatic
Access: Everybody
Action
Mode: Join Groups
Groups: SELECT_GROUPS_HERE

That's all there is to it. They'd be placed in whatever groups you selected after they register. If you have confirmation and want to wait for them to be confirmed you can use the below. Basically just a trigger change with a condition to ensure confirmation state is switching to confirmed

Confirmed
Global
Triggers: onAfterUserConfirm
Type: CB GroupJive
User: Automatic
Access: Everybody
Conditions
Field: Custom > Value
Custom Value: [var2]
Operator: Equal To
Value: 1
Action
Mode: Join Groups
Groups: SELECT_GROUPS_HERE

Now when they confirm their email they'll be placed in the groups instead of directly after registering. If you have moderator approval it's again just a relatively simply change. Is actually just a literal trigger change from the above.

Approved
Global
Triggers: onAfterUserApproval
Type: CB GroupJive
User: Automatic
Access: Everybody
Conditions
Field: Custom > Value
Custom Value: [var2]
Operator: Equal To
Value: 1
Action
Mode: Join Groups
Groups: SELECT_GROUPS_HERE

Now when you confirm their account they'll be placed in the selected groups. Note you only need to use one of the above. Don't use all 3. Which you use is entirely up to you and your configuration.

PS: We inaugurate our community site tonight, I added your name in the credits

I appreciate it, but no need to credit me personally. We're a team here so if you do want to credit us just credit Joomlapolis. 😊
  • krileon
18 Mar 2026 15:13
The below should work then. Since the option was pushed to a field that'll be the easiest way to condition against the selection.

Plan Active
Global
Triggers: onCPayUserStateChange
Type: Usergroups
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: cb_category_access
Operator: Equal To
Value: OPTION_VALUE_HERE
Condition 2
Field: Custom > Value
Custom Value: [var3]
Operator: Equal To
Value: PLAN_ID_HERE
Condition 3
Field: Custom > Value
Custom Value: [var2]
Operator: Equal To
Value: A
Action
Mode: Add Usergroups
Groups: SELECT_USERGROUPS_HERE
Parameters
Reload User: Yes

Replace OPTION_VALUE_HERE with whatever your option value. Replace PLAN_ID_HERE with whatever the plan id is. For SELECT_USERGROUPS_HERE select whatever usergroups that option should give. You can also remove usergroups added by other options here as well.

You'll need 1 auto action per cb_category_access value so that you can uniquely add your usergroups per option value.

Plan Expired
Global
Triggers: onCPayUserStateChange
Type: Usergroups
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: Custom > Value
Custom Value: [var3]
Operator: Equal To
Value: PLAN_ID_HERE
Condition 2
Field: Custom > Value
Custom Value: [var2]
Operator: Not Equal To
Value: A
Action
Mode: Remove Usergroups
Groups: SELECT_USERGROUPS_HERE

As like before set PLAN_ID_HERE to your plan id and then for SELECT_USERGROUPS_HERE select all the usergroups added by your options so that they get cleared if their plan expires. You don't need multiple of these for the different cb_category_access options. This single auto action should be responsible for clearing their usergroups.
  • krileon
09 Feb 2026 15:45
Replied by krileon on topic Solved/ email while creating a new group
CB GroupJive doesn't have that functionality so no it's not doable without implementing it yourself. It however can be implemented using CB Auto Actions. The below should work.

Global
Triggers: gj_onAfterCreateGroup
Type: Email
User: Automatic
Access: Everybody
Action
To: query
To Query:
Code:
SELECT `email` FROM `#__users` WHERE `block` = 0
Subject: EMAIL_SUBJECT_HERE
Body: EMAIL_MESSAGE_HERE

That should email every user when a group is created. I would recommend caution with this. It'd be easy to spam users with too many emails by doing this and could result in your email domain being blacklisted if too many people report you as spam.
  • krileon
05 Feb 2026 16:00
The below would mimic what the internal behavior is doing.

Global
Triggers: onAfterUserRegistration
Type: CB Activity
User: Automatic
Access: Everybody
Action
Mode: Activity
Method: Create
Stream: Profile Activity
Asset: profile.[user_id].registration
Load By: None

That asset would just result in the same title displayed as the internal activity, which is "joined the site". Note that is a language string so you could just override it for example. To avoid that you could create your own asset. Below for example would work fine.

Asset: profile.[user_id].registered
Title: My Title
Message: My Message
  • krileon
26 Jan 2026 14:41
Replied by krileon on topic Auto Actions - new article
Sure, that would rely on a Joomla content event. You can find more information about Joomla content events below.

manual.joomla.org/docs/next/building-extensions/plugins/plugin-events/content/

Specifically you'll be using onContentAfterSave and to use a Joomla event in CB Auto Actions you'll need to prefix it with joomla_ giving joomla_onContentAfterSave. Since these are filtered by context you'll need an article context with is com_content.article. Below is the details for the onContentAfterSave event and what variables it contains.

manual.joomla.org/docs/next/building-extensions/plugins/plugin-events/content/#oncontentaftersave

This can all be put together using the below example.

Global
Triggers: joomla_onContentAfterSave
Type: Email
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: Custom > Value
Custom Value: [var1]
Operator: Equal To
Value: com_content.article
Condition 2
Field: Custom > Value
Custom Value: [var3]
Operator: Equal To
Value: 1
Condition 3
Field: Custom > Value
Custom Value: [var2_catid]
Operator: Equal To
Value: CATEGORY_ID_HERE

Replace CATEGORY_ID_HERE with the id of the category you want this applying to. You can use an "In" condition to supply a comma list of category ids as well if you need more than 1 category. It should only apply to newly created articles due to the var3 ($isNew) check. Next just configure the rest of the email however you like.
  • krileon
02 Jan 2026 18:33
Ok, latest CB Gallery build release now has the slashed eye indicator for published state implemented. I've implemented it throughout all views that have indicator icons including grid views for both albums and media. Even media modal windows will indicate unpublished next to the menu dropdown.

I am not (yet) familiar with autoaction plugin, so i will be happy if you can provide such example, thank you !

This might be quite complicated if you've no CB Auto Actions experience, but the configuration example is as follows for the auto action. Basically what we'll be doing is overriding the date handling for the CB Activity logging behavior for CB Gallery activity. Some of the below might be confusing if you've no CB Auto Actions experience so I'd recommend just installing it and exploring it first before putting together auto actions. This assumes you still want to go through with doing this. I don't particularly recommend it since it causes media to go outside the flow of things, but it's up to you.

Global
Triggers: activity_onBeforeActivityEntitySave
Type: Code
User: Automatic
Access: Everybody
Conditions
Field: Custom > Value
Custom Value: [cb:parse function="getAsset" class="var1" /]
Format Functions: Yes
Operator: Is REGEXP
REGEXP: /^gallery\./
Action
Method: PHP
Code:
Code:
$variables['var1']->setDate( \CBLib\Application\Application::Database()->getUtcDateTime() );
Parameters
Reference Variables: Variable 1

I've confirmed the above works to force the activity date to be the current datetime causing it to ignore the date of the gallery entry itself.
  • krileon
22 Dec 2025 15:19
By sending an email I meant use an Email action. That's what I used in my tests with success. Are you sure your gateway id is correct? You need to provide the number under the Id column and not under the # column.

It's possible to act on payment state change as well. That maybe more ideal since you're just needing to act on successful payments from paypal. Below is tested working as well.

Global
Triggers: onCPayAfterPaymentStatusChange
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: Custom > Value
Custom Value: [var4]
Operator: Equal To
Value: Completed
Condition 2
Field: Custom > Value
Custom Value: [var2_gateway_account]
Operator: Equal To
Value: YOUR_PAYPAL_GATEWAY_ID_HERE

This is just acting on a payment basket being marked completed for a specific payment gateway. Below was used in both test examples.

Global
Type: Email
Action
Subject: Payment Test Email
Body: Success!
  • liaskas
20 Dec 2025 14:44 - 20 Dec 2025 15:00
I have spent the whole week testing without success, and finally i returned back to the very basic!
My goal is to fire a php code after cb subs payments return complete from paypal.

Auto Action
Global
Triggers: onCPayUserStateChange
Type: Code
User: Automatic
Access: Everybody

Conditions:
Condition 1
Custom Value: [var2]
Operator: Equal To
Value: A
Condition 2
Field: Custom > Code
Code:Code:return ( $variables->getCurrentBasket()->gateway_account ?? 0 );Operator: Equal To
Value: 5

Action:
Method: PHP
Code:
Code:
$mailer = \Joomla\CMS\Factory::getMailer(); $mailer->addRecipient('name@domain.com'); //(where info@domain.com is my e-mail) $mailer->setSubject('OSS PHP AUTO ACTION TEST'); $mailer->setBody('If you receive this email, PHP Auto Actions ARE executing.'); $mailer->Send();

The mail is not sent! Is the code wrong or the auto action is not firing? (tested with more that 10 real payments from clients)

What am i doing wrong?
 
  • krileon
18 Dec 2025 17:45
Replied by krileon on topic Email merchandise basket content
Ok, took a bit longer but have a much cleaner solution. Format Functions in CB Auto Actions now support inline Query and Code execution (must be a Super User to toggle on and use these!). This allows substantially easier inserting of the invoice HTML wherever you like in whatever auto action you like. The below for example will example the invoice HTML. Note you'll need to update to latest CB Auto Actions build release before you can utilize this.

Global
Triggers: onCPayAfterPaymentStatusChange
Type: Email
User: Automatic
Access: Everybody
Conditions
Field: Custom > Value
Custom Value: [var4]
Operator: Equal To
Value: Completed
Action
Subject: Invoice
Body:
Code:
[cb:parse function="code"] return $variables['var2']->displayBasket( null, null, 'invoice' ); [/cb:parse]
Parameters
Format Functions: Yes
Format Code Function: Yes

The complicate comes from determining if the basket contains merchandise payments or not. This would apply to all baskets basically. So to find if a merchandise was purchased it'll require an additional condition that checks what is in the basket. The below should work for that.

Field: Code
Custom Code:
Code:
foreach( $variables['var2']->loadPaymentItems() as $item ) { if ( $item->item_type === 'merchandise' ) { return 1; } } return 0;
Operator: Equal To
Value: 1

This should allow the condition to match if the basket contains at least 1 row item that's a merchandise.
  • liaskas
17 Dec 2025 08:29
Here is what we have currently and the auto action is not fired for some reason.

Payment is being finalized and subscription is active.

Global
Triggers: onCPayUserStateChange
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: Custom > Value
Custom Value: [var2]
Operator: Equal To
Value: A
Condition 2
Field: Custom > Code
Code:Code:return ( $variables->getCurrentBasket()->gateway_account ?? 0 );Operator: Equal To
Value: 5

The code in the action tab is the following:

Method: PHP
Code:
Code:
defined('_JEXEC') or die; require_once JPATH_LIBRARIES . '/oss/cbsubs-oss-handler.php'; oss_handle_cbsubs_payment($variables);

Thank you.
  • krileon
16 Dec 2025 14:42
Your conditions are probably is what is failing. The database state is considered in transit. It can change based off webhooks, what state they're moving into/from, etc..

Are you needing to act on the payment status change or the subscription status change? onCPayAfterPaymentStatusChange is the correct trigger for payment status changes and onCPayUserStateChange is the correct trigger for subscription status changes. With both you should be using the variables already provided to them instead of querying for information. After selecting either trigger you should see what variables are available to them just below the Triggers parameter.

Since you mentioned payment being finalized and subscription being active I'd act on subscription state change with onCPayUserStateChange. The below for example should work fine.

Global
Triggers: onCPayUserStateChange
User: Automatic
Access: Everybody
Conditions
Condition 1
Field: Custom > Value
Custom Value: [var2]
Operator: Equal To
Value: A
Condition 2
Field: Custom > Code
Code:
Code:
return ( $variables['var9']->getCurrentBasket()->gateway_account ?? 0 );
Operator: Equal To
Value: YOUR_PAYPAL_GATEWAY_ID_HERE

This will work on renewals as well. If you only want it on first payment you'll need to add a condition against the $reason. Example as follows.

Field: Custom > Value
Custom Value: [var6]
Operator: Not Equal To
Value: R
  • liaskas
16 Dec 2025 11:39 - 16 Dec 2025 12:14
Hello,

We are using CBSubs with PayPal on Joomla 5.4.

We are trying to run post-payment logic (VAT / OSS accounting) using CB Auto Actions, but no Auto Action is firing when PayPal payments are completed.

What we have tested and confirmed:

1. Payments do complete successfully in PayPal

2. Rows are correctly written to: #__cbsubs_payment_baskets (payment_status = 'Completed') and #__cbsubs_payments

We tested the following Auto Action triggers:

onCPayAfterPaymentStatusChange
onCPayUserStateChange

Auto Action PHP code does not execute at all -> verified via error_log

Conditions were reduced to a single SQL condition:

SELECT 1
FROM cbsubs_payment_baskets
WHERE user_id = [var1_id]
  AND payment_status = 'Completed'
  AND gateway_account = <paypal_gateway_id>
ORDER BY id DESC
LIMIT 1


Even with minimal PHP code (just logging), no Auto Action is executed

Our questions:

Are CB Auto Actions expected to fire when PayPal payments are completed asynchronously (IPN / delayed completion)?

Which Auto Action trigger is guaranteed to fire after a PayPal payment is finalized and subscriptions are activated?

Is there an official recommended hook for running post-payment accounting logic (VAT / OSS) in CBSubs?

Thank you.Can you please advise?
Thank you.
  • liaskas
11 Dec 2025 11:23
Replied by liaskas on topic Questions about auto action and gallery
Unfortunately, it stopped working again!

With the following auto action settings, it worked for a while and now...
The images are created in backend CB Gallery: Media
no activity records are created at all in backend CB Activity: Activity.

Auto action settings:

Triggers: gallery_onAfterApproveGalleryItem
Type: CB Activity
User: Automatic
Access: Everybody

Conditions
1
Field:Value
Custom Value: [var3_asset]
Operator: Is REGEX
Value: /^profile\./
2
Field:Value
Custom Value: [var3_asset]
Operator: Is Not REGEX
Value: /\.uploads$/

Action
Mode: Activity
Method: Create
Stream: Profile Activity
Published: 1
Asset: gallery.[var3_type].[var3_id]
Title: empty field
Message: empty field
Owner: [var3_user_id]
Flair: Adult
Cooments: Same as stream
Likes Asset: empty field
Dynamic Group Asset:  empty field
System:  empty field
Date:  empty field
Load By: By Asset Only
Group Asset: gallery.%
 
  • liaskas
08 Dec 2025 19:49 - 08 Dec 2025 20:03
Replied by liaskas on topic Questions about auto action and gallery
The problem is something deeper.

I have set everything in CB Activity > Parameters > Activity

Testing...
  1. User uploaded image. Nothing shows in activity (backend)
  2. Admin approves image.
  3. An activity (backend) a new activity is created with Asset -> "gallery..1" and as an owner it shows the admin. The activity is not published and the flair is in place.
The owner must not be the admin!
The Asset "gallery..1" i do not know where it came from!
The activity must be published.

Auto action settings:

Triggers: gallery_onAfterApproveGalleryItem
Type: CB Activity
User: Automatic
Access: Everybody

Conditions
1
Field:Value
Custom Value: [var1_asset]
Operator: Is REGEX
Value: /^profile\./
2
Field:Value
Custom Value: [var1_asset]
Operator: Is Not REGEX
Value: /\.uploads$/

Action
Mode: Activity
Method: Create
Stream: Profile Activity
Published: empty field
Asset: gallery.[var1_type].[var1_id]
Title: empty field
Message: empty field
Owner: [var1_user_id]
Flair: Adult
Cooments: Same as stream
Likes Asset: empty field
Dynamic Group Asset:  empty field
System:  empty field
Date:  empty field
Load By: By Asset Only
Group Asset: gallery.%

 
Displaying 1 - 15 out of 33 results.
Powered by Kunena Forum