What Am I Working On?

Feels like a good time to let everyone know my current active project and what to upcoming releases to expect. Currently CB Activity is the active project. This means that's the project being focused on outside of bug fixes since we will of course interrupt any active project to fix bugs. In addition to this Joomla 4 compatibility testing and fixing is still being done as issues are discovered. We've addressed the majority of Joomla 4 issues already in latest build release of CB. More details about CB Activity development below.

CB Activity 6.0.0 will be a significant rewrite. It will only migrate from CB Activity 5.0.0 so please be sure your install is up to date. CB Activity is undergoing massive performance improvements and structure changes to move it towards scaleability. CB Activity 6.0.0 has been performance tested against 5 MILLION unique activity entries and clocks in at a blazing fast 2ms (milliseconds!). This means you'll be able to put your trust into CB Activity to deliver high performance activity streams looong into the future for your site!

All the database queries have been touched.  All costly _users and _comprofiler table joins have been removed. This means posts belonging to deleted user, banned users, or blocked users are allowed. By default deleted user posts will also be deleted, banned users posts will stop linking to their profile, and blocked users posts will become unpublished. This significantly helps optimize the query away from doing these costly joins. Next all ordering has been changed to no longer be date based. This means all posts will display in the order they were created. So you may notice some posts out of order, but that's normal. This leads us into cursor based pagination. Currently CB Activity is using offset pagination. This basically fails after 30+ pages with a database of 1 million activity. This is due to how the database has to go through previous pages to reach the desired page and gets slower with each page. The cursor based pagination completely eliminates this. That means whether page 1 or page 100 you get the same performance and makes infinite scroll actually pleasant to use.

Global posts have been removed. These were always out of context and were used as a strange means of making site wide announcements that showed on every stream out of context. If you need global posts I suggest instead making a custom stream for those global posts (e.g. set its asset to "global") then add that streams asset to any stream you want those global posts shown on.

Pinned posts have been removed. This pulled a post out of its database order and pushed it to the top. This is awful on the query optimization and constantly caused expensive filesorts. There are no plans for an alternative or workaround for pinned post removal. It's officially a deprecated and removed feature.

First page paging limit has been removed. This allowed you supply a different limit for the first page of a stream (e.g. first page shows 5 for first page then 10 for next page). This was removed due to the difficulty of detecting first page during cursor based paging and hurt query caching.

Stored streams are coming. A stored stream is a preconfigured stream object that can be reused. Currently streams are dynamically generated, stored in user session, and rebuilt on each page load. This is slow, prevents linking to activity, and prevents cross-stream rebuilding (e.g. a post from Stream A shown on Stream B will display based off Stream B parameters instead of Stream A parameters). This will bring significantly improved support for UNLIMITED streams.

Likes, Follows, and Notifications "streams" will be replaced with static APIs. It never made sense for likes/follows to be their own streams. These will be changed to a generic set of FAST APIs for liking/following things. Notifications never made sense to allow different notification streams. Notifications will be reduced down purely to be profile notifications (as they are by default) and remove support for making custom notification streams.

A LOT of new features are planned that would just turn this into an even longer wall of text so I highly recommend checking out our forge below to see what's coming.


There isn't a timeline for this at this time, but it's currently under development as we speak and on its way. The primary goal of this release is optimization more than anything, but some great new things will absolutely be coming!

activha's Avatar
activha replied the topic: #335073 5 months 2 weeks ago
Amazing what we could do with this !! :-)
krileon's Avatar
krileon replied the topic: #335047 5 months 2 weeks ago
Internal activity logging is nearly complete. My current goal is to first migrate all the CB Auto Actions usages into core CB Activity. This means you won't need CB Auto Actions for these anymore. You'll be able to simply toggle them enabled or disabled as desired. All will be default disabled.


You'll have a fairly decent amount of control over them. Not only can they be toggle enabled or disabled you can make them based off a field. So for example a user could have a checkbox field to decide if they want specific activity to be logged. Additionally you can override what stream the activity is created on, what comment stream the activity will use, and what likes asset to use for the activity.

Similar will be done for Notifications moving them into core CB Activity. In addition to this a new API has been implemented for easily creating activity, which will make it much easier to implement activity generation for 3rd party extensions. It's a simple chainable class. Example as follows.
( new ActivityEntity( 'event.41' ) )
        ->setUserId( 31 )

