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!