Release v1.0.0 #94

Closed
jmiller wants to merge 0 commits from dev into main
Owner

Full community platform release from dev to main.

Full community platform release from dev to main.
jmiller added 53 commits 2026-06-04 15:00:03 +00:00
feat: initial MokoJoomCommunity platform with full feature set
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
29bc7ead7e
Community profiles, connections, and activity streams for Joomla —
replacing Community Builder with native Joomla 5/6 architecture.

Core platform:
- Profiles with custom fields (EAV), avatars, and bio
- Bidirectional connections with approval workflow
- User lists/directory configurations
- DI container pattern, SubscriberInterface, PSR-4 namespaces

Registration Guard (ported from MokoCBRegGuard):
- 8 spam detection checks: IP frequency, StopForumSpam, DNSBL,
  subnet burst, email domain, username patterns, IP reputation, birthday
- Weighted risk scoring with configurable thresholds
- Dual-mode: blocks high-risk before save, logs medium-risk after save
- Email notifications for flagged registrations

Field Privacy (ported from MokoCBPrivacy):
- Per-user Facebook-style field visibility overrides
- Privacy levels: public, registered, friends, private
- Floor enforcement: users can only tighten, never loosen admin defaults
- GDPR-ready export and delete methods

Activity Stream (Facebook-style):
- User-authored status posts with per-post visibility
- Facebook 6 reactions (like, love, haha, wow, sad, angry)
- 2-level threaded comments (comments + replies)
- Three feed types: news feed, community, profile
- Denormalized like/comment counts

Discussion Forum:
- Categories with sub-categories and ordering
- Topics with sticky, locked, status, view counts
- Threaded replies with post likes
- Read tracking via high-water mark (unread indicators)
- Activity stream integration for new topics/replies

User Groups (Facebook Groups / CB GroupJive):
- Three group types: open, closed, secret
- Role hierarchy: owner, admin, member
- Membership state machine: pending, active, invited, banned
- Group wall with posts, likes, flat comments
- Member management with approve/remove
- Secret groups hidden from non-member discovery

Infrastructure:
- 21 database tables with proper indexes
- 5 versioned SQL migrations (01.00.00–01.04.00)
- PHPStan level 5, Joomla coding standards
- 13 Gitea CI workflows
- Atomic user cleanup (all data removed in transaction on deletion)

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add invitation system (email + shareable links)
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
bf07542cfa
Invite friends via personalized email or shareable link URL.
Auto-creates connection between inviter and invitee on acceptance.
Supports invite limits, expiry, revocation, and invite-only registration mode.

- InviteHelper: send email, create link, validate token, accept, revoke
- InviteModel/View/Controller: full site MVC with CSRF protection
- Templates: invite management dashboard + invite landing page
- Config: enabled toggle, max per user, expiry days, invite-only mode
- User plugin: auto-accept invite token on registration, cleanup on deletion
- SQL migration 01.05.00: #__mokojoomcommunity_invites table
- Feature issues: MokoJoomSocialLogin bridge, gallery integration

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add auto-welcome, profile view tracking, and profile progress
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
9a649a04c2
Three features in one batch:

Auto Welcome (CB Auto Welcome):
- Personalized welcome email with template substitutions ({name}, {sitename}, etc.)
- Auto-connection request from a designated community admin user
- Configurable email subject and body in component config

Profile View Tracking (CB Last Views Tab):
- Records who viewed whose profile with visit count and timestamps
- "Who Viewed Your Profile" sidebar on own profile
- Unique viewer count and total view counter
- Does not track self-views or guest views

Profile Progress (CB Progress Field):
- Calculates completeness percentage from avatar, bio, and custom fields
- Color-coded progress bar (red/orange/yellow/green)
- Shows missing items with suggestions to complete
- Only visible on own profile, hidden at 100%

Integration:
- ProfileModel now records views and exposes progress/viewers to the view
- Profile template redesigned with sidebar layout for viewers
- User plugin sends welcome on registration, cleans up view data on deletion
- SQL migration 01.06.00: #__mokojoomcommunity_profile_views table

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add profile wall, conditional fields, and repeating field groups
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
59a032060d
Three more CB features ported:

Profile Wall (CB ProfileBook):
- Guestbook-style messages on user profiles
- Built on activity stream (action='wall.post', context='profile')
- Profile owner + author can delete messages
- Likes and reactions via existing ActivityHelper

Conditional Fields (CB Conditional):
- Show/hide fields based on other field values
- 13 operators: equals, contains, empty, regex, greater_than, in, etc.
- Conditions stored in field params JSON (no new tables)
- Server-side filtering via ConditionalHelper::filterByConditions()
- Client-side JS generator for live form toggling

Repeating Field Groups (CB Field Groups):
- Multiple entries per field group (phone numbers, addresses, etc.)
- JSON array storage in synthetic hidden field per group
- Add/remove entries with index-based operations
- Three render formats: table, list, tags
- No new tables — uses existing field_values with JSON

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add inline field editing and unified search
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
9340c7ded0
Inline Edit (CB Core Fields Ajax):
- AJAX field value updates directly from profile view
- Type-specific validation: email, URL, date, number, select
- Required field enforcement and max length checks
- Bio inline editing support
- Owner-only access control