This would generate an activity entry with an asset of event.41 and belong to the user with an id of 31. By default this will be placed on their profile stream, but there's chainable functions to specify what stream to post to.
krileon's Avatar
krileon replied the topic: #334943 6 months 19 hours ago
Liked and Followed views are finally being implemented. This will give you and overview of every asset you've liked and followed with context links where available to go back to what was liked or followed.


You'll be able to unlike and unfollow from this view as well.
krileon's Avatar
krileon replied the topic: #334914 6 months 5 days ago
The share UI is nearly complete. It comes with multiple social media platforms supported out of the box with capability to add more easily.


All of these can be individually toggled off globally and per-stream for easy control of sharing. Note sharing only applies to activity. There currently are no plans for comment sharing as it'd just be sharing outside of context.

Suggestions for additional social media platforms welcomed and will do by best to add share URLs for them. Note none of these load 3rd party scripts. They are strictly share URLs, which helps maintain the privacy of your users and site.
krileon's Avatar
krileon replied the topic: #334904 6 months 1 week ago
Support for activity embeds is now implemented. This is similar to other social media sites that let you embed a post using an iframe to an external site.


If the post doesn't exist or isn't accessible to whomever is viewing the embed a placeholder is still rendered, which is fully customizable using a template file. If the post is accessible it will display as normally with all interactivity disabled and clicking anywhere in the post will directly link to that post.

This is the first step of implementing the Share functionality which will support sharing a link, a embed, and on different social media.
krileon's Avatar
krileon replied the topic: #334800 6 months 2 weeks ago
Privacy controls are built into streams now. You'll no longer need CB Auto Actions for this anymore. This also means more efficient means of filtering activity by privacy can be applied.


You'll be able to turn this on/off per activity stream. You can also specify who is allowed to use this feature. It doesn't stop there though. You can now completely override the entire privacy controls per stream and not have to exclusively use global privacy settings.


This has been extended to CB Gallery as well. You can now completely override the gallery behavior for media uploaded/linked to activity and comment streams on a per stream basis.

krileon's Avatar
krileon replied the topic: #334738 6 months 3 weeks ago
Captcha is now available for both activity and comments. It can be customized to only apply to new posts, existing posts, or both. You can specifically select the captcha mode in addition to what view access level the captcha will apply to.




If you choose to use Captcha I recommend using a silent invisible one like reCaptcha v3 or reCaptcha Invisible.
krileon's Avatar
krileon replied the topic: #334616 6 months 4 weeks ago
Guest commenting is finally in the works. In CB Activity 6.0.0 you'll be able to allow anonymous guest comments on any comment stream you like.

krileon's Avatar
krileon replied the topic: #334613 6 months 4 weeks ago
Post approval is now fully implemented for Activity and Comments. Now any stream can require a stream moderator to approve their post. For profile streams for example the stream moderator is the profile owner. These include support for notifications with options for how to notify the user defaulting to a CB Activity notification.

krileon's Avatar
krileon replied the topic: #334420 7 months 2 weeks ago
Backend activity and notification edit will now give details regarding their assets. It will give you a full breakdown of the asset, show you the context it believes belongs to the asset, and the class responsible for its source object. In addition to this it lets you know the template paths to customize the asset for adjusting how it renders or overriding access, source, and context as desired.


Additional backend explanations of asset are on the way as well. This should significantly improve your understanding of how asset works making custom activity and notifications even easier to implement. In most cases it's as simple as making a single template file and on that note there is now examples of how to implement custom asset sources, contexts, and access checks in addition to custom activity and notification displays. These examples are included as example.php and contain several comment blocks explaining how they work and showing how they work.
krileon's Avatar
krileon replied the topic: #334325 8 months 2 days ago
A simple views tracking feature is now available for activity. This is a simple incrementing value. A future release will implement full per-IP tracking of views. It uses local storage to avoid duplicate views from a user, but it shouldn't be used as some form of analytics and should be treated more like a simple hits tracker.


This is disabled by default and only applies to activity posts with a simple global on/off parameter.
krileon's Avatar
krileon replied the topic: #334282 8 months 1 week ago
The new bookmark system is now implemented. This lets users save posts to be viewed again later.




This supports a special "bookmarked" asset that can be used in filters. You can also assign a menu item to display all bookmarked posts.
krileon's Avatar
krileon replied the topic: #334113 8 months 3 weeks ago
Activity Comments now have multiple display modes to accommodate different social media needs. With these new modes it's much easier to replicate familiar behavior as seen on other social media. Take a look below!

