| Requirement | Value | Notes |
|---|---|---|
| osTicket | 1.18.x | The plugin class checks for osTicket 1.18.0 or newer and for the ticket_pid column in ost_ticket |
| PHP | 7.4 or newer | As required by composer.json; CI tests 7.4 to 8.3 |
| Database | MySQL or MariaDB | The README names MariaDB 10.3+ or MySQL 5.7+ |
| Table prefix | ost_ |
All SQL queries of the plugin use the fixed prefix ost_; any other prefix is not supported |
| File permissions | Write access to scp/ |
The plugin copies three files there on activation |
| Composer | Git route only | The plugin has no runtime dependencies but needs the autoloader generated by Composer |
include/plugins/ on your osTicket server.The package list of the repository (
.releaseinclude) containsvendor/autoload.phpandvendor/composer/. These are the files the plugin needs to load its classes fromsrc/.
cd /path/to/osticket/include/plugins
git clone https://github.com/markus-michalski/osticket-subticket-manager.git subticket-manager
cd subticket-manager
composer install --no-dev
A plain
git cloneis not enough. The plugin loads its classes undersrc/exclusively throughvendor/autoload.php, andvendor/is not part of the repository. Withoutcomposer installthe plugin fails with a PHP error (class not found).
The name of the plugin folder is up to you. The AJAX handler locates the plugin class via include/plugins/*/class.SubticketPlugin.php. If the plugin exists more than once under include/plugins/ (for example an old copy with a different folder name), the handler answers with HTTP 500 and the message Multiple SubticketPlugin installations detected. Remove the extra copy in that case.
On activation (enable()) the following happens:
enable() creates an active instance named after the plugin.scp/: subtickets.php, ajax-subticket.php and apps.php from the plugin's scp-files/ folder are copied to scp/. Existing files with the same name are overwritten.scp/ is not writable or a source file is missing, enable() returns messages such as Target directory not writable: ... or Failed to deploy file to scp/<file>.The plugin does not create its database changes in enable() but on the first page request after activation (see Technical details).
apps.phpis copied toscp/apps.php. If a file with that name already exists there (for example one shipped with osTicket), it is overwritten, and uninstalling the plugin deletesscp/apps.php. Back the file up before activating.
git pull and composer install --no-dev).plugin.php with the file scp/.subticket-deployed-version and copies the three files to scp/ again whenever the versions differ.If scp/ is not writable for the web server, copy the files by hand:
cd /path/to/osticket
cp include/plugins/subticket-manager/scp-files/subtickets.php scp/subtickets.php
cp include/plugins/subticket-manager/scp-files/ajax-subticket.php scp/ajax-subticket.php
cp include/plugins/subticket-manager/scp-files/apps.php scp/apps.php
The plugin does not override disable(). Disabling leaves the three files in scp/ and all database changes in place. The panels, the queue indicator and auto-linking are inactive because the plugin no longer starts.
Deleting the plugin in the Admin Panel runs uninstall():
scp/subtickets.php, scp/ajax-subticket.php, scp/apps.php and scp/.subticket-deployed-version are removed.version column and the two indexes (details under Configuration).ticket_pid.