Documentation

Find documentation for our Joomla extensions on this page.

JoomHelpDesk - Internal Plugin System Guide

JoomHelpDesk includes its own internal plugin system that is entirely separate from Joomla's native plugin architecture. These internal plugins extend the helpdesk's functionality across many areas: background jobs, UI customization, ticket event handling, email processing, reporting, printing, and more.

Internal plugins live under the frontend component directory:

components/com_joomhelpdesk/plugins/

Each plugin type has its own subdirectory. Plugin files are PHP classes (or XML definitions, depending on the type) that follow naming conventions specific to their type. The system discovers plugins by scanning these directories, and administrators can enable, disable, and configure each plugin from the Joomla backend.

The plugin system is powered by two core helper files:

  • components/com_joomhelpdesk/helper/plugin.php -- Defines the Joomhelpdesk_Plugin base class that all plugins extend. Provides properties for title, description, name, type, enabled, settings loading via loadSettings(), and template rendering via display($tpl).
  • components/com_joomhelpdesk/helper/guiplugins.php -- Defines Joomhelpdesk_GUIPlugins, the loader and dispatcher for GUI plugins. It scans the gui/ directory, instantiates enabled plugins, and routes method calls to them via Joomhelpdesk_GUIPlugins::output($function, $params).

2. Managing Plugins

All internal plugins are managed from the Joomla administrator backend:

Administrator > Components > JoomHelpDesk > Plugins

This page displays a table listing every discovered plugin with the following columns:

ColumnDescription
Type The plugin category (e.g., "Ticket Action Plugin", "GUI Plugin", "CRON Plugin")
Title The plugin's display name, linked to its configuration page if settings are available
Description A brief explanation of what the plugin does
Status Enable/disable toggle and an "Options" button (if the plugin has a settings file)

Below the title, the system displays the plugin's internal identifier in the format type / name (e.g., tickets / emailsend or gui / extra_tabs).

3. Plugin Types

3.1 Cron Plugins

Directory: components/com_joomhelpdesk/plugins/cron/

Cron plugins run background tasks on a scheduled interval. Each cron plugin extends JoomhelpdeskCron and defines:

  • $title -- Display name
  • $description -- What the plugin does
  • $interval -- How often to run (in minutes)
  • Execute($data) -- The method called on each run. The $data parameter is a persistent object (stored as JSON in the database, max 64KB) that can be used to track state between runs.

Cron plugins can log messages using $this->Log("message") and persist data with $this->updateData($data).

Included plugins:

FileDescription
sample.php Sample/template cron plugin for reference

Additional cron functionality (auto-close, email checking) is handled by helpers in components/com_joomhelpdesk/helper/cron/ and components/com_joomhelpdesk/cron/, which are separate from the plugin system.


3.2 GUI Plugins

Directory: components/com_joomhelpdesk/plugins/gui/

GUI plugins inject custom HTML content into specific locations throughout the helpdesk interface. Each GUI plugin extends Joomhelpdesk_Plugin_GUI (which extends Joomhelpdesk_Plugin) and implements hook methods that return HTML strings.

The class name must follow the pattern Joomhelpdesk_GUIPlugin_{Filename} where {Filename} matches the PHP filename (without extension). The Joomhelpdesk_GUIPlugins helper class automatically loads all enabled GUI plugins and dispatches calls to them.

Available hook methods for admin (handler) interface:

MethodInjection Point
adminTabs() End of the admin navigation tab bar
adminOverviewTop() Top of the admin overview page
adminOverviewBottom() Bottom of the admin overview page
adminTicketReplyBar($ticket) After the "Reply" buttons on admin ticket pages
adminTicketListTools() Bottom of the ticket list tools menu
adminSupportTabs_Start() Before the "Open" or "Search" tab in admin support
adminSupportTabs_Mid() Before the "Other" tab in admin support
adminSupportTabs_End() After the "Other" tab in admin support
adminSupportTabs_Other_Start() Start of the "Other" dropdown menu
adminSupportTabs_Other_End() End of the "Other" dropdown menu
adminTicketViewTools($ticket) Ticket view toolbar
adminTicketViewToolsMenu($ticket) Bottom of the ticket view tools dropdown menu