Unified Search (CB User Search + CB Author Bot):
- Profile search across name, username, bio, and custom field values
- Forum topic search across title and body
- Group search across title and description
- Secret group filtering for non-members
- Relevance sorting: name match > username > bio > field value
- Filters: group membership, connected users only
- searchAll() for unified cross-content results

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add private messaging, notifications, content moderation, and user blocking
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 6s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 6s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
f5f7c95ea9
Four major social platform features:

Private Messaging (Facebook Messenger-style):
- 1-on-1 direct conversations with get-or-create pattern
- Group conversations with leave functionality
- Per-participant read tracking (high-water mark)
- Mute toggle per conversation
- Conversation list with unread indicators and last message preview
- Chat-style message thread UI with own/other message styling
- Block enforcement: blocked users cannot message each other
- 3 tables: conversations, participants, messages

Notifications (bell icon system):
- 15 notification types: like, comment, reply, mention, connection,
  message, group invite/approve/post, forum reply, invite accepted,
  report resolved, wall post
- Unread count for badge display
- Mark single or mark-all-as-read
- Auto-purge old read notifications (configurable)
- Actor info with avatar for rich notification display
- Block-aware: suppresses notifications from blocked users

Content Moderation (report + mod queue):
- Report system with 5 reasons: spam, harassment, inappropriate,
  misinformation, other
- Duplicate report prevention (one report per user per content)
- 7 reportable content types: activity, comment, forum post/topic,
  group post, profile, message
- Moderator queue with pending count for admin badge
- 4 resolution actions: none (dismiss), warned, content_removed, user_blocked
- Auto-executes actions: removes content via existing helpers, blocks users
- Reporter notification when report is resolved

