System Configuration
Settings that control Jethro's behaviour. Most can be set via Admin → System Configuration; some are file-only in conf.php.
Permissions and Security
Foundation settings: feature flags, default permissions, and session management.
NOTES,PHOTOS,ATTENDANCE,ROSTERS&SERVICES,SERVICEDETAILS,DOCUMENTS,SERVICEDOCUMENTS,SMS.8519679.0.8.90.480.2-Factor Authentication
Require a one-time SMS code at login for users holding specific permissions.
0.30.Jethro.// Master kill-switch for 2-factor authentication. Set to false to disable 2FA entirely.
// Setting to true still requires other 2FA parameters to be defined for 2FA to be applied.
define('2FA_ENABLED', 'true'); // Master kill-switch. Set to false to disable 2FA entirely.
Jethro Behaviour Options
Controls defaults for rosters, notes, attendance, person lists, envelopes, and more.
1.pending.ASC.10.0.0.100.10.8.Sunday.status.220.110.Data Structure options
Defines the values available in dropdowns throughout Jethro: person statuses, age brackets, address fields, and telephone formats.
...Australia/Sydney.ACT,NSW,NT,QLD,SA,TAS,VIC,WA.State.NSW.Suburb.Postcode.4./^[0-9][0-9][0-9][0-9]$/.XXXX-XXXX\n(XX) XXXX-XXXX.XXXX-XXXX\n(XX) XXXX-XXXX.XXXX-XXX-XXX.Member area
Self-service portal where congregation members can log in to view their details and rosters.
0.Setting up your account.1.Member_Files.7.0.// HTML displayed beneath the Members Area login form, e.g. a link to terms and conditions.
define('MEMBER_LOGIN_NOTE', ''); // HTML beneath the member login form.
// Pipe-separated document folder paths visible to members. Paths are relative to DOCUMENTS_ROOT_PATH.
// Generally this should be left unset — use the 'Member Visible Folders' web config setting instead.
define('MEMBER_FILES_DIRS', ''); // Pipe-separated document folder paths visible to members.
iCal feeds
Publish roster information as iCal feeds for congregation members to subscribe to.
1.Public area
Make selected content available on a public-facing page without requiring login.
0.0.External Links
URLs and integration settings for external services: Bible lookup, CCLI, postcode search, maps, QR codes, and bulk-email settings.
https://www.biblegateway.com/passage/?search=__REFERENCE__&version=NIVUK.https://songselect.ccli.com/search/results?search=__TITLE__.https://songselect.ccli.com/songs/__NUMBER__.https://reporting.ccli.com/search?s=__NUMBER__&page=1&category=all.https://auspost.com.au/postcode/__SUBURB__.http://maps.google.com.au?q=__ADDRESS_STREET__,%20__ADDRESS_SUBURB__,%20__ADDRESS_STATE__,%20__ADDRESS_POSTCODE__.https://api.qrserver.com/v1/create-qr-code/?size=300x300&data=__URL__.25.,.Task Notifications
Email notifications for task assignments and reminders.
0.Jethro.New notes assigned to you.Mailchimp Sync
Sync person data with a Mailchimp audience for bulk email campaigns.
SMTP Email Server
Outgoing email server configuration for system-generated emails (notifications, member area).
.25.// Force the From: address on Jethro-sent emails. The user-specified From becomes Reply-To instead.
// Use this when the From address (set e.g. in a script .ini file) is where you want replies to go, but you are not DKIM-authorised to send from its domain.
define('OVERRIDE_EMAIL_FROM', ''); // Force the From: address on Jethro-sent emails. The user-specified From becomes Reply-To instead.
SMS
SMS messaging configuration — message limits, gateway templates, and 2FA transport. See the SMS Administration guide for setup instructions and provider details.
Sender
Controls the "From" dropdown on the SMS send page. See SMS Sender for examples and Sender ID registration.
_SENDER_IDS_,_USER_MOBILE_.Post-send behaviour
Settings affecting the SMS Create Note… behaviour, and post-send 'cooloff'. See Post-send behaviour.
0.SMS follow-up.30.Balance
See Low Balance for balance enforcement and notification.
0.0.// Balance override. Numeric (e.g. 100) = hardcoded value, useful for testing or as a send cap. 'database' = calculate from sms_purchases table. Unset = query upstream API.
define('SMS_BALANCE', 'Upstream API');
// Block sends when remaining balance < recipient count. Works with all SMS_BALANCE modes.
define('SMS_BALANCE_ENFORCED', 'false');
Provider selection
See Provider selection for auto-detection and manual overrides.
.https://www.5centsms.com.au/api/v5.https://api.cellcast.com.// Bearer token from your Cellcast dashboard (required).
define('SMS_CELLCAST_APIKEY', ''); // Cellcast API bearer token
// API username for SMS Broadcast (smsbroadcast.com.au). Required if using the SMS Broadcast provider.
define('SMS_SMSBROADCAST_USERNAME', '');
// API password for SMS Broadcast (smsbroadcast.com.au). Required if using the SMS Broadcast provider.
define('SMS_SMSBROADCAST_PASSWORD', '');
// API endpoint URL (optional; defaults to https://www.smsbroadcast.com.au/api-adv.php).
define('SMS_SMSBROADCAST_URL', 'https://www.smsbroadcast.com.au/api-adv.php');
Message body
Limits on what the user can type in SMS messages. See Message body.
160.Debugging & cost display
// Path to a JSONP log file for SMS send audit trail (optional).
define('SMS_SEND_LOGFILE', '');
// Length of a single SMS segment for cost estimation purposes
define('SMS_SEGMENT_LENGTH', 160);
Legacy HTTP template gateway
Only needed if using TemplateSmsProvider, FiveCentSmsV4Provider, or a custom HTTP-template gateway. Most users should use one of the provider-specific sections above instead. See configuring a provider for modern alternatives.
// URL of the SMS gateway to send SMSes through. Used by TemplateSmsProvider / legacy gateway.
define('SMS_HTTP_URL', ''); // URL of the SMS messaging service
// Template for the HTTP headers of the POST request Jethro sends to the SMS gateway. Some gateways use headers for authentication.
// Example for 5CentSMS: User: me@example.com\r\nApi-Key: MyAPIKey\r\n
define('SMS_HTTP_HEADER_TEMPLATE', ''); // Template for the headers of a request to the SMS messaging service
// Template for the body of the HTTP POST request Jethro sends to the SMS gateway.
// Supports keywords: _MESSAGE_, _RECIPIENTS_COMMAS_, _RECIPIENTS_NEWLINES_, _RECIPIENTS_ARRAY_, _RECIPIENTS_INTERNATIONAL_COMMAS_, _RECIPIENTS_INTERNATIONAL_NEWLINES_, _RECIPIENTS_INTERNATIONAL_ARRAY_, _USER_MOBILE_, _USER_EMAIL_.Example for SMSBroadcast: username=MYUSER&password=MYPASS&to=_RECIPIENTS_COMMAS_&from=_USER_MOBILE_&message=_MESSAGE_Example for 5CentSMS: sender=_USER_MOBILE_&to=_RECIPIENTS_COMMAS_&message=_MESSAGE_
define('SMS_HTTP_POST_TEMPLATE', ''); // Template for the body of a request to the SMS messaging service
// Base name for the _RECIPIENTS_ARRAY_ keyword in SMS_HTTP_POST_TEMPLATE.
// Set to number to produce number[]=0412333444&number[]=0413555666.
define('SMS_RECIPIENT_ARRAY_PARAMETER', '');
// Regex to detect a per-recipient success message from the SMS gateway. Omit slash delimiters.
// Keywords: _RECIPIENT_, _RECIPIENT_INTERNATIONAL_.Leave blank to ignore the response.Example for 5CentSMS: [{]\s*"destination":\s*"_RECIPIENT_",[^}]*"status":\s*"?(1000|1001|1002|1004|1006|1011|1527)"?,
define('SMS_HTTP_RESPONSE_OK_REGEX', ''); // Regex for recognising a successful send
// Regex to detect an overall error response from the API server (e.g. bad credentials). Omit slash delimiters. Leave blank to ignore.
define('SMS_HTTP_RESPONSE_ERROR_REGEX', ''); // Regex for recognising an API error
// Regex with a capture group to extract the remote message ID from the gateway response.
// The first capture group is stored as the remote message ID.
define('SMS_HTTP_RESPONSE_ID_REGEX', '');
// Local prefix used in the mobile numbers stored in Jethro. Stripped before prepending the international prefix.
// Needed for SMS gateways that use international-format numbers. E.g. 0.
define('SMS_LOCAL_PREFIX', ''); // Used for converting local to international numbers. eg 0
// International prefix, which replaces the local prefix to form an international-format number.
// Needed for SMS gateways that use international-format numbers. E.g. 61 for Australia.
define('SMS_INTERNATIONAL_PREFIX', ''); // Used for converting local to international numbers. eg +61
2FA SMS gateway (file-only)
If you want 2FA to use a different SMS gateway than regular sends. When unset, 2FA falls back to the regular SMS constants. See 2FA SMS for setup and troubleshooting.
// Dedicated SMS gateway URL for 2FA messages. If set, 2FA uses these 2FA_SMS_* settings instead of SMS_HTTP_*.
// 2FA messages sent through this gateway are NOT logged in SMS_SEND_LOGFILE.
define('2FA_SMS_URL', ''); // Gateway URL for 2FA messages.
// POST body template for the dedicated 2FA SMS gateway.
define('2FA_SMS_POST_TEMPLATE', ''); // POST body template for 2FA messages.
// Extra HTTP headers for the dedicated 2FA SMS gateway.
define('2FA_SMS_HEADER_TEMPLATE', ''); // Extra HTTP headers for 2FA messages.
// Success detection regex for the dedicated 2FA SMS gateway. Omit slash delimiters.
define('2FA_SMS_RESPONSE_OK_REGEX', ''); // Success detection regex for 2FA messages.
// Error detection regex for the dedicated 2FA SMS gateway. Omit slash delimiters.
define('2FA_SMS_RESPONSE_ERROR_REGEX', ''); // Error detection regex for 2FA messages.
// Remote message ID regex for the dedicated 2FA SMS gateway.
define('2FA_SMS_RESPONSE_ID_REGEX', ''); // Remote message ID regex for 2FA messages.
2FA logging (file-only)
See Audit log for log levels and blocking.
// Path to a log file for the 2FA audit trail. Example: /var/log/jethro-2fa.log.
define('SMS_2FA_LOGFILE', ''); // Path to JSONP log file for 2FA audit trail.
// Log verbosity for 2FA audit trail: full for everything, or quiet for errors only.
define('SMS_2FA_LOG_LEVEL', 'full'); // full or quiet.
// Dev-only: log 2FA intentions without actually sending SMS messages.
define('SMS_2FA_BLOCK_MESSAGES', 'false'); // Dev-only: log intentions without sending.
Essential
Core infrastructure: database connection and base URL. These must be set for the system to run.
// Name of the MySQL database, e.g. jethro.
define('DB_DATABASE', ''); // MySQL database name.
// Username of the MySQL account Jethro uses to access the database.
define('DB_USERNAME', ''); // MySQL user.
// Password of the MySQL account Jethro uses to access the database.
// Optional if DB_DSN is set for socket-based authentication.
define('DB_PASSWORD', ''); // MySQL password. Optional if DB_DSN is set.
// Server on which MySQL is running — usually localhost.
define('DB_HOST', 'localhost'); // MySQL server hostname.
// Database driver — usually mysql.
define('DB_TYPE', 'mysql'); // Database driver.
// Full PDO DSN instead of DB_PASSWORD, e.g. mysql:dbname=jethro.
// For socket-based authentication. If your PHP-FPM runs as a dedicated OS user (jethro), you can create a MySQL user with unix_socket auth and specify the DSN directly instead of a password.
define('DB_DSN', ''); // Full PDO DSN instead of DB_PASSWORD, e.g. mysql:dbname=jethro. For socket-based auth.
// The URL Jethro runs at. Only needed if behind a proxy without X-Forwarded-Proto / X-Forwarded-Host, or when running CLI scripts like task_reminder.php where the base URL cannot be inferred.
define('BASE_URL', ''); // URL Jethro runs at. Set if behind a proxy without X-Forwarded-Proto / X-Forwarded-Host.
Database accounts (optional)
Separate MySQL credentials for the Members and Public areas, to restrict which tables those interfaces can access. All default to the main credentials.
// MySQL username for the Members area. Restrict table access for extra security.
// Defaults to the main DB_USERNAME if not set.
define('DB_MEMBERS_USERNAME', ''); // Members-area MySQL user.
// MySQL password for the Members area.
// Defaults to the main DB_PASSWORD if not set.
define('DB_MEMBERS_PASSWORD', ''); // Members-area MySQL password.
// MySQL username for the Public area. Restrict table access for extra security.
// Defaults to the main DB_USERNAME if not set.
define('DB_PUBLIC_USERNAME', ''); // Public-area MySQL user.
// MySQL password for the Public area.
// Defaults to the main DB_PASSWORD if not set.
define('DB_PUBLIC_PASSWORD', ''); // Public-area MySQL password.
Bible API (file-only)
Auto-fetches Bible passage text for service handouts. Requires a key from api.bible.
// API key from api.bible. Empty = Bible passage auto-fetch disabled.
// Obtainable after registering on api.bible. Enables automatic fetching of Bible reading passages in service handouts.
define('BIBLE_API_APIKEY', ''); // API key from api.bible. Empty = disabled.
// Base URL for the API.Bible REST API, used for fetching Bible passage text in service handouts.
// Defaults to the standard API.Bible endpoint if not set.
define('BIBLE_API_URL', 'https://rest.api.bible/v1'); // API base URL.
// Timeout in seconds for API.Bible REST API requests.
// Defaults to 10 if not set.
define('BIBLE_API_TIMEOUT', '10'); // Request timeout in seconds.
Advanced (file-only)
Server-side and display options: error reporting, SQL mode, pre-filled credentials, custom CSS, and more.
// Allow all configuration settings to be defined in conf.php rather than via the admin web interface (legacy mode).
define('ALLOW_SETTINGS_IN_FILE', 'true'); // Allow all settings to be defined in conf.php rather than via the admin web interface (legacy mode).
// Directory where the Documents view stores files.
// Defaults to files/ under the Jethro root directory.
define('DOCUMENTS_ROOT_PATH', ''); // Document storage path. Defaults to files/ under Jethro root.
// Directory where custom report SQL files are stored.
// Defaults to custom_reports/ under the Jethro root directory.
define('CUSTOM_REPORTS_DIR', ''); // Custom report SQL directory. Defaults to custom_reports/ under Jethro root.
// Pipe-separated folder paths for the 'Populate' feature when generating service documents.
// Paths can be absolute or relative to DOCUMENTS_ROOT_PATH.
define('SERVICE_DOCS_TO_POPULATE_DIRS', ''); // Pipe-separated template folders for the Populate feature.
// Pipe-separated folder paths for the 'Expand' feature when generating service documents.
// Paths can be absolute or relative to DOCUMENTS_ROOT_PATH.
define('SERVICE_DOCS_TO_EXPAND_DIRS', ''); // Pipe-separated template folders for the Expand feature.
// System administrator contact link — mailto:someone@domain.com or a URL.
define('SYSADMIN_HREF', ''); // System administrator contact link — mailto:someone@domain.com or a URL.
// Email address where error reports are sent.
define('ERRORS_EMAIL_ADDRESS', ''); // Email address for error reports.
// Override the MySQL SQL_MODE variable.
// If MySQL 8 throws ONLY_FULL_GROUP_BY errors, turn it off with: STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
define('SQL_MODE', ''); // Override MySQL SQL_MODE. Use if MySQL 8 throws ONLY_FULL_GROUP_BY errors.
// Pre-filled username on the login form. Demo systems only.
define('PREFILL_USERNAME', ''); // Pre-filled login form value. Demo systems only.
// Pre-filled password on the login form. Demo systems only.
define('PREFILL_PASSWORD', ''); // Pre-filled login form value. Demo systems only.
// HTML injected into <head> on every page, e.g. custom CSS <link> tags.
define('EXTRA_HEAD_HTML', ''); // HTML injected into , e.g. custom CSS tags.
// Override LESS variables for a custom colour scheme.
// See resources/less/jethro.less.php for available variables. Example: @linkColor: #008791;
define('CUSTOM_LESS_VARS', ''); // Override LESS variables for custom colour scheme, e.g. @linkColor: #008791;.
// HTML displayed beneath the Control Centre login button, e.g. a link to terms and conditions.
define('LOGIN_NOTE', ''); // HTML beneath the Control Centre login button.
// Show error details in the browser. Turn off in production.
define('SHOW_ERROR_DETAILS', 'false'); // Show error details in the browser.