Available hook methods for user (customer) interface:

MethodInjection Point
userTicketReplyBar($ticket) After the "Reply" buttons on user ticket pages
userSupportTabs_Start() Start of the user support tab bar
userSupportTabs_AfterNew() After the "New Ticket" tab
userSupportTabs_BeforeView() Before the "View Ticket" tab
userSupportTabs_End() End of the user support tab bar

Included plugins:

FileDescription
sample.php Reference plugin showing all available hook methods with example code
extra_tabs.php Adds product and department filter tabs to the admin support tab bar
openrelatedticket.php Adds a button/menu item to open a new ticket related to the current one
default_prefs.php Manage and reset default handler preferences
email_ticket/ Email ticket functionality with configurable template

GUI plugins can have settings defined in a {name}.settings.xml file alongside the PHP file (see section 5).


3.3 Custom Field Plugins

Directory: components/com_joomhelpdesk/plugins/custfield/

Custom field plugins define new field types that can be used in ticket custom fields. Each plugin extends JoomhelpdeskCustFieldPlugin and the class name must match the PHP filename (e.g., class CalendarPlugin in calendar.php).

Required methods:

MethodDescription
DisplaySettings($params) Renders settings UI in the custom field editor (admin backend)
SaveSettings() Saves settings from the custom field editor, returns a string
Input($current, $params, $context, $id) Renders the field on the ticket create/edit form
Save($id, $params, $value) Processes and returns the submitted field value
Display($value, $params, $context, $id) Renders the field value for display (read-only)
CanEdit() Returns true if the field can be edited inline by handlers

Optional methods:

MethodDescription
Search($params, $search, $peruser) Custom search implementation for the field

Parameters are typically stored using serialize()/unserialize() or json_encode()/json_decode(). Field input elements should use the naming convention custom_{$id} where $id is the custom field's database ID.

Some custom field plugins include a subdirectory with a form.php file that provides a more complex form rendering template (e.g., calendar/form.php, checkboxes/form.php).

Included plugins:

FileDescription
sample.php Reference plugin with documented examples
base.php Base example with Search() method included
calendar.php Date picker field
checkboxes.php Multiple checkbox field
codedefault.php Field with default value from code
dualcombo.php Dual cascading dropdown field
hostname.php Auto-captures the user's hostname
images.php Image upload field (extends uploadbase.php)
int.php Integer/number field
link.php URL/hyperlink field
logip.php Auto-captures the user's IP address
map.php Google Maps location picker
output.php Display-only output field
price.php Price/currency field
profile.php User profile data (supports Joomla, JomSocial, EasyProfile, EasySocial, Community Builder, Contact)
radioplus.php Enhanced radio button field
rating.php Star rating field
source.php Ticket source display field
sql.php Field populated from a SQL query
sqlcombo.php Dropdown populated from a SQL query
uploadbase.php Base class for file upload fields (images, videos, files)
videos.php Video upload field (extends uploadbase.php)

Upload-related fields share CSS and JS assets in the uploads/ subdirectory and file storage in the files/, images/, and videos/ subdirectories.


3.4 Report Plugins

Directory: components/com_joomhelpdesk/plugins/reports/

Report plugins are defined as XML files that describe SQL queries, filters, display fields, and optional graphs. These are used by the helpdesk's built-in reporting engine to generate data tables and charts.

XML structure:

ElementDescription
<title> Report name (can be a language string key)
<description> Report description
<sql> The SQL query with placeholder tokens for filters
<filter> Filter definitions (date ranges, lookups, dropdowns)
<group> Grouping options (e.g., date grouping by day/week/month)
<field> Display columns with optional sorting, summing, and linking
<totals> Set to 1 to show totals row
<graph> Graph configuration with x-axis and y-axis field mappings

Filter types:

  • daterange -- Date range picker with presets (last month, this week, custom, etc.)
  • lookup -- Dropdown populated from a database table
  • normal -- Standard filter with custom SQL-backed options
  • dategroup -- Date grouping selector (day, week, month)

