Skip to content

Database Schema

Brent Cordis edited this page Feb 8, 2026 · 1 revision

Database Schema

This page documents all database tables used by the Proclaim (CWM Proclaim) component. All table names use the Joomla prefix #__bsms_ (replacing #__ with your site's configured table prefix). The engine is InnoDB with utf8mb4_unicode_ci collation throughout.


Entity Relationship Overview

                          +-------------------+
                          |   #__bsms_books   |
                          +-------------------+
                                  |
                                  | booknumber (logical)
                                  v
+------------------+     +-------------------+     +-------------------+
| #__bsms_teachers |---->| #__bsms_studies   |<----| #__bsms_series    |
+------------------+  ^  +-------------------+  ^  +-------------------+
       teacher_id ----|        |    |    |       |---- series_id
                               |    |    |
              location_id -----+    |    +------- messagetype (logical)
                                    |                    |
              +-------------------+ |             +----------------------+
              | #__bsms_locations | |             | #__bsms_message_type |
              +-------------------+ |             +----------------------+
                                    |
               +--------------------+--------------------+
               |                                         |
               v                                         v
     +---------------------+               +------------------------+
     | #__bsms_studytopics |               |  #__bsms_mediafiles    |
     +---------------------+               +------------------------+
        |            |                         |              |
        v            v                         v              v
  +-----------+  +----------+         +--------------+  +-------------+
  | study_id  |  | topic_id |         | server_id    |  | podcast_id  |
  | (studies) |  | (topics) |         | (servers)    |  | (podcast)   |
  +-----------+  +----------+         +--------------+  +-------------+
                      |
               +-------------------+
               |  #__bsms_topics   |
               +-------------------+

     +-------------------+          +---------------------+
     | #__bsms_comments  |--------->| study_id -> studies  |
     +-------------------+          +---------------------+

     +-------------------+     +-------------------+     +-------------------+
     | #__bsms_templates |     | #__bsms_template- |     |  #__bsms_admin    |
     +-------------------+     |       code         |     +-------------------+
                               +-------------------+
                                                         +-------------------+
     +-------------------+                               |  #__bsms_update   |
     | #__bsms_timeset   |                               +-------------------+
     +-------------------+

Relationship Summary

Parent Table Child Table Relationship Column Type
#__bsms_studies #__bsms_mediafiles mediafiles.study_id Many media files per message
#__bsms_studies #__bsms_studytopics studytopics.study_id Many-to-many join table
#__bsms_studies #__bsms_comments comments.study_id Many comments per message
#__bsms_teachers #__bsms_studies studies.teacher_id One teacher per message
#__bsms_teachers #__bsms_series series.teacher Optional default teacher for series
#__bsms_series #__bsms_studies studies.series_id One series per message
#__bsms_locations #__bsms_studies studies.location_id One location per message
#__bsms_books #__bsms_studies studies.booknumber Book reference (by booknumber)
#__bsms_message_type #__bsms_studies studies.messagetype Message type classification
#__bsms_topics #__bsms_studytopics studytopics.topic_id Many-to-many join table
#__bsms_servers #__bsms_mediafiles mediafiles.server_id One server per media file
#__bsms_podcast #__bsms_mediafiles mediafiles.podcast_id CSV list of podcast IDs
#__bsms_templates #__bsms_podcast podcast.detailstemplateid Template for podcast detail pages
#__assets (Joomla) All content tables *.asset_id Joomla ACL permissions

Note: Joomla does not use foreign key constraints at the database level. All relationships are enforced logically in application code.


Core Content Tables

#__bsms_studies (Messages/Sermons)

The central content table. Each row represents a single message (sermon/study). Mapped to CwmmessageTable.