Inline Collapsed

This mode always renders the comments stream, but it will be collapsed by default and upon clicking comments or comment button it will expand.


This mode does not render the comments stream initially. When clicking comments or the comment button it will ajax load in the comments stream presenting the user temporarily with a loader display as shown above.This can provide performance benefits for heavier sites since the comment streams do not load in initially.


This mode does not render the comments inline. When clicking the comments or comment button it will take the user to an individual activity page that only shows that activity entry and then on that page is where comments will be available. So while they're scrolling a stream for example comments only become available after doing this. This can provide performance benefits for heavier sites since the comment streams do not load in initially.

Modal Window

This mode does not render the comments inline. When clicking the comments or comment button it opens a modal window with the activity entry and now the comments are visible. The new comment box is stickied to the bottom of the modal window to ensure it's always available. This can provide performance benefits for heavier sites since the comment streams do not load in initially.
krileon's Avatar
krileon replied the topic: #334064 9 months 22 hours ago
Media can be nicely attached to any comment and you can now upload new media instead of just managing existing media while editing a post.


krileon's Avatar
krileon replied the topic: #334041 9 months 1 day ago
CB Gallery integration into CB Activity is nearly entirely complete. Gallery activity rendering, access checking, etc.. is now entirely built into CB Activity. You won't need CB Auto Actions anymore for this, same as the recent GJ integration. A generalized media-grid has also been implemented. This will allow for easily rendering equalized media grids that is now being utilized by CB Gallery activity. Take a look below.

1 Upload

A single upload will respect media size. This works same as linking media or media from any other source. This allows up to a maximum height limit to prevent creating massive posts. The limit is entirely CSS driven so is easily changed.

2 Uploads

The media grid is now active. This will create a media grid with a height of 500px. This is entirely CSS driven using CSS Grid so the height AND the grid styling can be entirely overridden easily.

3 Uploads

4 Uploads

5 Uploads

6 Uploads

7+ Uploads

The upload functionality will soon also be moved entirely into CB Activity. Once all is said and done you won't need CB Auto Actions at all for this integration. Purely CB Gallery + CB Activity. Toggling notifications on/off and activity on/on will be a matter of just adjusting those parameters and no longer require complex CB Auto Actions usage.
krileon's Avatar
krileon replied the topic: #333687 10 months 5 days ago
The long awaited Word Filter is now implemented. This will let you globally filter posts (activity title, activity message, and comment message) replacing specific words or implementing your own REGEXP word replacements. Take a look below!




This will allow you to apply whatever censorships you feel are necessary for your site.
krileon's Avatar
krileon replied the topic: #333617 10 months 1 week ago
The filter functionality is now complete. In addition to the above searching by hashtag and mentions you can also search by post message. Note all 3 are disabled by default and can be toggled on under Filters for an activity stream.


In addition to this filter "memory" is now implemented. So for example of you were to select Mentioned in the above screenshot and you refreshed the page it will remember you selected Mentioned and display it again automatically.
krileon's Avatar
krileon replied the topic: #333608 10 months 1 week ago
The filtering functionality is now being worked on to completion. Currently you can directly filter by Hashtag and Mention. Below is what this looks like in the filter menu.



There will also be support for directly searching against post messages, but it's recommended not to use it since that's a pretty heavy database call, but it will be left to you to decide if you want to use that or not.

Note how Display: changes to the filtered hashtag. Also keep in mind only ONE filter can be applied at a time. So you cannot for example search a Hashtag then further filter that by Mention. Doing so would be too inefficient on the database and am trying to prioritize performance otherwise you'd run into situations where it could become uncontrollably slow.
krileon's Avatar
krileon replied the topic: #333597 10 months 1 week ago
Well I thought the location feature was done, but showed it to my wife and immediately "How do I search for a location? Maybe I already left it, but need to tag it in my post.". So here we are. There's now a search feature. This is supported with Google Maps and OpenStreetMaps. With Google Maps it'll automatically take care of searching in a radius of where the map is looking, but for OSM you'll need to be more specific with your searching. I've also optimized it to use the bare minimum of API requests for Google Maps (and heavy caching!) to reduce the costs. You can see it in action below.

