As many of you already know, logic hooks allow you to insert business logic (php code) at certain points within common actions a SugarCRM user may perform. Commonly used logic hooks are before_save and after_save hooks which allow you to run code after or before a record is saved, and after_login and after_logout which allows you to run code after a user logs in or out. The (mostly) complete list of available hooks and how to use them are available on the SugarCRM Developer website.

In some cases, you may need a single logic hook to work for all modules. Global logic hooks are good to use when you’re generalizing a utility for all modules. Instead of having an individual logic_hooks.php file in every /custom/modules/{module} folder, you can create /custom/modules/logic_hooks.php and put your hooks in there. The hooks in the global logic hooks file will fire for every module, even custom modules.

One issue I ran into recently was how to package and distribute a global logic hook. Installing a logic hook with a “Module Loader”-loadable package is pretty easy. Angel Magaña has a post explaining how to do just that. Adding a global logic hook is very simple. You do exactly what you would to install a regular logic hook using the logichooks entry in the $installdefs array, and instead of providing a module name, you provide an empty string.

To test this out for yourself you could use git to checkout the code or manually download the files from github. Zip up the three files together in a .zip file and load it up using the module loader. After you install the package, you’ll see the logic_hooks.php files were created properly in both /custom/modules and custom/modules/Accounts.

What other useful ways have you found to install and implement logic hooks?