Validation: studytitle is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
studytitle TEXT NULL Message title (required)
alias VARCHAR(255) '' URL-safe alias (utf8_bin collation)
studydate DATETIME NULL Date the message was delivered
teacher_id INT(11) 1 FK to #__bsms_teachers.id
series_id INT(3) 0 FK to #__bsms_series.id
location_id INT(3) NULL FK to #__bsms_locations.id
messagetype VARCHAR(100) '1' FK to #__bsms_message_type.id (stored as string)
booknumber INT(3) 101 FK to #__bsms_books.booknumber
chapter_begin INT(3) 1 Starting chapter of scripture reference
verse_begin INT(3) 1 Starting verse
chapter_end INT(3) 1 Ending chapter
verse_end INT(3) 1 Ending verse
booknumber2 VARCHAR(4) NULL Secondary scripture book number
chapter_begin2 VARCHAR(4) NULL Secondary scripture starting chapter
verse_begin2 VARCHAR(4) NULL Secondary scripture starting verse
chapter_end2 VARCHAR(4) NULL Secondary scripture ending chapter
verse_end2 VARCHAR(4) NULL Secondary scripture ending verse
secondary_reference TEXT NULL Free-text secondary scripture reference
studynumber VARCHAR(100) '' User-defined study/sermon number
studyintro TEXT NULL Brief introduction text
studytext TEXT NULL Full message body text
studytext2 TEXT NULL Additional text content
thumbnailm TEXT NULL Thumbnail image path
thumbhm INT(11) NULL Thumbnail height
thumbwm INT(11) NULL Thumbnail width
comments TINYINT(1) 1 Whether comments are enabled (1=yes)
hits INT(10) 0 View count
download_id INT(10) 0 Default media file ID for downloads
show_level VARCHAR(100) '0' Display access level
user_id INT(10) NULL Submitting user ID
user_name VARCHAR(50) NULL Submitting user name
prod_dvd VARCHAR(100) NULL DVD product info (legacy)
prod_cd VARCHAR(100) NULL CD product info (legacy)
server_cd VARCHAR(10) NULL CD server reference (legacy)
server_dvd VARCHAR(10) NULL DVD server reference (legacy)
image_cd VARCHAR(10) NULL CD image reference (legacy)
image_dvd VARCHAR(10) '0' DVD image reference (legacy)
params TEXT NULL JSON configuration parameters
published TINYINT(3) 0 Publish state (0=unpublished, 1=published, 2=archived, -2=trashed)
publish_up DATETIME 0000-00-00 Publish start date
publish_down DATETIME 0000-00-00 Publish end date
checked_out INT(11) UNSIGNED 0 User ID who has checked out the record
checked_out_time DATETIME 0000-00-00 Checkout timestamp
created DATETIME 0000-00-00 Record creation date
created_by INT(10) UNSIGNED 0 Creating user ID
created_by_alias VARCHAR(255) '' Creator display name alias
modified DATETIME 0000-00-00 Last modification date
modified_by INT(10) UNSIGNED 0 Modifying user ID
asset_id INT(10) UNSIGNED 0 FK to #__assets for ACL
access INT(10) UNSIGNED 1 Joomla view access level
ordering INT(11) 0 Sort order
language CHAR(7) NOT NULL Language code (e.g., *, en-GB)

Indexes:

Index Name Columns Purpose
PRIMARY id Primary key
idx_state published Filter by publish state
idx_access access Filter by access level
idx_seriesid series_id Filter by series
idx_user user_id Filter by submitting user
idx_createdby created_by Filter by creator
idx_checkout checked_out Find checked-out records
idx_published_access_series published, access, series_id, studydate Composite for series listing
idx_teacher_published teacher_id, published, studydate Composite for teacher listing
idx_location_published location_id, published Composite for location filter
idx_published_dates published, publish_up, publish_down Scheduled publishing
idx_messagetype_published messagetype, published Filter by message type
idx_booknumber_published booknumber, published Filter by Bible book
idx_language_published language, published Multilingual filter

#__bsms_teachers

Teacher/speaker profiles. Mapped to CwmteacherTable.

