Getting Started

Configuration

Administration

Modules

Templates

Integrations

Development

Getting Started

  • πŸ‘‹ Introduction
    High-level overview of UNA CMS: what it is, who it’s for, and what you can build.

  • βš™οΈ How UNA Works
    Explains the underlying architecture and relationship between front-end, Studio (admin console), and apps.

  • [πŸ’‘ Key Concepts][key-concepts]
    Covers essential terminology (Profiles, Context Modules, Permissions, etc.) that power UNA.

  • πŸ“• Glossary
    Alphabetical reference for important UNA terms.

  • ✊ Principles
    The guiding philosophies behind UNA development and community management.

  • [πŸ’» System Requirements][system-requirements]
    Details on hosting environment, server configuration, and prerequisites.

  • [πŸš€ Installation & Setup][installation-setup]
    Step-by-step instructions for installing UNA on various platforms (shared hosting, VPS, Docker, etc.).

  • [πŸƒ Quick Start Tutorial][quick-start-tutorial]
    A hands-on approach to spin up a basic UNA site with minimal configuration.

  • [πŸ“‹ Launch Checklist][launch-checklist]
    A structured guide (43 steps or more) to configure essentials before going live.

  • [❓ General FAQ][general-faq]
    Frequently asked questions for newcomers.


Building & Managing Your UNA Site

  • [πŸ”§ Studio Basics][studio-basics]
    How to navigate and use Studio: Pages, Forms, Navigation, Permissions, Languages, etc.

  • [πŸ“‘ Site Structure][site-structure]
    Understanding page layouts, blocks, and how modules interact.

  • πŸ—‚ Content Management
    Managing posts, media, categories, and moderation workflows.

  • [πŸ‘€ User & Profile Management][user-profile-management]
    Handling user accounts, profiles, activation, and roles.

  • [πŸ”’ Permissions & Roles][permissions-roles]
    Configuring membership levels, access controls, and custom permissions.

  • [🏷 Customization & Theming][customization-theming]
    Applying templates/themes, styling pages, and basic design tweaks.

  • [πŸ”€ Navigation & Menus][navigation-menus]
    Configuring menus, site navigation, and user interface structure.

  • [πŸ’¬ Language & Translations][language-translations]
    Setting default languages, editing language keys, and creating multilingual sites.

  • [πŸ”” Notifications][notifications]
    Customizing email templates, push notifications, and in-site alerts.

  • [πŸ›  Maintenance & Upgrades][maintenance-upgrades]
    Updating UNA core and apps, backups, cron tasks, and overall site health.

  • [πŸ“ˆ Analytics & Reporting][analytics-reporting]
    Integrating external analytics, built-in stats, and best practices for measuring growth.


Apps (Modules)

Click to expand all official UNA Inc apps
  • Core β€œContext” Modules

    • [Groups][app-groups]
    • [Events][app-events]
    • [Spaces][app-spaces]
    • [Organizations][app-organizations]
    • [Channels][app-channels]
  • Core β€œContent” Modules

    • [Posts][app-posts]
    • [Discussions][app-discussions]
    • [Albums][app-albums]
    • [Photos][app-photos]
    • [Videos][app-videos]
    • [Files][app-files]
    • [Wiki][app-wiki]
    • [Polls][app-polls]
    • [Blogs][app-blogs]
  • Communication & Messaging

    • [Messenger (Jot Server)][app-messenger]
    • [Conversations / Chat+ (if separate)][app-chatplus]
  • Membership & Monetization

    • [Paid Levels][app-paid-levels]
    • [Market][app-market]
    • [Ads][app-ads]
    • [Payments][app-payments]
  • Engagement & Interaction

    • [Timeline (Feed)][app-timeline]
    • [Reactions][app-reactions]
    • [Comments][app-comments]
    • [Notifications][app-notifications]
  • Administration & Utilities

    • [Permissions][app-permissions]
    • [Developer][app-developer]
    • [Helpdesk][app-helpdesk]
    • [Maintenance Tools][app-maintenance-tools]
  • E-Learning & Specialized

    • [Classes][app-classes]
    • [Courses (if separate)][app-courses]

User Profiles

One member account can have many profiles of different types, for example one person profile (John Doe) and one organization profile (John & Co). Member can switch between them depending on desired actions on the site. All content posted on the site is posted under current profile of the member.

By default there are two profile based modules (Persons and Organizations), but actually there is build in Account Profile, this Account Profile has no separate page and associated image, so we disabled some function for it, for example it is impossible to switch to this profile in profile switcher page.

Module developers should aware that one account can have different profiles and always use current profile id (for example to assign as author of the content), there is build-in function to get it:

bx_get_logged_profile_id ()

Usually there is no need to get account id (which can be associated with multiple profiles), unless some very custom behaviour, so please avoid using getLoggedId() function.

Profiles DB structure

Here is profiles related tables diagram:

/images/profiles-db-diagram.png

sys_profiles table fields:

  • id: it is main profile identification, bx_get_logged_profile_id () function returns it for currently logged-in profile
  • account_id: account ID the profile belongs to
  • type: profile type, actually module name, or system for hidden system account profile
  • content_id: ID of profile from module table with profile data
  • status: profile status - active, pending or suspended

sys_account table fields:

  • id: it is account identification, getLoggedId () function returns it for currently logged-in account
  • profile_id: current profile ID for the account, when you switch profile in user interface - this field is changed
  • name, email, etc: account data fields needed for authentication and some basic info

bx_persons_data and bx_organizations_data are tables with actual profile info.

Profile class

There is BxDolProfile class to help with some operations with profiles. There are different getInstance* static methods to get profile class instance, most common one is getInstance($iProfileId) to get it by profile ID.

To get general info about profile there are the following functions:

    public function id();
    public function getDisplayName();
    public function getUrl();
    public function getUnit();
    public function getAvatar();
    public function getThumb();
    public function getIcon();
    public function getEditUrl();
    public function isActive();

These functions make service call (if necessary) to the profile based module to get the data. Since profile modules can be different then representation of profile unit can be different as well. So you don't need to worry of what is profile type and module it is referring to, just use this class to get basic profile info.

If getInstance* method returns null, then most probably profile doesn't exists, you can check result for null in the code and perform some custom behaviour or you can use singleton instance of BxDolProfileUndefined class to use as regular profile class instance - it will return some 'anonymous' or 'undefined' values for the requested data.

Example

The following example get profile id from query string and prints link to the profile associated with this id.

bx_import('BxDolProfile');
$oProfile = BxDolProfile::getInstance(bx_process_input(bx_get('id'), BX_DATA_INT));
if (!$oProfile) {
    bx_import('BxDolProfileUndefined');
    $oProfile = BxDolProfileUndefined::getInstance();
}

echo '<a href="' . $oProfile->getUrl() . '">' . $oProfile->getDisplayName() . '</a>';