Chris Andre Buys

  •  ·  Premium
  • C

    J

    43 friends
  • P

    46 followers
  • 6973 views
  • 1 votes
  • More
·
Added a discussion

Hey UNA family 👋

Some of you may remember a commitment I made about building a UNA CMS IDE — and I want to address that directly: the promise still stands. I haven't forgotten, and I haven't walked away.

The honest reason for the delay is a good one. I've been deep in the trenches finishing my own long-overdue modules for a personal project, and I made a conscious decision to use that time to gain more exposure, deeper learning, and real hands-on experience before bringing the IDE vision to life properly. I'd rather deliver something solid than rush something half-baked to the community I respect.

But here's what's been burning in my mind lately...

We are living in the most extraordinary moment in tech history. AI is rewriting what's possible — and I genuinely believe UNA CMS belongs to us, the community. With the right collective push, there is absolutely no reason why UNA can't become the number one community platform ever built. Not just a niche tool — the platform.

I'm planning to dedicate time to actively marketing UNA — with the blessing and approval of the team and leadership — because I believe in it that much. The architecture, the flexibility, the vision Andrey and the team have built deserves a louder voice.

More updates coming soon. Stay with me. 🙏

— Chris

  • 141
  • 1

"A heartfelt apology to my UNA CMS family — right in the middle of our conversation, load shedding decided to pay us an uninvited visit! You have my sincerest apologies for the abrupt disconnect. South Africa keeps us humble! 😅 I'm back now and ready to pick up right where we left off." @Clubhouse @Tajrebatee @ClickandShare.NET @chadez and all the others...

  • 109
  • 😆 3
·
Added a discussion

I recently purchased the Clubs, Business Listings, and Spaces RSS modules originally developed by Jerome Mingo (modzzz on UNA Market ). After running into issues with compatibility on my own installation, I've gone ahead and fixed them.

If you're also stuck with these modules and they're not working correctly on your UNA setup, feel free to reach out to me directly. I'm happy to share the fixed versions at no charge — all I ask is that you show proof of your original purchase from Jerome Mingo's store.

Just drop me a message here or via my profile and we'll sort you out. 🙌

Regards

Chris

  • 269
  • 1
·
Added a discussion

PHP Fatal error: Uncaught Error: Call to a member function send() on bool 

in modules/boonex/notifications/classes/BxNtfsModule.php:702

Stack trace:

#0 /modules/boonex/notifications/classes/BxNtfsCronQueue.php(39): BxNtfsModule->sendNotificationPush()

#1 /periodic/cron.php(121): BxNtfsCronQueue->processing()

Root cause confirmed (line 702 in  sendNotificationPush()):

// PROBLEM: Static call assumes getObjectInstance() always returns object

return BxDolPush::getObjectInstance()->send($iProfile, array(...));

BxDolPush::getObjectInstance() returns false (push not configured), but code calls ->send() anyway.

Live server — haven't applied any fixes yet. Need confirmation before touching.

$sSubject = !empty($aSettings['subject']) ? $aSettings['subject'] : _t('_bx_ntfs_push_new_event_subject', getParam('site_title'));

// Defensive check added:

$oPush = BxDolPush::getObjectInstance();

if (!$oPush) {

  return false; // Skip push gracefully when disabled/unconfigured

}

return $oPush->send($iProfile, array( // Now safe

  'contents' => array('en' => $aContent['message']),

  'headings' => array('en' => $sSubject),

  'url' => $aContent['url'],

  'icon' => $aContent['icon']

), true);

-------

Site impact: Load dropped 5+ → 1.2, notifications load instantly, no more hidden cron CPU spam.

Questions for UNA team/community:

  1. Do the v14 patches (showing in App Store > Updates) include this exact fix? Safe to apply with custom mods ( , reactions, etc.)?
  2. Proper way to fully disable push notifications so this code path never triggers? (Studio setting? DB flag?)
  3. Anyone seen this after optimizations or v14 patch mismatches? Vaguely remember thread mentioning notifications.

Server: VPS, UNA v14, PHP 8.2, heavy traffic (timeline/reactions spam in logs).

Appreciate any insights before applying patches

Regards Chris

  • 459
  • 1

I'm nearly finished, and what an incredible journey it's been. I've absorbed so much knowledge, especially a far deeper grasp of UNA CMS internals. Crafting this AI that builds full-stack apps has unlocked new doors in my mind, reshaping how I approach development from the ground up.

  • 435
  • 1