Validation: teachername is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
teachername VARCHAR(250) '' Full name (required)
alias VARCHAR(255) '' URL-safe alias (utf8_bin collation)
title VARCHAR(250) NULL Honorific/title (e.g., "Pastor")
teacher_image TEXT NULL Full-size image path
teacher_thumbnail TEXT NULL Thumbnail image path
image TEXT NULL Additional image path
imageh TEXT NULL Image height
imagew TEXT NULL Image width
thumb TEXT NULL Secondary thumbnail path
thumbw TEXT NULL Secondary thumbnail width
thumbh TEXT NULL Secondary thumbnail height
short TEXT NULL Short biography text
information TEXT NULL Full biography/information
phone VARCHAR(50) NULL Phone number
email VARCHAR(100) NULL Email address
website TEXT NULL Personal website URL
facebooklink VARCHAR(150) NULL Facebook profile URL
twitterlink VARCHAR(150) NULL Twitter profile URL
bloglink VARCHAR(150) NULL Blog URL
link1 VARCHAR(150) NULL Custom link 1 URL
linklabel1 VARCHAR(150) NULL Custom link 1 label
link2 VARCHAR(150) NULL Custom link 2 URL
linklabel2 VARCHAR(150) NULL Custom link 2 label
link3 VARCHAR(150) NULL Custom link 3 URL
linklabel3 VARCHAR(150) NULL Custom link 3 label
contact INT(11) NULL FK to Joomla com_contact
address MEDIUMTEXT NULL Mailing address
address1 MEDIUMTEXT NULL Additional address
catid INT(3) 1 Category ID
list_show TINYINT(1) 1 Show in teacher lists
landing_show INT(3) NULL Show on landing page
ordering INT(11) 0 Sort order
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
language CHAR(7) NOT NULL Language code
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access), idx_createdby(created_by), idx_published_access(published, access)


#__bsms_series

Sermon series groupings. Mapped to CwmserieTable.

Validation: series_text is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
series_text TEXT NULL Series title (required)
alias VARCHAR(255) '' URL-safe alias (utf8_bin collation)
teacher INT(3) NULL Default teacher FK to #__bsms_teachers.id
description TEXT NULL Series description
series_thumbnail VARCHAR(255) NULL Thumbnail image path
landing_show INT(3) NULL Show on landing page
pc_show INT(3) 1 Show on podcast subscription page
ordering INT(11) 0 Sort order
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
language CHAR(7) NOT NULL Language code
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access), idx_createdby(created_by), idx_published_access(published, access), idx_teacher_published(teacher, published)


#__bsms_topics

Topic/subject tags for messages. Mapped to CwmtopicTable.

Validation: topic_text is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
topic_text TEXT NULL Topic name (language key, e.g., JBS_TOP_PRAYER) (required)
params VARCHAR(511) NULL JSON parameters (language translations)
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
language CHAR(7) '*' Language code
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access), idx_published_access(published, access)


#__bsms_studytopics (Join Table)

Many-to-many relationship between messages and topics. Mapped to CwmstudytopicsTable.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
study_id INT(3) 0 FK to #__bsms_studies.id
topic_id INT(3) 0 FK to #__bsms_topics.id
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level

Indexes: PRIMARY(id), idx_access(access), idx_study(study_id), idx_topic(topic_id), idx_study_topic(study_id, topic_id)


#__bsms_locations

Physical locations where messages are delivered. Mapped to CwmlocationTable.