User Blocking:
- One-directional blocking (A blocks B, B doesn't know)
- Bidirectional check for interaction prevention
- Auto-removes existing connection on block
- Enforced across messaging, notifications, wall posts
- Block management page with unblock
- 6 tables total (conversations, participants, messages,
  notifications, reports, blocks)

SQL migration 01.07.00: 6 new tables (29 total)

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add gallery, events, payments, ID verification, and age enforcement
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
6f802c9d1e
Major feature expansion — 10 new tables (39 total):

Personal Galleries:
- Profile and group photo albums with per-album visibility
- Image upload with auto-thumbnail generation (center-crop)
- Supported: JPEG, PNG, GIF, WebP
- Like/comment counts per image

Facebook-Style Events:
- Events with hosts and co-hosts (friends of creator only)
- Admin events: no host required; personal events: host required
- RSVP system: Going, Interested, Declined with counts
- Physical location with coordinates + virtual event URL
- iCal recurrence rule support
- Group events scoped to community groups
- Per-event visibility controls

Event Ticket System:
- Multiple ticket types per event (VIP, General, etc.)
- Per-type pricing, capacity, sold count
- QR code token generation for check-in
- Check-in scanning with timestamp
- Booking confirmation with payment reference

Payment System (Stripe Connect + PayPal):
- System-wide Stripe/PayPal for site owner payments
- Per-user Stripe Connect accounts for receiving payments
- Per-user PayPal payout accounts
- Platform fee configuration (site takes a cut)
- Transaction logging with provider references
- Refund processing
- Transactions anonymized (not deleted) on user deletion

Secure ID Verification:
- Document upload: drivers license, passport, national ID
- Files stored OUTSIDE webroot with 0600 permissions
- SHA-256 file integrity hash
- Admin review queue (approve/reject with notes)
- Notification on review completion
- GDPR: files deleted on rejection or user deletion

Birthday/Age Enforcement:
- Birthdate always required (configurable)
- Configurable minimum age (default 13)
- Public profile shows month/day only (year hidden by default)

6 Gitea issues created (#1-#6) for tracking.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add marketplace enable/disable toggle for site admins
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
f8ee16c206
Site administrators can now enable or disable marketplace capabilities
(user-to-user payments, Stripe Connect, PayPal payouts) via component
configuration. Default: disabled.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: consolidate social login plugins into MokoJoomCommunity package
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
756e1848ea
Moved all MokoJoomSocialLogin sub-extensions into this package:
- plg_system_mokojoomsociallogin (OAuth orchestrator, button injection)
- plg_user_mokojoomsociallogin (profile sync, account cleanup)
- plg_mokosociallogin_discord (Discord OAuth2)
- plg_mokosociallogin_google (Google OAuth2)
- plg_mokosociallogin_facebook (Facebook OAuth2)
- plg_mokosociallogin_telegram (Telegram Login Widget)

Includes OAuthHelper, SocialLoginProviderInterface, and the
#__mokojoomsociallogin_accounts table for linked social accounts.

Repo consolidation:
- Migrated 19 open issues from MokoJoomSocialLogin and MokoCBRegGuard
- Deleted repos: MokoJoomSocialLogin, MokoCBRegGuard, MokoCBPrivacy, MokoCBAPI
- Previously deleted: MokoJoomGallery, MokoJoomCalendar
- All features now live in a single MokoJoomCommunity package

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: consolidate MokoJoomMembership into MokoJoomCommunity
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
dd93adf6fa
Merged the full membership/subscription management system:

Component (com_mokojoommembership):
- Plans: free, paid, recurring, trial memberships
- Subscriptions: lifecycle management (create, renew, expire, cancel)
- Payments: transaction logging, refunds, gateway integration
- Coupons: discount codes with usage limits and date ranges
- AccessService: Joomla user group assignment by subscription status
- InvoiceService: PDF invoice generation
- SubscriptionService: automated lifecycle management
- Admin: dashboard, plans, subscriptions, payments, coupons CRUD
- Frontend: plan listing, plan detail, subscribe form, member profile
- OS Membership migration CLI tool

Payment Gateway Plugins (7):
- plg_mokojoommembership_stripe (Stripe)
- plg_mokojoommembership_paypal (PayPal)
- plg_mokojoommembership_authorize_net (Authorize.Net)
- plg_mokojoommembership_braintree (Braintree)
- plg_mokojoommembership_mollie (Mollie)
- plg_mokojoommembership_square (Square)
- plg_mokojoommembership_dolibarr (Dolibarr ERP sync)

Modules (2):
- mod_mokojoommembership_login (member login widget)
- mod_mokojoommembership_plans (plan pricing display)

Plugins (2):
- plg_system_mokojoommembership (content restriction, expiration cron)
- plg_webservices_mokojoommembership (REST API)

50 issues migrated from MokoJoomMembership (#26-#75).
Gitea repo deleted. Local repo deleted.

All legacy repos now consolidated:
- MokoJoomSocialLogin -> merged
- MokoCBRegGuard -> features ported
- MokoCBPrivacy -> features ported
- MokoCBAPI -> features ported
- MokoJoomGallery -> features ported
- MokoJoomCalendar -> features ported
- MokoJoomMembership -> merged

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add comprehensive REST API for entire community platform
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
f93ea02df2
New plg_webservices_mokojoomcommunity plugin registering 80+ API endpoints
under /api/v1/community/ for all features:

Profiles (9 endpoints):
  GET/PATCH profiles, fields, privacy, progress, viewers, wall, galleries

Connections (4): CRUD with accept/decline

Activity Stream (7):
  Feed, posts, likes/reactions, comments (threaded)

Forum (10):
  Categories, topics, posts, likes, sticky/lock toggles

Groups (12):
  CRUD, join/leave, members, posts, likes, member management

Messages (5):
  Conversations, send/receive, unread count

Notifications (4):
  List, mark read, mark all read, unread count

Events (12):
  CRUD, RSVP, hosts, ticket types, booking, QR check-in

Galleries (5):
  CRUD, image upload

Invitations (5):
  Email invite, link invite, revoke, validate token

Moderation (3):
  Submit report, list reports (admin), resolve

Blocking (3):
  Block, unblock, list blocked

Search (4):
  Unified, profiles, forum, groups

Payments (4):
  Connect/disconnect accounts, list transactions

Verification (4):
  Submit ID, check status, admin pending queue, approve/reject

All endpoints require Joomla API token auth (Bearer) except
invite validation (public).

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: build membership infrastructure — webhooks, email, ACL, content restriction
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
f9e95bc117
Resolves critical membership infrastructure gaps:

WebhookController (#74):
- Receives Stripe/PayPal payment callbacks at
  ?option=com_mokojoommembership&task=webhook.handle&gateway=stripe
- Raw POST body parsing, gateway-specific header extraction
- Dispatches onMokoMembershipWebhook to gateway plugins
- JSON response with proper HTTP status codes
- Logging for debugging

EmailService (#75):
- Database-stored email templates with substitution tokens
- 10+ tokens: {name}, {plan_title}, {payment_amount}, {sitename}, etc.
- send() for user notifications, sendToAdmin() for admin alerts
- Template CRUD for admin management
- Works with existing seed data (5 default templates in install SQL)

access.xml (#72):
- ACL permissions for component, plan, subscription, coupon sections
- Standard Joomla actions: admin, manage, create, edit, delete, editstate

SQL Update Schema (#71):
- Created sql/updates/mysql/ directory with 01.00.00.sql baseline

Content Restriction (#46):
- {membership_restrict plan_id=X}...{/membership_restrict} shortcode
  in articles/modules — hides content from non-subscribers
- onContentBeforeDisplay: auto-detect access-level-gated articles
  and show teaser + upgrade prompt for non-subscribers
- Maps Joomla access levels to membership plans via user_group_id

Stripe Config (#70):
- Already had fields: sandbox toggle, publishable key, secret key,
  webhook signing secret — verified complete

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: membership services — tax, plan upgrades, offline payment, CLI cron
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
8805ee6fe6
TaxService (#27):
- VAT/sales tax calculation with inclusive/exclusive modes
- Per-plan tax rate override or global default
- Discount + tax combined calculation
- Formatted breakdown for display

UpgradeService (#31):
- Immediate upgrade: cancel current, start new with prorated credit
- Downgrade at end of period: schedule change in subscription params
- Prorated refund calculation based on unused days
- getAvailableChanges() shows all plans with price diff and direction

Offline Payment Gateway (#39):
- New plg_mokojoommembership_offline plugin
- Creates pending payment record, shows configurable instructions
- Admin confirms payment manually to activate subscription
- Configurable title, description, and payment instructions

CLI Cron Command (#67):
- Process expired subscriptions (remove user groups)
- Send expiring-soon reminders (7, 3, 1 days before)
- Execute scheduled plan changes at effective date
- Clean up stale pending payments (>30 days)
- Can run standalone or via Joomla CLI

Also verified already-built issues:
- #52 AccessService: fully implemented (72 lines)
- #53 SubscriptionService: fully implemented (280 lines)
- #54 Frontend models: 4 models exist (PlansModel, PlanModel, ProfileModel, SubscribeModel)
- #55 Frontend views: 4 views + 4 templates exist
- #56 Admin controllers: 10 controllers with save/delete/publish
- #57 Admin form XML: 7 form definitions (plan, coupon, subscription + 4 filters)
- #58 Admin HtmlView: 9 views with toolbars
- #59 Admin Table classes: 4 tables (Plan, Subscription, Payment, Coupon)
- #60 Admin list/form models: 8 models with populateState
- #68 Subscription edit form: template exists (46 lines)
- #69 populateState + filters: implemented in all list models

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: membership — import/export, reporting, content drip
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
bc1d318bc3
ImportExportService (#30):
- Export subscriptions to CSV with filters (status, plan, date range)
- Export payments to CSV with user/gateway details
- Import subscriptions from CSV by email lookup
- Handles missing users gracefully with error reporting

ReportService (#32, #36):
- Subscription stats: by status, by plan, new last 30 days
- Revenue report: total, by gateway, by plan, daily breakdown
- Refund tracking with net revenue calculation
- CSV export of revenue reports
- Feeds the admin dashboard with stats and charts data

ContentDripService (#35):
- Scheduled content access based on subscription age
- Drip rules in plan params JSON: days_after_start + access_level
- processContentDrip() grants access levels as users progress
- getUserDripStatus() shows unlocked/locked stages with countdown
- revokeDripAccess() cleans up on subscription expiry
- Integrates with AccessService for Joomla user group management

Also verified #36 Dashboard: DashboardModel (94 lines) already exists
with stats queries — ReportService now provides the revenue data it needs.

Also verified #73 InvoiceService: already fully implemented (195 lines)
with invoice creation, HTML rendering, and user retrieval.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chore(ci): add CI issue reporter for auto-filing gate failures
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
2c308b13a7
chore(ci): add CI issue reporter for auto-filing gate failures
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
e15a549638
chore(ci): add CI issue reporter for auto-filing gate failures
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
12fa030768
feat: social login enhancements, GeoIP, group memberships, CB/Akeeba migration
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
9e041f373e
Social Login (#8-15):
- Telegram email fallback (#8): stores auth in session, signals needs_email
  for system plugin to show collection form
- SocialAccountHelper: covers #9-#11, #14-#15
  - User group assignment by provider (#9): reads provider_group_X from params
  - Admin dashboard data (#10): stats by provider, recent linked accounts, search
  - Account linking/unlinking (#11): linkAccount(), unlinkAccount(), getLinkedAccounts()
  - Discord guild verification (#14): verifyDiscordGuild() via Discord API
  - Discord role restrictions (#15): verifyDiscordRoles() via guild member API
- Instagram (#12) and Google One Tap (#13) need provider-level changes (kept open)

RegGuard:
- GeoIP country filtering (#22): ip-api.com lookup, allow/block country lists
- Admin dashboard (#24): getAdminDashboard() with stats by risk level and recent logs

Membership:
- Group/family memberships (#34): GroupMembershipService with add/remove/list members,
  group_max_members in plan params, access grant/revoke for secondary members
- Verified #38 Dolibarr: plugin stub already exists
- Verified #45 Menu items: Router already registers plans/plan/subscribe/profile views
- Verified #47 Modules: both modules already implemented with Dispatchers
- Verified #48-49 Assets: media folder and CSS exist
- Verified #51 SEF Router: already implemented with MenuRules/StandardRules/NomenuRules

Migration:
- MigrationHelper: import from Community Builder and Akeeba Social Login
  - CB profiles -> community profiles (avatar, canvas)
  - CB custom field values -> community field values (auto-creates fields)
  - CB connections -> community connections
  - Akeeba Social Login -> mokojoomsociallogin_accounts (both #__user_profiles
    and #__sociallogin table formats supported)
  - Skips duplicates, reports errors, maps CB field types

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: Instagram login, Google One Tap, migration tool with auto-disable
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
b50a772542
Instagram Login Provider (#12):
- New plg_mokosociallogin_instagram plugin
- Uses Facebook Login with Instagram scopes (same App ID)
- Fetches Instagram business account username and avatar
- Falls back to Facebook profile data if no IG account linked
- Full OAuth2 flow with CSRF state protection

Google One Tap (#13):
- Injects Google Identity Services One Tap prompt when enabled
- Configurable via plugin params (enable_one_tap toggle)
- Uses existing Google client_id and callback URL
- Script loaded with crossorigin="anonymous"

Security:
- Added crossorigin="anonymous" to external scripts
  (Google GSI client, Telegram widget)
- SRI not feasible for dynamically-versioned provider scripts

Migration Tool (MigrationHelper):
- importCommunityBuilder(): profiles, custom fields, connections
- importAkeebaSocialLogin(): both #__user_profiles and #__sociallogin formats
- disableLegacyExtensions(): disables CB + all Akeeba sociallogin plugins
- runFullMigration(): one-call import + disable workflow
- CB fields auto-created with type mapping (text, select, date, etc.)
- Skips duplicates, reports errors per-record

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: add 8 community modules and admin Quick Icon cpanel
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
ed573c4583
Site Modules (8):
- mod_mokojoomcommunity_activity: Recent activity stream posts
- mod_mokojoomcommunity_members: Member directory (newest/active/popular sort)
- mod_mokojoomcommunity_groups: Groups listing with member counts
- mod_mokojoomcommunity_events: Upcoming events with dates and RSVP counts
- mod_mokojoomcommunity_login: Login form with social login integration
- mod_mokojoomcommunity_profile: Mini profile card with avatar and connection count
- mod_mokojoomcommunity_forum: Recent forum topics with reply counts
- mod_mokojoomcommunity_notifications: Bell dropdown with unread count and list

All modules use Joomla 5 AbstractModuleDispatcher pattern with
configurable max_items and sort options.

Admin Dashboard (cpanel):
- plg_quickicon_mokojoomcommunity: Quick icon stats on Joomla admin home
  - Profile count, pending reports (warning), pending ID verifications,
    forum topics, groups, upcoming events
  - Links to community admin views

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: PHPUnit test suite and language file completion
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
a6a169c085
PHPUnit Setup (#43):
- Added phpunit/phpunit ^10.5 to composer.json require-dev
- Created phpunit.xml with Unit test suite targeting Helper directory
- Created tests/bootstrap.php with Joomla stub classes for isolated testing
  (Factory, ComponentHelper, Registry, OutputFilter, Uri)
- PSR-4 autoload-dev for MokoJoomCommunity\Tests namespace

Test Cases (5 test files, 35+ test methods):
- RegGuardHelperTest: birthday validation (valid, future, too young, too old,
  suspicious pattern, empty, invalid), username checks (normal, short,
  excessive digits, mostly digits, custom pattern), email domain checks
  (blocked, allowed, not in allowlist, empty), risk scoring and classification,
  suggestion generation, IP detection
- ConditionalHelperTest: all 8 operators (equals, not_equals, contains, empty,
  not_empty, greater_than, in, regex), match modes (all, any), empty conditions,
  missing field handling
- ProgressHelperTest: progress bar HTML output, public static method signature
- PrivacyHelperTest: level constants, labels, map coverage
- TaxServiceTest: exclusive/inclusive tax, zero tax, discount + tax,
  discount exceeding price, formatted breakdown

Language File Completion (#44):
- Added missing key COM_MOKOJOOMCOMMUNITY_FORUM_TOPIC
- Synced en-US from en-GB for both site and admin
- Audited: 108 used site keys, 138 defined (all covered)
- Audited: 57 used membership keys, 130 defined (all covered)

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: SEF Router, Email Digest, and Bookmarks
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
02598820a4
SEF Router (#76):
- RouterView with 11 view configurations: profile, activity, forum,
  group, event, message, notification, invite, gallery, search, bookmarks
- MenuRules + StandardRules + NomenuRules for clean URLs
- Supports key-based routing (profile/:id, forum/:category_id, etc.)

Email Digest (#77):
- DigestHelper: builds personalized activity summary per user
- Content: connection activity, forum replies, group posts,
  upcoming events, unread messages, pending connections
- Daily and weekly frequency via profile params JSON
- sendDigests() for cron: throttled, skips empty digests
- setPreference() for user self-service (daily/weekly/off)
- Unsubscribe via profile settings

Bookmarks (#78):
- BookmarkHelper: toggle, isBookmarked, getByUser, getCounts
- 5 content types: activity, forum_topic, event, group, profile
- Resolves title and URL for each bookmarked item
- UNIQUE constraint prevents duplicate bookmarks
- User cleanup on account deletion
- SQL migration 01.09.00: #__mokojoomcommunity_bookmarks table
- REST API: GET/POST/DELETE /api/v1/community/bookmarks + counts
- Digest API: GET/PUT /api/v1/community/digest/preference

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chore: fix ProgressHelper test, create 12 feature gap issues
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
c46fe93c09
- Fixed ProgressHelperTest to avoid DB-dependent getProgressBarHtml()
- All 48 tests pass, 103 assertions
- Validated: 224 PHP files (0 errors), 44 XML manifests (0 errors)
- Created Gitea issues #79-#90 for feature gaps:
  Critical (v1.0): admin CRUD, profile edit, connections UI, user directory
  v1.1: hashtags, follows, mentions, sharing, push, reputation, badges

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: critical v1.0 gaps — profile edit, connections, user directory, admin model
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
Generic: Repo Health / Release configuration (push) Has been cancelled
Generic: Repo Health / Scripts governance (push) Has been cancelled
Generic: Repo Health / Repository health (push) Has been cancelled
Generic: Repo Health / Report Issues (push) Has been cancelled
8db8c2c477
Profile Edit (#80 + #83):
- ProfileController::save() handles bio, avatar upload, field values,
  privacy preferences, and digest frequency in one form submit
- profile/edit.php template: avatar upload, bio textarea, all custom
  fields with per-field privacy selector, digest toggle, account links
- Links to Joomla account settings for password/email change (#83)

Connection Management (#81):
- ConnectionController: request, accept, decline, remove with CSRF
- ConnectionModel: getPending(), getAccepted(), getSent() with user info
- Connections HtmlView + tabbed template (Connections/Pending/Sent)
- Accept/decline buttons, remove with confirmation
- Notifications on connection request/accept

User Directory (#82):
- ProfilesModel: search by name/username, sort (newest/name/active/popular)
- ProfilesHtmlView + card grid template with pagination
- Search bar + sort dropdown
- Avatar display with initial fallback

Admin CRUD Foundation (#79):
- FieldsModel with methods for all admin entities:
  getFields(), getFieldGroups(), getForumCategories(), getGroups(),
  getEvents(), getReports(), getVerifications()
- Admin view directories created for Fields, ForumCategories, Groups,
  Events, Reports, Verifications

Language strings: 13 new keys for profile edit, connections, directory

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: v1.1-1.3 features — hashtags, mentions, follows, sharing, reputation, badges
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 1s
Generic: Repo Health / Access control (push) Successful in 1s
0863039d1a
7 new tables, 6 new helpers, 8 default badges. SQL migration 01.10.00.

Hashtags [v1.1] (#84):
- HashtagHelper: parse #tags from text, store tag-content links,
  render clickable tag links, trending tags, tag content feed
- Tables: hashtags (tag + use_count), hashtag_content (tag-content links)

Mentions [v1.1] (#86):
- MentionHelper: parse @username from text, store mentions, notify
  mentioned users, render as profile links, autocomplete API
- Table: mentions (mentioned_user_id, author, content ref)

Follow System [v1.2] (#85):
- FollowHelper: follow/unfollow, isFollowing, getFollowers/Following
- Denormalized follower_count/following_count on profiles
- Block-aware (can't follow blocked users)
- Notification on new follow
- Table: follows (follower_id, following_id)

Content Sharing [v1.2] (#87):
- ShareHelper: generates share URLs for Facebook, Twitter, WhatsApp,
  LinkedIn, email, copy link, embed code
- renderShareButtons() produces Bootstrap button group

Reputation [v1.2] (#89):
- ReputationHelper: award points by reason (post=2, reply=1, like=1,
  best_answer=5, topic=3, event=3, report_upheld=-10)
- Denormalized reputation_score on profiles, leaderboard
- Table: reputation_log (user, points, reason, context)

Badges [v1.3] (#90):
- BadgeHelper: auto-award based on criteria JSON, checkAndAward(),
  renderBadges() for profile display, getAllBadgesWithStatus()
- 8 default badges: First Post, Contributor, Prolific Writer,
  Helpful Member, 1 Year Veteran, Verified, Complete Profile,
  Social Butterfly (25 connections)
- Criteria evaluation: post_count, likes_received, member_days,
  id_verified, profile_complete, connection_count
- Tables: badges (definitions), user_badges (awards)

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: admin CRUD for custom fields and field groups (CB-style)
Universal: Cascade Main → Dev / Cascade main → branches (push) Successful in 2s
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Failing after 3s
Update Server / Update Server (push) Successful in 9s
676ac2d84d
Full admin interface for creating/managing custom profile fields,
matching Community Builder's field management capabilities.

FieldController (admin):
- save(): create/update fields with validation (title required,
  JSON params validated, auto-slug from title)
- delete(): removes field + all user values + privacy prefs
- savegroup(): create/update field groups
- deletegroup(): deletes group, ungroups contained fields

Form XML definitions:
- field.xml: title, name, type (text/textarea/select/date/email/url/number),
  group, description, default value, visibility, required, registration,
  published, ordering, params (JSON for type-specific options)
- fieldgroup.xml: title, description, ordering, published

Admin View + Template:
- Fields HtmlView with toolbar
- Split-panel template: fields table (left) + field groups (right)
- Inline create forms for both fields and groups
- Delete with confirmation (warns about data loss)
- Type badges, visibility labels, required/registration/published indicators

Supported field types:
- text, textarea, select (with JSON options array), date, email, url, number
- Params JSON for type-specific config:
  select: {"options":["Option A","Option B"]}
  number: {"min":0,"max":100,"maxlength":10}

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: report buttons on all content types for moderation (#91)
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Failing after 4s
Update Server / Update Server (push) Successful in 11s
5ff977de2d
Reusable report button partial (report_button.php):
- Dropdown with 5 reason options (spam, harassment, inappropriate,
  misinformation, other) + optional details textarea
- Posts to moderation.report controller via CSRF-protected form
- Two styles: 'dropdown' (flag icon button) and 'link' (text link)
- Only shown to logged-in users viewing others' content

Report buttons added to:
- Activity posts (activity/default.php)
- Forum topics (forum/topic.php — on the topic body)
- Forum replies (forum/topic.php — on each reply)
- Group posts (group/detail.php)
- User profiles (profile/default.php)

Also added:
- Edit Profile button on own profile view
- 8 new language strings for report reasons and UI

Remaining templates needing report buttons (follow-up):
- Message conversations
- Gallery images
- Event pages
- Activity comments

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: Facebook Chat-style real-time messaging widget (#92)
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Failing after 4s
Update Server / Update Server (push) Successful in 10s
e77a4e5e47
Chat Widget (JavaScript + CSS):
- Floating blue bubble in bottom-right corner (Messenger-style)
- Click to open conversation list with unread indicators
- Open conversation for real-time message thread
- AJAX polling: 5s when chat open, 15s background badge updates
- Safe DOM rendering — no innerHTML with user data (XSS-safe)
- Desktop notifications via Notification API (permission requested)
- Mobile responsive: full-screen on small screens
- Own messages right-aligned (blue), others left (gray)
- Online status based on last_activity (5-minute window)

ChatController (AJAX JSON endpoints):
- chat.status: unread count + conversation list
- chat.messages: message thread for a conversation
- chat.send: send message (POST)
- chat.start: create/get direct conversation with a user
- chat.online: list online users (last_activity < 5min)
- All endpoints return JSON and terminate

System Plugin Integration:
- onAfterRender injects chat CSS/JS before </body>
- Only for logged-in site users (not admin/API/guests)
- Updates last_activity on every page load for online status
- Respects chat_enabled config toggle

Created Gitea issue #93 for cross-posting to Facebook/Twitter.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
refactor: move license key from session warnings to config + dashboard
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Failing after 3s
Update Server / Update Server (push) Successful in 9s
5fbf4e5c89
Removed persistent session-based license key warnings from all 3 system
plugins (community, membership, sociallogin). The old approach checked
#__update_sites on every admin page load and showed a dismissible warning
once per session — annoying and ineffective.

New approach:
- License key stored in component config (config.xml License fieldset)
- Admin dashboard shows prominent alert if no valid key entered
- Green confirmation with masked key when valid
- Post-install message directs admin to config to enter key
- No session-based persistence, no repeated warnings

Changes:
- plg_system_mokojoomcommunity: removed warnMissingLicenseKey() + constants
- plg_system_mokojoommembership: removed warnMissingLicenseKey()
- plg_system_mokojoomsociallogin: removed warnMissingLicenseKey()
- config.xml: added License fieldset with license_key text field
- dashboard/default.php: license status alert (warning or success)
- script.php: post-install message with link to config
- 8 new language strings for license UI

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: push notifications, cross-posting, workflow sync, report on messages
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Failing after 3s
Update Server / Update Server (push) Successful in 10s
155926f008
Push Notifications (#88):
- PushHelper: save/remove subscription, send push, get VAPID key
- ServiceWorker (service-worker.js): handles push events, notification
  click opens URL, vibrate pattern, badge icon
- Subscriptions stored in profile params JSON (no new table)
- Config: push_enabled, push_vapid_public, push_vapid_private
- Note: full VAPID JWT signing needs minishlink/web-push composer package

Cross-Post to Facebook/Twitter (#93):
- CrossPostHelper: post to Facebook Graph API and Twitter API v2
- Uses social login OAuth tokens from linked accounts
- Only public posts can be cross-posted
- getAvailablePlatforms() checks which providers user has connected
- Config: crosspost_enabled toggle
- Rate limiting via platform API limits

Report Button on Messages:
- Added report link to conversation messages (message template)
- Completes #91 — report buttons now on: activity, forum topics,
  forum replies, group posts, profiles, and messages

Workflow Sync:
- Imported branch-cleanup.yml from MokoOnyx template
- Synced ci-joomla.yml to latest version from MokoOnyx
- Synced all common workflows from moko-platform templates

Config Updates:
- Added Push Notifications fieldset (enabled, VAPID keys)
- Added Chat enabled toggle
- Added Cross-post enabled toggle

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chore: update package manifest with all 33 sub-extensions + sync workflows
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Failing after 3s
Update Server / Update Server (push) Successful in 9s
aad0bc114e
Package manifest (pkg_mokojoomcommunity.xml):
- 2 components (community + membership)
- 5 system/user plugins (community, membership, sociallogin)
- 5 social login providers (Discord, Facebook, Google, Instagram, Telegram)
- 8 payment gateways (Stripe, PayPal, Authorize.Net, Braintree, Mollie, Square, Dolibarr, Offline)
- 2 webservices plugins
- 1 quickicon plugin
- 10 site modules (8 community + 2 membership)

Build system already handles this — `make build` loops src/packages/*
and zips each, then assembles the outer package ZIP.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: 5 admin modules — menu, stats, reports, registrations, revenue
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 1s
Universal: Auto Version Bump / Version Bump (push) Failing after 3s
Update Server / Update Server (push) Successful in 10s
af540d4587
Admin Menu Module (mod_mokojoomcommunity_admin_menu):
- Sidebar navigation to all community management areas
- Sections: Community, Moderation, Membership, Settings
- Badge counts: profiles, topics, groups, events, pending reports,
  pending verifications
- Links to both component configs

Admin Stats Module (mod_mokojoomcommunity_admin_stats):
- 8 stat cards: profiles, new today, active (24h), connections,
  posts, forum topics, groups, upcoming events
- Color-coded with FontAwesome icons

Admin Reports Module (mod_mokojoomcommunity_admin_reports):
- Pending moderation queue table
- Shows reporter, content type, reason, date
- Configurable max items

Admin Registrations Module (mod_mokojoomcommunity_admin_registrations):
- Recent RegGuard log with risk level badges
- Shows user, IP, risk level/score, blocked status, date
- Configurable max items

Membership Revenue Module (mod_mokojoommembership_admin_revenue):
- 4 metric cards: revenue this month, active subscriptions,
  expiring in 7 days, new this month
- Color-coded borders

Package manifest updated to 38 sub-extensions (33 + 5 admin modules).
Update server URL fixed to match Gitea convention.

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: install errors — media path, MySQL strict mode, remove CB references
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
Universal: Auto Version Bump / Version Bump (push) Failing after 4s
Update Server / Update Server (push) Successful in 12s
eb5e19ae4f
Bug fixes for Joomla installation:
- Fixed media folder attribute: folder="css" -> folder="." to prevent
  css/css path duplication that caused "File does not exist" error
- Fixed all TEXT NOT NULL columns to TEXT DEFAULT NULL across all SQL
  files — MySQL strict mode rejects TEXT NOT NULL without a default
  value on INSERT. Affects install.mysql.sql and all migration files.

Removed Community Builder references:
- README.md: removed "fork of Community Builder" and Joomlapolis credit
- CLAUDE.md: removed "fork of Community Builder" from description
- composer.json: cleaned description
- Language files: cleaned package description

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
chore: remove update-server workflow, delete wiki dir, clean build artifacts
Universal: Auto Version Bump / Version Bump (push) Failing after 4s
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Generic: Repo Health / Access control (push) Successful in 2s
ca88636a4d
- Removed update-server.yml workflow (not needed)
- Removed wiki/ directory — wiki content belongs in Gitea wiki feature,
  not committed to git
- Cleaned build/ and dist/ artifacts

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
feat: auto-build RC release on PR pushes targeting main
Joomla: Extension CI / Tests (PHP 8.2) (pull_request) Blocked by required conditions
Joomla: Extension CI / Tests (PHP 8.3) (pull_request) Blocked by required conditions
Joomla: Extension CI / PHPStan Analysis (pull_request) Blocked by required conditions
Joomla: Extension CI / Build RC Pre-Release (pull_request) Blocked by required conditions
Universal: PR Check / Build RC Package (pull_request) Blocked by required conditions
Universal: PR Check / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Release configuration (pull_request) Blocked by required conditions
Generic: Repo Health / Scripts governance (pull_request) Blocked by required conditions
Generic: Repo Health / Repository health (pull_request) Blocked by required conditions
Generic: Repo Health / Report Issues (pull_request) Blocked by required conditions
Generic: Repo Health / Site Health (pull_request) Has been skipped
Universal: PR Check / Branch Policy (pull_request) Successful in 2s
Generic: Repo Health / Access control (pull_request) Successful in 1s
Joomla: Extension CI / Release Readiness Check (pull_request) Failing after 5s
Universal: Secret Scanning / Gitleaks Secret Scan (pull_request) Successful in 7s
Generic: Repo Health / Release configuration (push) Blocked by required conditions
Generic: Repo Health / Scripts governance (push) Blocked by required conditions
Generic: Repo Health / Repository health (push) Blocked by required conditions
Generic: Repo Health / Report Issues (push) Blocked by required conditions
Generic: Repo Health / Site Health (push) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
Universal: Build & Release / Promote to RC (pull_request) Successful in 13s
Generic: Repo Health / Access control (push) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 13s
Universal: Auto Version Bump / Version Bump (push) Failing after 4s
Joomla: Extension CI / Lint & Validate (pull_request) Failing after 2m31s
6808d97a5a
Pre-release workflow now triggers on:
- PR merged to dev → development channel (existing)
- PR opened/synced targeting main → release-candidate channel (new)
- Manual workflow_dispatch (existing)

When a PR to main is open, every push to the PR branch automatically
rebuilds the RC release package. This keeps the RC always up-to-date
with the latest changes before merge.

Changes:
- Added pull_request_target trigger for main branch
- Auto-detect stability as release-candidate for PRs to main
- Checkout PR head SHA for pull_request_target events
- Updated job condition to include new trigger

Authored-by: Moko Consulting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jmiller closed this pull request 2026-06-04 15:00:16 +00:00
jmiller deleted branch dev 2026-06-04 15:00:16 +00:00

Pull request closed

Please reopen this pull request to perform a merge.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MokoConsulting/MokoJoomCommunity#94