read(); // include all files in the tools directory while ($entry) { if ((substr($entry, strlen($entry) - 4, 4) == '.inc') && is_file($toolsDirName . '/'.$entry)) { include_once($toolsDirName . '/'.$entry); } $entry = $toolsDir->read(); } // find tools classes $classList = get_declared_classes(); $return = array(); for ($i = 0; $i < sizeof($classList); $i++) { if (in_array('LAMTool', class_implements($classList[$i]))) { $return[] = $classList[$i]; } } return $return; } /** * Represents a tool. * LAM will scan lib/tools/*.inc for classes which implement this interface. This allows to * dynamically plugin additional tools. There will be an entry on the tools page inside LAM * for each found class (if it matches the security level). * A LAMTool only specifies name, description and location of a tool. The tool functionality * is provided by the tool's target page. * * @author Roland Gruber * @package tools */ interface LAMTool { /** * Returns the name of the tool. * * @return string name */ function getName(); /** * returns a description text for the tool. * * @return string description */ function getDescription(); /** * Returns a link to the tool page (relative to templates/). * * @return string link */ function getLink(); /** * Returns if the tool requires write access to LDAP. * * @return boolean true if write access is needed */ function getRequiresWriteAccess(); /** * Returns if the tool requires password change rights. * * @return boolean true if password change rights are needed */ function getRequiresPasswordChangeRights(); /** * Returns the link to the tool image (relative to graphics/) * * @return string image URL */ function getImageLink(); /** * Returns the preferred position of this tool on the tools page. * The position may be between 0 and 1000. 0 is the top position. * * @return int preferred position */ function getPosition(); /** * Returns a list of sub tools or an empty array. * * @return array list of subtools (LAMTool) */ function getSubTools(); /** * Returns if the tool is visible in the menu. * * @return boolean visible */ function isVisible(); /** * Returns if a tool may be hidden by configuration in the LAM server profile. * * @return boolean hideable */ function isHideable(); } /** * Represents a subtool. * * @author Roland Gruber * @package tools */ class LAMSubTool { /** visible tool name */ public $name; /** tool description */ public $description; /** tool link (relative to templates/) */ public $link; /** image URL (relative to graphics/) */ public $image; } ?>