Validation: location_text is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
location_text VARCHAR(250) NULL Location name (required)
contact_id INT(10) UNSIGNED 0 FK to Joomla com_contact
address TEXT NULL Street address
suburb VARCHAR(100) NULL Suburb/city
state VARCHAR(100) NULL State/province
country VARCHAR(100) NULL Country
postcode VARCHAR(100) NULL Postal/ZIP code
telephone VARCHAR(255) NULL Phone number
fax VARCHAR(255) NULL Fax number
mobile VARCHAR(255) '' Mobile phone
email_to VARCHAR(255) NULL Contact email
webpage VARCHAR(255) '' Website URL
image VARCHAR(255) NULL Location image
misc MEDIUMTEXT NULL Miscellaneous notes
default_con TINYINT(1) UNSIGNED 0 Is default location
sortname1 VARCHAR(255) NOT NULL Sort field 1
sortname2 VARCHAR(255) NOT NULL Sort field 2
sortname3 VARCHAR(255) NOT NULL Sort field 3
landing_show INT(3) NULL Show on landing page
featured TINYINT(3) UNSIGNED 0 Featured flag
xreference VARCHAR(50) NOT NULL External reference linkage
version INT(10) UNSIGNED 1 Record version counter
hits INT(10) UNSIGNED 0 View count
params TEXT NOT NULL JSON parameters
user_id INT(11) 0 Owner user ID
metakey TEXT NOT NULL Meta keywords
metadesc TEXT NOT NULL Meta description
metadata TEXT NOT NULL Additional metadata (JSON)
publish_up DATETIME 0000-00-00 Publish start date
publish_down DATETIME 0000-00-00 Publish end date
checked_out INT(10) UNSIGNED 0 Checked-out user ID
checked_out_time DATETIME 0000-00-00 Checkout timestamp
ordering INT(11) 0 Sort order
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
language CHAR(7) NOT NULL Language code
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access), idx_published_access(published, access)


#__bsms_message_type

Classification types for messages (e.g., "Sunday", "Wednesday", "Special"). Mapped to CwmmessagetypeTable.

Validation: message_type is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
message_type TEXT NOT NULL Type name (required)
alias VARCHAR(255) '' URL-safe alias (utf8_bin collation)
landing_show INT(3) NULL Show on landing page
ordering INT(11) 0 Sort order
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access)


#__bsms_comments

User comments on messages. Mapped to CwmcommentTable.

Validation: user_id defaults to the current logged-in user if not provided.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
study_id INT(11) 0 FK to #__bsms_studies.id
user_id INT(11) 0 FK to Joomla #__users.id
full_name VARCHAR(50) '' Commenter display name
user_email VARCHAR(100) '' Commenter email
comment_date DATETIME 0000-00-00 Date of comment
comment_text TEXT NOT NULL Comment body
published TINYINT(3) 0 Publish state (default unpublished for moderation)
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 0 View access level
language CHAR(7) NOT NULL Language code

Indexes: PRIMARY(id), idx_state(published), idx_access(access), idx_study_published(study_id, published, comment_date)


#__bsms_books

Lookup table of Bible books. Pre-populated with 73 books (66 Protestant canon + 7 Deuterocanonical). No Table class -- read-only reference data.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
bookname VARCHAR(250) NULL Language key for book name (e.g., JBS_BBK_GENESIS)
booknumber INT(5) NULL Numeric book ID (101=Genesis through 173=Baruch)
published TINYINT(3) 1 Publish state

Indexes: PRIMARY(id), idx_state(published)


Media Tables

#__bsms_mediafiles

Individual media files attached to messages (audio, video, PDF, etc.). Mapped to CwmmediafileTable.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
study_id INT(5) NULL FK to #__bsms_studies.id
server_id INT(5) NULL FK to #__bsms_servers.id
podcast_id VARCHAR(50) NULL Comma-separated podcast IDs (FK to #__bsms_podcast.id)
createdate DATETIME NULL Media file creation date
comment TEXT NULL Description/notes about the media file
hits INT(10) 0 View count
downloads INT(10) 0 Download count
plays INT(10) 0 Play count
params TEXT NULL JSON config: filename, mime_type, player, popup, media_image, size, link_type, etc.
metadata TEXT NOT NULL JSON statistics and transitive data
ordering INT(11) 0 Sort order
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
language CHAR(7) NOT NULL Language code
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user
checked_out INT(11) UNSIGNED 0 Checked-out user ID
checked_out_time DATETIME 0000-00-00 Checkout timestamp

Indexes:

Index Name Columns Purpose
PRIMARY id Primary key
idx_state published Filter by state
idx_study_id study_id Find media for a message
idx_access access Filter by access
idx_checkout checked_out Find checked-out records
idx_createdby created_by Filter by creator
idx_study_published study_id, published, createdate Composite for listing
idx_podcast_published podcast_id, published Podcast feed queries

#__bsms_servers

Media server configurations (defines how media files are accessed). Mapped to CwmserverTable.

Validation: server_name is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
server_name VARCHAR(250) '' Server display name (required)
type CHAR(255) NOT NULL Server type (e.g., legacy, s3, local)
params TEXT NOT NULL JSON server config: path, protocol, credentials
media TEXT NOT NULL JSON media defaults: link_type, player, popup, media_image, mime_type, autostart
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access)


