-
Wire the hook — confirm loadProcessing is registered in getHooks():
public static function getHooks()
{
return [
self::$module.'.load_processing' => [__CLASS__, 'loadProcessing'],
self::$module.'.settings' => [__CLASS__, 'getSettings'],
];
}
Verify self::$module matches your module string (e.g. 'domains') before proceeding.
-
Implement loadProcessing() — receive the $service subject, set module/statuses, then chain all three lifecycle callbacks:
public static function loadProcessing(GenericEvent $event)
{
$service = $event->getSubject();
$service->setModule(self::$module)
->setActivationStatuses(['pending', 'pendapproval', 'active'])
->setEnable(function ($service) {
})->setReactivate(function ($service) {
})->setDisable(function () {
})->register();
}
-
setEnable body — fires when a new service is activated:
$serviceTypes = run_event('get_service_types', false, self::$module);
$serviceInfo = $service->getServiceInfo();
$settings = get_module_settings(self::$module);
$db = get_module_db(self::$module);
$db->query(
"update {$settings['TABLE']} set {$settings['PREFIX']}_status='active' "
."where {$settings['PREFIX']}_id='{$serviceInfo[$settings['PREFIX'].'_id']}'",
__LINE__, __FILE__
);
$GLOBALS['tf']->history->add(
$settings['TABLE'], 'change_status', 'active',
$serviceInfo[$settings['PREFIX'].'_id'],
$serviceInfo[$settings['PREFIX'].'_custid']
);
$smarty = new \TFSmarty();
$smarty->assign('{prefix}_hostname', $serviceInfo[$settings['PREFIX'].'_hostname']);
$smarty->assign('{prefix}_name', $serviceTypes[$serviceInfo[$settings['PREFIX'].'_type']]['services_name']);
$email = $smarty->fetch('email/admin/{module}_created.tpl');
$subject = 'New '.ucfirst(self::$module).' Created '.$serviceInfo[$settings['TITLE_FIELD']];
(new \MyAdmin\Mail())->adminMail($subject, $email, false, 'admin/{module}_created.tpl');
Replace {prefix} with your module's PREFIX value and {module} with the module name.
-
setReactivate body — same DB update + history, different email template and subject:
$email = $smarty->fetch('email/admin/{module}_reactivated.tpl');
$subject = $serviceInfo[$settings['TITLE_FIELD']].' '
.$serviceTypes[$serviceInfo[$settings['PREFIX'].'_type']]['services_name']
.' '.$settings['TBLNAME'].' Reactivated';
(new \MyAdmin\Mail())->adminMail($subject, $email, false, 'admin/{module}_reactivated.tpl');
-
setDisable body — implement suspension logic or leave empty if not needed:
->setDisable(function () {
})
-
Add PHPUnit tests in tests/PluginTest.php asserting source contains:
->setEnable(, ->setReactivate(, ->setDisable(, ->register()
history->add( and change_status
get_module_settings(, get_module_db(, run_event(
- Both email template paths
Run: composer test