·
Added a discussion

@unateam @CluBDeveloper @Direct Line Development @Exnihilo Developments @CluBDeveloper @Developer Experiance Hub @HQ-Development @JCo Web Development @Online Audience Hosting & Web Developments @OuroborosDevelopment @TCCDevelopment @tsdevelopment @Web development Institute @jaytech developers @Web application development services @Royal Developer @Developers App India @Andrey Yasko @Alex T⚜️ @Anton L @LeonidS @Rene @Clubhouse

Very soon, the UNA community will become much more active again, and we’ll start to see a rise in new members who are excited by what I’m working on. I’m putting the final touches on a modular‑app builder and a UNA‑focused AI assistant tailored specifically for developers and agencies. This toolkit is designed to make creating custom modules faster, more visual, and far less reliant on deep framework knowledge—letting you scaffold, configure, and iterate UNA modules in minutes instead of hours. As this tool rolls out, I expect it will help attract new UNA users, both in the open‑source community and among professional developers launching custom communities. I’ll be sharing the first demos right here, along with GitHub links and early access options, and I’d love your feedback so we can shape it together and grow the UNA ecosystem around it

  • 702
  • 💓 2
·
Added a discussion

Background

I've just finished a consultation call with Amazon regarding S3 storage for our UNA CMS video timeline system. They've directed me to the AWS Pricing Calculator, but I need the community's expertise to ensure I'm calculating this correctly.

Calculator Link: 

What We Know So Far

  • Service Required: S3 Standard storage
  • Region: Europe (London) / EU-West-2
  • Use Case: Storing and delivering video timelines to users
  • Free Tier Available: 5GB storage, 20K GET requests, 2K PUT requests monthly

Key Questions I Need Help With

1. Data Transfer Per Timeline Pull

When a user pulls/loads a timeline in UNA CMS:

  • How much data is typically transferred?
  • Does this include video files, thumbnails, metadata, or all combined?
  • Are videos streamed or downloaded in full?
  • What's the average timeline size in your experience?

2. Monthly Data Transfer Estimates

For calculating the AWS costs accurately:

  • How should I estimate total monthly data transfer?
  • What's the typical ratio of uploads (PUT) vs downloads (GET)?
  • How many timeline pulls should I expect per active user per month?

3. Calculator Configuration

When using the AWS calculator for S3 Standard (London region), what values should I input for:

  • Storage amount (GB): How much video storage per user/timeline?
  • PUT requests: Upload frequency?
  • GET requests: Download/view frequency?
  • Data Transfer OUT: This seems to be the biggest cost factor - how do you calculate this?

What I'm Looking For

From the community:

  • Real-world usage patterns from existing UNA video timeline implementations
  • Typical storage and bandwidth consumption metrics
  • Best practices for estimating AWS costs for video delivery
  • Any tips on reducing data transfer costs (CDN, optimization, etc.)

Specific Help:

  • Walk me through the calculator with realistic numbers for a small-to-medium UNA community
  • Should I be considering alternatives like Cloudflare R2 (zero egress fees) or DigitalOcean Spaces?

Additional Context

I'm particularly concerned about data transfer OUT costs, as the AWS rep mentioned this is typically the largest expense when users frequently pull/view timelines.

Any insights, formulas, or real-world examples would be incredibly helpful!

Thanks in advance! 🙏

  • 731
  • 1
·
Added a discussion

UNA CMS Version: 14

Module: Comments/Reactions (Studio > Navigation > Systems > Comments)

Environment: VPS (Linux/PHP 8.x/MySQL), production community site

Bug Description:

When reactions are disabled in Studio > Navigation > Systems > Comments (or All Comments), then re-enabled, the system creates duplicate entries in the reactions database table (likely sys_comments_reactions or bx_vote_reactions).

Additionally, the frontend only displays/reads the first 3 reactions from the table, ignoring any beyond that—regardless of actual votes/reactions present.

Steps to Reproduce:

  1. Go to Studio > Navigation > Systems > Comments
  2. Disable reactions for Comments (or All Comments)
  3. Save & clear cache
  4. Re-enable reactions for the same
  5. Save & check DB: Duplicates appear for the same reaction types (e.g., multiple thumbs-up entries per comment_id)
  6. Frontend: Only first 3 reactions show (hardcoded LIMIT 3 suspected)