#__bsms_podcast

Podcast feed configurations. Each row generates a separate RSS/XML podcast feed. Mapped to CwmpodcastTable.

Validation: title is required.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
title VARCHAR(100) NULL Podcast title (required)
website VARCHAR(100) NULL Podcast website URL
podcastlink VARCHAR(100) NULL Podcast feed controller URL
description TEXT NULL Podcast description
subtitle TEXT NULL Short subtitle
image VARCHAR(255) NULL Podcast cover image
imageh INT(3) NULL Image height
imagew INT(3) NULL Image width
author VARCHAR(100) NULL Podcast author name
podcastimage VARCHAR(255) NULL iTunes podcast artwork
podcastsearch VARCHAR(255) NULL iTunes search keywords
filename VARCHAR(150) NULL Output XML filename
language VARCHAR(10) 'en-us' Podcast language
editor_name VARCHAR(150) NULL Managing editor name
editor_email VARCHAR(150) NULL Managing editor email
podcastlimit INT(5) NULL Maximum episodes in feed
episodetitle INT(11) NULL Episode title field selector
custom VARCHAR(200) NULL Custom episode title text
episodesubtitle INT(11) NULL Episode subtitle field selector
customsubtitle VARCHAR(200) NULL Custom episode subtitle text
detailstemplateid INT(11) NULL FK to #__bsms_templates.id for episode detail page
linktype INT(10) 0 Link type: 0=episode page, 1=direct file, 2=popup player
alternatelink VARCHAR(300) NULL Override podcast feed URL
alternateimage VARCHAR(150) NULL Alternate image path
podcast_subscribe_show INT(3) NULL Show subscribe widget
podcast_image_subscribe VARCHAR(255) NULL Subscribe button image
podcast_subscribe_desc VARCHAR(150) NULL Subscribe widget description
alternatewords VARCHAR(20) NULL Alternate text label
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 1 View access level
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access)


Template Tables

#__bsms_templates

Display template configurations. Controls how messages, teachers, and series are rendered. Mapped to CwmtemplateTable. Template ID 1 is the default and cannot be deleted.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
title TEXT NULL Template display name
type VARCHAR(255) NOT NULL Template type identifier (e.g., tmplList)
tmpl LONGTEXT NOT NULL Template content/code
text TEXT NULL Text file icon image path
pdf TEXT NULL PDF file icon image path
params LONGTEXT NULL JSON: comprehensive display settings for all views (list, detail, teachers, series, landing page, player, social sharing, comments, etc.)
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 0 View access level
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id), idx_state(published), idx_access(access)


#__bsms_templatecode

Custom PHP template code files for different view types. Mapped to CwmtemplatecodeTable. On save, the code is written to a physical PHP file in the appropriate view folder.

Validation: filename is required and must not be a reserved name (main, simple, custom, formheader, formfooter). Type must be between 1 and 7.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key
filename TEXT NOT NULL Template file name (without default_ prefix and .php extension)
type TINYINT(3) NOT NULL View type: 1=Sermons list, 2=Sermon detail, 3=Teachers list, 4=Teacher detail, 5=Series list, 6=Series detail, 7=Module
templatecode MEDIUMTEXT NOT NULL PHP template code content
published TINYINT(3) 1 Publish state
asset_id INT(10) UNSIGNED 0 FK to #__assets
created DATETIME 0000-00-00 Creation date
created_by INT(10) UNSIGNED 0 Creating user
created_by_alias VARCHAR(255) '' Creator alias
modified DATETIME 0000-00-00 Modification date
modified_by INT(10) UNSIGNED 0 Modifying user

Indexes: PRIMARY(id)


Configuration Tables

#__bsms_admin