SQL placeholders:

Filters inject values into the SQL using {filter_name} placeholders. Conditional sections use {if,filter_name}...{endif} blocks.

Included reports:

FileDescription
active_users.xml Active users report
daily_activity.xml Daily activity summary
daily_tickets.xml Tickets opened and closed per day
handler_messages.xml Handler message counts
idle_tickets.xml Tickets with no recent activity
list_tickets.xml Full ticket listing
list_tickets_custom.xml Customizable ticket listing
open_tickets.xml Open tickets grouped by handler

Custom reports can be placed in the custom/ subdirectory.


3.5 Ticket Plugins

Directory: components/com_joomhelpdesk/plugins/tickets/

Ticket plugins respond to events that occur during the lifecycle of a support ticket. Each plugin extends SupportActionsPlugin with the class name following the pattern SupportActions{Filename}.

Ticket change events:

MethodTriggered When
Ticket_updatePriority($ticket, $params) Ticket priority changes
Ticket_updateStatus($ticket, $params) Ticket status changes
Ticket_updateCategory($ticket, $params) Ticket category changes
Ticket_updateUser($ticket, $params) Ticket user/owner changes
Ticket_updateProduct($ticket, $params) Ticket product changes
Ticket_updateDepartment($ticket, $params) Ticket department changes
Ticket_updateUnregEMail($ticket, $params) Unregistered user email changes
Ticket_updateSubject($ticket, $params) Ticket subject changes
Ticket_updateLock($ticket) Ticket lock status changes (handler access)
Ticket_updateCustomField($ticket, $params) Custom field value changes
Ticket_updateMessage($ticket, $params) Ticket message is edited
Ticket_addTag($ticket, $params) Tag added to ticket
Ticket_removeTag($ticket, $params) Tag removed from ticket
Ticket_addTime($ticket, $params) Time entry added (can be negative)
Ticket_addMessage($ticket, $params) Reply added to ticket
Ticket_addFile($ticket, $params) File attached to ticket
Ticket_deleteAttach($ticket, $params) Attachment removed from ticket
Ticket_assignHandler($ticket, $params) Handler assignment changes
Ticket_addCC($ticket, $params) CC recipient added to ticket

Reply and notification events:

MethodTriggered When
Admin_Reply($ticket, $params) Handler replies to a ticket
Admin_Private($ticket, $params) Handler adds a private message
Admin_ForwardUser($ticket, $params) Handler forwards ticket to another user
Admin_ForwardProduct($ticket, $params) Handler forwards ticket to another product/department
Admin_ForwardHandler($ticket, $params) Handler forwards ticket to another handler
User_Reply($ticket, $params) User replies to a ticket
User_Open($ticket, $params) User opens a new ticket

Other events:

MethodTriggered When
beforeEMailSend($ticket, $params) Before an email notification is sent (modify mailer settings)
beforeEMailImport($ticket, $params) Before an inbound email is imported (modify headers)
ticketCreateRedirect($ticket, $params) Before the post-creation redirect (override destination)
Tickets_openNew($params) Before a new ticket is created (return validation result)
Tickets_customAssign($params) Override auto-assigned handler (return user ID or null)

Message types (used in Ticket_addMessage):

ValueConstantMeaning
0 TICKET_MESSAGE_USER User message
1 TICKET_MESSAGE_ADMIN Handler message
2 TICKET_MESSAGE_PRIVATE Private note
3 TICKET_MESSAGE_AUDIT Audit log entry
4 TICKET_MESSAGE_DRAFT Draft message
5 TICKET_MESSAGE_TIME Time entry
6 TICKET_MESSAGE_OPENEDBY Opened-by record

Handler assignment types (used in Ticket_assignHandler):

ValueConstantMeaning
0 TICKET_ASSIGN_FORWARD Forwarded to handler
1 TICKET_ASSIGN_TOOK_OWNER Took ownership on reply
2 TICKET_ASSIGN_UNASSIGNED Set to unassigned
3 TICKET_ASSIGN_ASSIGNED Directly assigned

