This manual is deprecated. Please visit https://groupoffice.readthedocs.io for the latest documentation. |
Event handling
Group-Office modules can interact with eachother with event handling. For example you might want to do something in a custom module when a particular thing happens in another module.
Some practical examples:
- The IMAP authentication module checks access when a user logs in.
- When an order status changes in the webshop of group-office.com, an event handler enables the download for the customer
- When a password is change in Group-Office. A system account can be updated.
- etc.
How does it work? I'll explain the IMAP authentication example.
When a user logs in, an event is fired in classes/base/auth.class.inc.php:
$params = array('username'=>$username, 'password'=>$password); $GO_MODULES->fire_event('before_login', $params);
The fire_event function searches for a function in each module class. It does it in this way.
- It searches for the file "module/<module_id>/classes/<module_id>.class.inc.php" and includes it.
- It checks if class <module_id> is available.
- It checks if the <module_id>::__on_<event_name>() is defined.
In the imapauth module I have created this function:
class imapauth extends db { var $config; public function __construct(){ global $GO_MODULES; $this->db(); if(file_exists($GO_MODULES->modules['imapauth']['path'].'config.inc.php')) { require($GO_MODULES->modules['imapauth']['path'].'config.inc.php'); $this->config=$config; } } public function __on_before_login($arguments) { ... } }
So now just before a user is logged in this function is called. The function connects to the IMAP server using the supplied password. If it succeeds it will add a user account and e-mail account or update the password if necessary.
The same could be done with any application/protocol like Joomla, PhpBB, LDAP etc. You'll just have to write it!
Defined events
Module | Event name | Parameters | Description | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Framework | before_login | username, password | Fires just before a user logins. Useful for authentication bridges. | |||||||||||||
Framework | update_user | user: array with all db fields | Fires when a user is updated. | |||||||||||||
Framework | before_add_user | user: array with all db fields | Fires just before a user is added. | |||||||||||||
Framework | add_user | user: array with all db fields | Fires after a user is added. | |||||||||||||
Framework | user_delete | user: array with all db fields | Fires after a user is deleted. | |||||||||||||
Framework | install_module | module: array with module db fields | Fires when a module is installed. | Eg. You could enable extra functionality in another module when a module is installed | - | Framework | save_settings | Fires when a the user settings are updated | Each module can add it's own panels to the settings dialog. Through this event you can update the module settings. | - | Framework | reminder_dismissed | reminder: array with reminder db fields | Fires when a reminder is dismised | Eg. When a reminder of a recurring event is dismissed, a new reminder is created for the next occurrence. | - |