Global component configuration. Single-row table (ID=1). Mapped to CwmadminTable.

Column Type Default Description
id INT(10) UNSIGNED AUTO_INCREMENT Primary key (always 1)
drop_tables INT(3) 0 Whether to drop tables on uninstall
params TEXT NULL JSON: global component settings (simple_mode, player config, default images, thumbnail sizes, JW Player settings, etc.)
installstate TEXT NULL JSON: tracks installation/migration state
debug TINYINT(3) 0 Debug mode flag
asset_id INT(10) UNSIGNED 0 FK to #__assets
access INT(10) UNSIGNED 0 View access level

Indexes: PRIMARY(id), idx_access(access)


#__bsms_update

Version tracking for database migrations. Records which migration scripts have been applied.

Column Type Default Description
id INT UNSIGNED AUTO_INCREMENT Primary key
version VARCHAR(255) NULL Version string (e.g., 10.1.0-20251225)

Indexes: PRIMARY(id)

Note: This table is dropped and recreated on each install to ensure a clean state.


#__bsms_timeset

Tracks backup schedule timestamps. Single-row table.

Column Type Default Description
timeset VARCHAR(14) '' Last backup timestamp (primary key)
backup VARCHAR(14) NULL Backup reference timestamp

Indexes: PRIMARY(timeset)


Table Class Mapping

Every database table that supports CRUD operations has a corresponding PHP Table class in admin/src/Table/.

Database Table Table Class Asset Name Pattern Notes
#__bsms_admin CwmadminTable com_proclaim.cwmadmin.{id} Single-row global config
#__bsms_comments CwmcommentTable com_proclaim.comment.{id} Auto-assigns user_id
#__bsms_locations CwmlocationTable com_proclaim.location.{id} Validates location_text
#__bsms_mediafiles CwmmediafileTable com_proclaim.mediafile.{id} Custom checkIn(), binds podcast_id array to CSV
#__bsms_message_type CwmmessagetypeTable com_proclaim.message_type.{id} Validates message_type
#__bsms_podcast CwmpodcastTable com_proclaim.podcast.{id} Validates title
#__bsms_series CwmserieTable com_proclaim.serie.{id} Validates series_text, cleans up images on delete
#__bsms_servers CwmserverTable com_proclaim.server.{id} Validates server_name, binds params and media JSON
#__bsms_studies CwmmessageTable com_proclaim.message.{id} Validates studytitle, cleans up images on delete
#__bsms_studytopics CwmstudytopicsTable com_proclaim.studytopics.{id} Join table, no validation
#__bsms_teachers CwmteacherTable com_proclaim.teacher.{id} Validates teachername, cleans up images on delete
#__bsms_templatecode CwmtemplatecodeTable com_proclaim.templatecode.{id} Writes PHP file on store, deletes file on delete
#__bsms_templates CwmtemplateTable com_proclaim.template.{id} Prevents deletion of ID 1 (default template)
#__bsms_topics CwmtopicTable com_proclaim.topic.{id} Validates topic_text

Tables without a Table class (read-only or managed by migrations):

  • #__bsms_books -- Reference data, pre-populated
  • #__bsms_update -- Managed by installation scripts
  • #__bsms_timeset -- Managed by backup utilities

Common Column Patterns

Most content tables share these Joomla-standard columns:

Column Purpose
id Auto-increment primary key
published Publish state: 1=published, 0=unpublished, 2=archived, -2=trashed
asset_id FK to #__assets for Joomla ACL permission management
access Joomla view access level (1=Public, 2=Registered, etc.)
language Joomla language tag (* for all, en-GB, etc.)
ordering Integer for manual sort order
checked_out User ID of who has the record locked for editing
checked_out_time When the record was locked
created Record creation timestamp
created_by Joomla user ID of creator
created_by_alias Alternative display name for creator
modified Last modification timestamp
modified_by Joomla user ID of last modifier
params JSON-encoded configuration parameters

All Table classes register assets under the com_proclaim component root using Cwmassets::parentId(), and all set default ACL rules on store if none are provided.

Clone this wiki locally