krileon's Avatar
krileon replied the topic: #333559 10 months 2 weeks ago
The location feature is officially 100% complete. You'll now also be able to separately select where a location is linked to. So for example they could select their location using OpenStreetMaps, which would then create a link to Google Maps. The choice will be entirely up to you. We will default to OpenStreetMaps for both map and linking as it's free and does not require any API key or additional input from you. Google Maps will require an API key, but provides a lot better Place data so the choice is yours.

Now onto the next thing. The old message limit counter (e.g. 30 / 400) shown at the bottom right of a message container is now replaced with a meter. The meter gives the user an idea of how much they've input without it feeling so obsessive with counting characters. Take a look below.




This of course works for activity and comments replacing the old usage in both.
krileon's Avatar
krileon replied the topic: #333487 10 months 3 weeks ago
The new Locations feature is coming along nicely. The first API implementation is for Google Maps. Next will be OpenStreetMaps. Other map types maybe considered for future releases. Additionally you'll be able to select None for the map type and continue with the old usage of requesting their address or using the find location button.


They'll have a nice map to scroll through and select what place they'll be at, going to, etc.. Additionally it supports geolocating. So if they click a building that doesn't have a place it will convert the latitude and longitude to a user friendly address if possible.

Please keep in mind these services provided by Google Maps are not entirely free. Everyone gets $200 of credits per month, which covers nearly 40,000 map API requests, which should be more than enough for most sites. It however will require an API key and a billing account at Google. This is why we'll be offerings other map types as well, but this by far gives the best experience for your users so it will be up to you as to what you'd like to do. OpenStreetMaps will be a solid free alternative, but it has significantly less Place data than Google Maps so please keep that in mind.
krileon's Avatar
krileon replied the topic: #333450 10 months 3 weeks ago
The links feature is officially complete. It supports auto-migration from legacy attachments to new media entity usage shown above. It supports the following domains out of the box for embeds.

youtube - shorts and videos
twitch - clips, videos, and streams
facebook - clips, videos, and streams
tiktok - videos and profiles

All of these iframes. This means no 3rd party JS tracking cookies, etc.. It also means no page delays due to 3rd party JS files.

If there's other popular social media sites that you'd like native embed support for please let me know and can look into it. There's some requirements for me to support a site natively though. Mainly they need to use modern cross-iframe message API for communicating the iframe height. Without that they will not be natively supported.

Note all standard social media metadata tags are supported out of the box. So any URL linked with open graph or twitter metadata will parse out as you'd expect them to on other social media platforms.
krileon's Avatar
krileon replied the topic: #333255 11 months 1 week ago
I've been hard at work rewriting the Links feature to be more familiar to users. They won't need to use +/- buttons anymore. Simply add a link to the post and it'll detect it. Below is the current progress for link previews.


You'll be able to close out the preview if you don't want it in your post and can toggle the image on/off as desired. YouTube and Vimeo support is built in. Automatic detection of image, video, audio, and files (e.g. PDF) is also built in. Standard URLs (e.g. just linking to a non-media URL) is also supported. A generic oEmbed parser is implemented so we can quickly and easily add new URL parsing behavior for any site that supports oEmbed. Several more core domains are also planned (e.g. Twitch) to handle their embeds.
krileon's Avatar
krileon replied the topic: #333020 1 year 3 days ago
Stream filters now support excluding. This will let you exclude specific assets, streams, and users from outputting in that filter.

krileon's Avatar
krileon replied the topic: #332991 1 year 6 days ago
Just another update. I've had to pause a week here and there to work on other plugins, but CB Activity is still progressing. Relational tables for mentions, tags, hashtags, and liked activity are now implemented. These tables are hyper optimized to contain simple pointers. What this means is it's possible to filter a stream down to all posts you were mentioned in, all posts you were tagged in, all posts with a specific hashtag, and all posts you've explicitly liked. This is all done blazing fast against a table with MILLIONS of rows so rest assured it will scale.

In addition to this the mentioned behavior shown above is finalized. Hashtags also now has an autocomplete just like mentions. The contenteditable behavior of the activity post has also been finalized. Other sites and solutions use bulky WYSIWYG editors loading tons and tons of JS, but CB Activity is using a scratch made solution that's light and blazing fast!

The filtering behavior for activity streams has also been finalized. You can setup as many filters as you need, set access for them, and restrict them to stream owner. Filters can filter by asset, by stream id, and by user ids. They can be named whatever you like and you control the default filter (the All filter) for streams.

Still a lot more to do, but our ticket tracker below is looking more and more done!


Facebook Twitter LinkedIn