Database Impact:

text
-- Example duplicates found (pseudocode):
SELECT * FROM sys_comments_reactions WHERE comment_id = X;
-- Returns 6+ identical rows instead of unique (content_id, reaction_id, author_id)

Not Serialization-Related: This is a separate issue from the known BxDolVoteReactions.php  BxDolVoteReactions.php  unserialize() errors—purely toggle-induced duplicates + display limit.

Request:

  • Confirm if this is known & provide patch (code/DB fix)
  • Exact table name for reactions on comments?
  • Why LIMIT 3 hardcoded? Can we override?
  • SQL to clean duplicates + prevent future?

Site Context: Multi-residential community platform (live production). Need quick resolution.

Priority: Medium-High (affects user engagement on comments/posts).

Regards, Chris

  • 687
  • 2
·
Added a discussion
Storage filling up fast with old timeline posts (images/videos). Need safe auto-cleanup solution.

CREATED this script but haven't tested yet – want UNA experts to review before running on production.

COMPLETE SCRIPT (SQL-safe with $db->escape()):

```php
<?php
/**
 * UNA 14 TIMELINE CLEANUP - NEEDS EXPERT REVIEW
 * SQL-Safe | cfmediahome.com | Untested
 */
$daysOld  = 14;  // Plan: 14 → 60 days
$dryRun   = true;  // false = live delete
$lockFile = '/tmp/timeline_cleanup.lock';
$logFile  = '/var/log/timeline_cleanup.log';

// SAFE LOCK
if (file_exists($lockFile) && (time() - @filemtime($lockFile)) < 300) {
    exit('LOCKED');
}
touch($lockFile);

require_once 'inc/header.inc.php';
$db = BxDolDb::getInstance();

logMsg("START " . date('Y-m-d H:i:s') . " (dryRun: " . ($dryRun ? 'YES' : 'NO') . ")");

$cutoff = time() - (86400 * $daysOld);
$events = $db->getAll("
    SELECT `id`, `owner_id` FROM `bx_timeline_events` 
    WHERE `type`='post' AND `date` < {$cutoff} AND `status` != 'hidden'
");

$count = count($events);
logMsg("Found {$count} old posts");

foreach ($events as $event) {
    $eventId = (int)$event['id'];
    $ownerId = (int)$event['owner_id'];
    
    // COMMENTS
    if ($dryRun) {
        $comments = (int)$db->getOne("SELECT COUNT(*) FROM `bx_timeline_cmts` WHERE `event_id`=" . $db->escape($eventId));
    } else {
        $db->query("DELETE FROM `bx_timeline_cmts` WHERE `event_id`=" . $db->escape($eventId));
        $comments = $db->getAffectedRows();
    }
    
    // NOTIFICATIONS
    if (!$dryRun) {
        $db->query("DELETE n FROM `bx_ntfs_notifications` n JOIN `bx_ntfs_handlers` h ON h.id=n.handler_id WHERE h.event_id=" . $db->escape($eventId));
    }
    
    // FILES
    $files = $db->getAll("SELECT f.id FROM `bx_files_2_timeline` ft JOIN `bx_files` f ON f.id=ft.file_id WHERE ft.timeline_id=" . $db->escape($eventId));
    $fileCount = count($files);
    if (!$dryRun && $fileCount) {
        $fileIds = array_map('intval', array_column($files, 'id'));
        $fileIdsList = implode(',', $fileIds);
        $db->query("DELETE FROM `bx_files_2_timeline` WHERE `timeline_id`=" . $db->escape($eventId));
        $db->query("DELETE FROM `bx_files` WHERE `id` IN ({$fileIdsList}) AND `owner_id`=" . $db->escape($ownerId));
    }
    
    // EVENT
    if (!$dryRun) {
        $db->query("DELETE FROM `bx_timeline_events` WHERE `id`=" . $db->escape($eventId));
    }
    
    logMsg("Event #{$eventId}: files={$fileCount}, comments={$comments}");
}

logMsg("COMPLETE: {$count} processed");
@unlink($lockFile);

function logMsg($msg) {
    global $logFile;
    file_put_contents($logFile, date('Y-m-d H:i:s') . ' ' . $msg . "\n", FILE_APPEND | LOCK_EX);
}
?>
  • 987
  • 1