Included plugins:

FileDescription
sample.php Reference plugin with all event methods documented
emailsend.php Core email notification handler (sends emails on ticket actions)
emailrecv.php Email receive handler
eventaction.php Integration with the Freestyle Event Action System
extraemails.php Additional email notifications (custom field changes, status changes, CC notifications)
limitopen.php Limit the number of tickets a user can open per time period
domaingroup.php Domain-based user grouping
groupuserrestrict.php Group-based user restrictions
jomsocial.php JomSocial integration
uddeim.php UddeIM private messaging integration

Important: The emailsend.php plugin is critical for the helpdesk to function properly. If it is disabled, no email notifications will be sent for any ticket actions.


3.6 Email Check Plugins

Directory: components/com_joomhelpdesk/plugins/emailcheck/

Email check plugins define rules for trimming and cleaning inbound email content. They use XML files containing regular expression patterns that identify where to truncate quoted reply text (e.g., removing "Original Message" headers, forwarded content, and signature blocks).

XML structure:

Each <trimmatch> element defines a trim rule:

  • <starts> -- Match lines that start with a specific string (e.g., > for quoted text)
  • <regex> -- Regular expression pattern to match against each line
  • <nearby> -- Additional patterns that must appear near the matched line (within a specified number of lines)

Included plugins:

File/DirectoryDescription
trim/core.xml Core plain-text email trimming rules (removes quoted replies, "Original Message" headers, From/To/Subject blocks)
trim/html.xml HTML email trimming rules

3.7 Ticket Print Plugins

Directory: components/com_joomhelpdesk/plugins/ticketprint/

Ticket print plugins provide custom print layouts for tickets. Each print layout consists of an XML manifest file and a subdirectory containing the PHP template.

XML manifest structure:

ElementDescription
<title> Display name shown in print menus
<description> Description of the layout
<user> 1 to show in user (customer) print menu, 0 to hide
<admin> 1 to show in admin (handler) print menu, 0 to hide
<batch> 1 to show in batch print menu, 0 to hide
<noheader> 1 to hide the page heading
<can_run_php> PHP code that returns true/false to control visibility per ticket
<include> Filename of the PHP template in the plugin's subdirectory

In the PHP template, the ticket object is available as $this->ticket, which includes properties like title, status, name, messages, and custom fields.

Included plugins:

File/DirectoryDescription
example.xml Example manifest
example/main.php Example print template showing subject, status, user, and message history

3.8 Ticket Source Plugins

Directory: components/com_joomhelpdesk/plugins/ticketsource/

Ticket source plugins add new ticket source categories and tabs to the admin support interface. Each plugin extends Ticket_Source and provides methods to generate navigation tabs and menu items.

Key methods:

MethodDescription
getTabs() Returns tab data for the admin support interface
getOverview_ListItem() Returns items for the admin overview list
getMainMenu_ListItem() Returns items for the main menu
getMainMenu_Module_Admin_ListItem() Returns items for the admin module menu

Each plugin also defines $user_show and $admin_show flags controlling visibility.

Included plugins:

FileDescription
email.php Shows pending email-sourced tickets tab
email_accepted.php Tracks accepted email tickets
email_declined.php Tracks declined email tickets

3.9 Ticket Open Search Plugins

Directory: components/com_joomhelpdesk/plugins/ticketopensearch/

Ticket open search plugins power the search-as-you-type feature when users are opening a new ticket. They suggest existing content (FAQs, KB articles) that might answer the user's question before they submit a ticket.

Each plugin extends Joomhelpdesk_Plugin_OpenSearch and implements:

  • search($search) -- Receives the search string and returns an array of Joomhelpdesk_OpenSearch_Result objects, each with title, type, link, and score properties.

Results are ranked by score and displayed to the user during ticket creation.

Included plugins:

FileDescription
faqs.php Searches FAQ entries by question and answer
kbarts.php Searches Knowledge Base articles by title and body

3.10 User List Plugins

Directory: components/com_joomhelpdesk/plugins/userlist/

