<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>Module HowTo - Basic concepts</title> <link rel="stylesheet" type="text/css" href="style/layout.css"> <link rel="shortcut icon" type="image/x-icon" href="images/favicon.ico"></head><body> <div style="text-align: center;"> <h1>Module HowTo - Basic concepts<br> </h1> <br> <br> <div style="text-align: left;"><br> <h2>1. Licensing</h2> LAM is licensed under the <a href="http://www.gnu.org/licenses/gpl.txt">GNU General Public License</a>. This means your plugins need a compatible license.<br> LAM is distributed with a copy of the GPL license.<br> <br> <h2>2. Naming and position in directory structure</h2> <br> Module names are usually named after the object class they manage. However, you can use any name you want, it should be short and containing only a-z and 0-9. The module name is only shown in the configuration dialog, on all other pages LAM will show a provided <span style="font-style: italic;">alias</span> name.<br> All account modules are stored in <span style="font-weight: bold;">lib/modules</span>. The filename must end with <span style="font-weight: bold;">.inc</span> and the file must have the same name as its inside class.<br> <br> <span style="font-weight: bold; text-decoration: underline;">Example:</span> Our example module will provide the <span style="font-weight: bold;">class ieee802Devic</span><span style="font-style: italic; font-weight: bold;">e</span>, therefore the file will be called <span style="font-weight: bold;">lib/modules/ieee802Devic</span><span style="font-style: italic; font-weight: bold;">e.inc</span>.<span style="font-style: italic;"></span><br> <br> <br> <h2>3. Defining the class</h2> All module classes have <span style="font-weight: bold;">baseModule</span> as parent class. This provides common functionality and dummy functions for all required class functions.<br> <br> <span style="font-weight: bold;">Example:</span><br> <br> <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> <tbody> <tr> <td style="vertical-align: top;">/**<br> * Provides MAC addresses for hosts.<br> *<br> * @package modules<br> */<span style="font-weight: bold;"><br> class</span> <span style="color: rgb(255, 0, 0);">ieee802Device</span> <span style="font-style: italic;">extends </span><span style="font-weight: bold;">baseModule</span> {<br> <br> }<br> </td> </tr> </tbody> </table> <br> <h2>4. Meta data</h2> The module interface inludes a lot of required and optional functions. Many of these functions do not need to be implemented directly in the module, you can define <span style="font-weight: bold;">meta data</span> for them and the <span style="font-weight: bold;">baseModule</span> will do the rest.<br> Providing <span style="font-weight: bold;">meta data</span> is optional, you can implement the required functions in your class, too.<br> <br> The <span style="font-weight: bold;">baseModule</span> reads the <span style="font-weight: bold;">meta data</span> by calling <span style="font-weight: bold;">get_metaData()</span> in your class.<br> <br> <span style="font-weight: bold; text-decoration: underline;">Example:</span><br> <br> <table style="width: 100%; text-align: left;" class="mod-code" border="0" cellpadding="2" cellspacing="2"> <tbody> <tr> <td style="vertical-align: top;"> /**<br> * Returns meta data that is interpreted by parent class<br> *<br> * @return array array with meta data<br> */<br> <span style="font-weight: bold;">function</span> <span style="color: rgb(255, 0, 0);">get_metaData</span>() {<br> $return = array();<br> // icon<br> $return['icon'] = 'user.png';<br> }<br> </td> </tr> </tbody> </table> <br> You will see this functions several times in the next parts of this HowTo.<br> <br> <h2><span style="font-weight: bold;"></span></h2> </div> </div> </body></html>