User list plugins add extra columns to user selection popups throughout the helpdesk (used when assigning handlers, picking users for tickets, etc.). Each plugin extends User_List_Column.

Key methods:

MethodDescription
getHeader() Returns the column header text
loadData($users) Pre-loads data for all users in the list (batch query)
displayUser($user) Returns the cell content for a specific user
search($string) Returns an array of user IDs matching the search string

Included plugins:

FileDescription
postcode.php Shows the user's postal code from their Joomla profile in the user picker

3.11 Pick Table Plugins

Directory: components/com_joomhelpdesk/plugins/picktable/

Pick table plugins define data tables that can be browsed and selected from within the helpdesk interface. They are XML-based and describe a SQL query, filters, display columns, and linking behavior.

XML structure:

ElementDescription
<display> Table display name
<sql> SQL query to fetch data
<use_auth> Access control attributes (published, access, author)
<addbtntext> Label for the select/add button
<ordering> Default sort field
<keyfield> Primary key field name
<displayfield> Field used as the display label
<link> URL pattern for linking to items (%ID% is replaced with the key value)
<filters> Search and filter definitions
<displayfields> Column definitions with sorting, linking, and type info

Included plugins:

FileDescription
article.xml Browse and select Joomla articles
faq.xml Browse and select JoomHelpDesk FAQ entries
kb.xml Browse and select JoomHelpDesk KB articles

4. Enabling and Disabling Plugins

To enable or disable a plugin:

  1. Navigate to Administrator > Components > JoomHelpDesk > Plugins.
  2. Find the plugin in the list.
  3. Click the status icon in the Status column:
    • A green publish icon indicates the plugin is enabled. Click it to disable.
    • A grey unpublish icon indicates the plugin is disabled. Click it to enable.

The enable/disable state is stored in the #__joomhelpdesk_plugins database table. The system checks this table when loading plugins to determine which ones should be active.

Some plugins (like emailsend.php for ticket email notifications) are essential for normal helpdesk operation. Disabling them will stop the corresponding functionality across the entire system.

Certain plugin files can also be disabled at the filesystem level by appending .disabled to the filename (e.g., acysms.php.disabled), which prevents the system from discovering them at all.

5. Plugin Configuration

Plugins that support configuration have an Options button in the Status column of the plugin management page. Clicking this button opens a settings form.

Settings Files

Plugin settings are defined in XML files that follow Joomla's standard form field XML format. The settings file must be named {plugin_name}.settings.xml and placed alongside the plugin's PHP file.

For example, the "Extra Admin Tabs" GUI plugin uses:

components/com_joomhelpdesk/plugins/gui/extra_tabs.settings.xml

Settings XML Format

Settings files use Joomla's <form> XML structure with <fields> groups (displayed as tabs) and <fieldset> elements containing individual <field> definitions:

<?xml version="1.0" encoding="utf-8"?>
<form>
  <fields name="tab1" label="General Settings">
    <fieldset name="tab1" label="">
      <field name="enabled" type="radio" class="btn-group btn-group-yesno"
             label="Enable Feature" default="0">
        <option value="0">JNO</option>
        <option value="1">JYES</option>
      </field>
      <field name="message" type="text" label="Message" description="" />
    </fieldset>
  </fields>
</form>

Each <fields> group with a label attribute becomes a separate tab in the configuration interface. Standard Joomla field types are supported (text, textarea, radio, list, editor), along with JoomHelpDesk-specific types like joomhelpdeskeditor, joomhelpdesksqlcombo, and joomhelpdeskchecklist.

Accessing Settings in Code

Within a plugin class, call $this->loadSettings() to load the saved configuration. Settings are then available as a structured object on $this->settings:

function myMethod($ticket, $params)
{
    $this->loadSettings();

    if ($this->settings->tab1->enabled) {
        $message = $this->settings->tab1->message;
        // Use the setting...
    }
}

The settings object mirrors the XML structure: top-level properties correspond to <fields name="..."> groups, and nested properties correspond to individual <field name="..."> elements within those groups.

Settings are stored as JSON in the settings column of the #__joomhelpdesk_plugins database table.

Cron Job Starts

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.

Ok