summaryrefslogtreecommitdiffstats
path: root/lib/SimpleSAML/Module.php
diff options
context:
space:
mode:
authorJaime Perez Crespo <jaime.perez@uninett.no>2015-08-05 14:42:20 +0200
committerJaime Perez Crespo <jaime.perez@uninett.no>2015-08-05 14:42:20 +0200
commite57ed469fd3b183e4a9d685b6421971653a9150b (patch)
tree6577bffce3969a29748d212da6e9d20e899f6d6b /lib/SimpleSAML/Module.php
parent61bb654a15b1a005e93b9cf90985c95a4f73f39f (diff)
downloadsimplesamlphp-e57ed469fd3b183e4a9d685b6421971653a9150b.zip
simplesamlphp-e57ed469fd3b183e4a9d685b6421971653a9150b.tar.gz
simplesamlphp-e57ed469fd3b183e4a9d685b6421971653a9150b.tar.bz2
Reformat SimpleSAML_Module.
Diffstat (limited to 'lib/SimpleSAML/Module.php')
-rw-r--r--lib/SimpleSAML/Module.php408
1 files changed, 212 insertions, 196 deletions
diff --git a/lib/SimpleSAML/Module.php b/lib/SimpleSAML/Module.php
index 7a3a11c..4868c56 100644
--- a/lib/SimpleSAML/Module.php
+++ b/lib/SimpleSAML/Module.php
@@ -1,4 +1,5 @@
-<?php
+<?php
+
/**
* Helper class for accessing information about modules.
@@ -6,199 +7,214 @@
* @author Olav Morken, UNINETT AS.
* @package SimpleSAMLphp
*/
-class SimpleSAML_Module {
-
-
- /**
- * Retrieve the base directory for a module.
- *
- * The returned path name will be an absolute path.
- *
- * @param string $module Name of the module
- * @return string The base directory of a module.
- */
- public static function getModuleDir($module) {
- $baseDir = dirname(dirname(dirname(__FILE__))) . '/modules';
- $moduleDir = $baseDir . '/' . $module;
-
- return $moduleDir;
- }
-
-
- /**
- * Determine whether a module is enabled.
- *
- * Will return false if the given module doesn't exists.
- *
- * @param string $module Name of the module
- * @return bool True if the given module is enabled, false otherwise.
- *
- * @throws Exception If module.enable is set and is not boolean.
- */
- public static function isModuleEnabled($module) {
-
- $moduleDir = self::getModuleDir($module);
-
- if(!is_dir($moduleDir)) {
- return FALSE;
- }
-
- $globalConfig = SimpleSAML_Configuration::getOptionalConfig();
- $moduleEnable = $globalConfig->getArray('module.enable', array());
-
- if(isset($moduleEnable[$module])) {
- if(is_bool($moduleEnable[$module]) === TRUE) {
- return $moduleEnable[$module];
- }
-
- throw new Exception("Invalid module.enable value for for the module $module");
- }
-
- if (assert_options(ASSERT_ACTIVE) && !file_exists($moduleDir . '/default-enable') && !file_exists($moduleDir . '/default-disable')) {
- SimpleSAML_Logger::error("Missing default-enable or default-disable file for the module $module");
- }
-
- if(file_exists($moduleDir . '/enable')) {
- return TRUE;
- }
-
- if(!file_exists($moduleDir . '/disable') && file_exists($moduleDir . '/default-enable')) {
- return TRUE;
- }
-
- return FALSE;
- }
-
-
- /**
- * Get available modules.
- *
- * @return array One string for each module.
- *
- * @throws Exception If we cannot open the module's directory.
- */
- public static function getModules() {
-
- $path = self::getModuleDir('.');
-
- $dh = opendir($path);
- if($dh === FALSE) {
- throw new Exception('Unable to open module directory "' . $path . '".');
- }
-
- $modules = array();
-
- while( ($f = readdir($dh)) !== FALSE) {
- if($f[0] === '.') {
- continue;
- }
-
- if(!is_dir($path . '/' . $f)) {
- continue;
- }
-
- $modules[] = $f;
- }
-
- closedir($dh);
-
- return $modules;
- }
-
-
- /**
- * Resolve module class.
- *
- * This function takes a string on the form "<module>:<class>" and converts it to a class
- * name. It can also check that the given class is a subclass of a specific class. The
- * resolved classname will be "sspmod_<module>_<$type>_<class>.
- *
- * It is also possible to specify a full classname instead of <module>:<class>.
- *
- * An exception will be thrown if the class can't be resolved.
- *
- * @param string $id The string we should resolve.
- * @param string $type The type of the class.
- * @param string|null $subclass The class should be a subclass of this class. Optional.
- * @return string The classname.
- *
- * @throws Exception If the class cannot be resolved.
- */
- public static function resolveClass($id, $type, $subclass = NULL) {
- assert('is_string($id)');
- assert('is_string($type)');
- assert('is_string($subclass) || is_null($subclass)');
-
- $tmp = explode(':', $id, 2);
- if (count($tmp) === 1) {
- $className = $tmp[0];
- } else {
- $className = 'sspmod_' . $tmp[0] . '_' . $type . '_' . $tmp[1];
- }
-
- if (!class_exists($className)) {
- throw new Exception('Could not resolve \'' . $id .
- '\': No class named \'' . $className . '\'.');
- } elseif ($subclass !== NULL && !is_subclass_of($className, $subclass)) {
- throw new Exception('Could not resolve \'' . $id . '\': The class \'' .
- $className . '\' isn\'t a subclass of \'' . $subclass . '\'.');
- }
-
- return $className;
- }
-
-
- /**
- * Get absolute URL to a specified module resource.
- *
- * This function creates an absolute URL to a resource stored under ".../modules/<module>/www/".
- *
- * @param string $resource Resource path, on the form "<module name>/<resource>"
- * @param array $parameters Extra parameters which should be added to the URL. Optional.
- * @return string The absolute URL to the given resource.
- */
- public static function getModuleURL($resource, array $parameters = array()) {
- assert('is_string($resource)');
- assert('$resource[0] !== "/"');
-
- $url = \SimpleSAML\Utils\HTTP::getBaseURL() . 'module.php/' . $resource;
- if (!empty($parameters)) {
- $url = \SimpleSAML\Utils\HTTP::addURLParameters($url, $parameters);
- }
- return $url;
- }
-
-
- /**
- * Call a hook in all enabled modules.
- *
- * This function iterates over all enabled modules and calls a hook in each module.
- *
- * @param string $hook The name of the hook.
- * @param mixed &$data The data which should be passed to each hook. Will be passed as a reference.
- */
- public static function callHooks($hook, &$data = NULL) {
- assert('is_string($hook)');
-
- $modules = self::getModules();
- sort($modules);
- foreach ($modules as $module) {
- if (!self::isModuleEnabled($module)) {
- continue;
- }
-
- $hookfile = self::getModuleDir($module) . '/hooks/hook_' . $hook . '.php';
- if (!file_exists($hookfile)) {
- continue;
- }
-
- require_once($hookfile);
-
- $hookfunc = $module . '_hook_' . $hook;
- assert('is_callable($hookfunc)');
-
- $hookfunc($data);
- }
- }
-
+class SimpleSAML_Module
+{
+
+
+ /**
+ * Retrieve the base directory for a module.
+ *
+ * The returned path name will be an absolute path.
+ *
+ * @param string $module Name of the module
+ *
+ * @return string The base directory of a module.
+ */
+ public static function getModuleDir($module)
+ {
+ $baseDir = dirname(dirname(dirname(__FILE__))).'/modules';
+ $moduleDir = $baseDir.'/'.$module;
+
+ return $moduleDir;
+ }
+
+
+ /**
+ * Determine whether a module is enabled.
+ *
+ * Will return false if the given module doesn't exists.
+ *
+ * @param string $module Name of the module
+ *
+ * @return bool True if the given module is enabled, false otherwise.
+ *
+ * @throws Exception If module.enable is set and is not boolean.
+ */
+ public static function isModuleEnabled($module)
+ {
+
+ $moduleDir = self::getModuleDir($module);
+
+ if (!is_dir($moduleDir)) {
+ return false;
+ }
+
+ $globalConfig = SimpleSAML_Configuration::getOptionalConfig();
+ $moduleEnable = $globalConfig->getArray('module.enable', array());
+
+ if (isset($moduleEnable[$module])) {
+ if (is_bool($moduleEnable[$module]) === true) {
+ return $moduleEnable[$module];
+ }
+
+ throw new Exception("Invalid module.enable value for for the module $module");
+ }
+
+ if (assert_options(ASSERT_ACTIVE) &&
+ !file_exists($moduleDir.'/default-enable') &&
+ !file_exists($moduleDir.'/default-disable')
+ ) {
+ SimpleSAML_Logger::error("Missing default-enable or default-disable file for the module $module");
+ }
+
+ if (file_exists($moduleDir.'/enable')) {
+ return true;
+ }
+
+ if (!file_exists($moduleDir.'/disable') && file_exists($moduleDir.'/default-enable')) {
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Get available modules.
+ *
+ * @return array One string for each module.
+ *
+ * @throws Exception If we cannot open the module's directory.
+ */
+ public static function getModules()
+ {
+
+ $path = self::getModuleDir('.');
+
+ $dh = opendir($path);
+ if ($dh === false) {
+ throw new Exception('Unable to open module directory "'.$path.'".');
+ }
+
+ $modules = array();
+
+ while (($f = readdir($dh)) !== false) {
+ if ($f[0] === '.') {
+ continue;
+ }
+
+ if (!is_dir($path.'/'.$f)) {
+ continue;
+ }
+
+ $modules[] = $f;
+ }
+
+ closedir($dh);
+
+ return $modules;
+ }
+
+
+ /**
+ * Resolve module class.
+ *
+ * This function takes a string on the form "<module>:<class>" and converts it to a class
+ * name. It can also check that the given class is a subclass of a specific class. The
+ * resolved classname will be "sspmod_<module>_<$type>_<class>.
+ *
+ * It is also possible to specify a full classname instead of <module>:<class>.
+ *
+ * An exception will be thrown if the class can't be resolved.
+ *
+ * @param string $id The string we should resolve.
+ * @param string $type The type of the class.
+ * @param string|null $subclass The class should be a subclass of this class. Optional.
+ *
+ * @return string The classname.
+ *
+ * @throws Exception If the class cannot be resolved.
+ */
+ public static function resolveClass($id, $type, $subclass = null)
+ {
+ assert('is_string($id)');
+ assert('is_string($type)');
+ assert('is_string($subclass) || is_null($subclass)');
+
+ $tmp = explode(':', $id, 2);
+ if (count($tmp) === 1) {
+ $className = $tmp[0];
+ } else {
+ $className = 'sspmod_'.$tmp[0].'_'.$type.'_'.$tmp[1];
+ }
+
+ if (!class_exists($className)) {
+ throw new Exception(
+ 'Could not resolve \''.$id.'\': No class named \''.$className.'\'.'
+ );
+ } elseif ($subclass !== null && !is_subclass_of($className, $subclass)) {
+ throw new Exception(
+ 'Could not resolve \''.$id.'\': The class \''.$className.'\' isn\'t a subclass of \''.$subclass.'\'.'
+ );
+ }
+
+ return $className;
+ }
+
+
+ /**
+ * Get absolute URL to a specified module resource.
+ *
+ * This function creates an absolute URL to a resource stored under ".../modules/<module>/www/".
+ *
+ * @param string $resource Resource path, on the form "<module name>/<resource>"
+ * @param array $parameters Extra parameters which should be added to the URL. Optional.
+ *
+ * @return string The absolute URL to the given resource.
+ */
+ public static function getModuleURL($resource, array $parameters = array())
+ {
+ assert('is_string($resource)');
+ assert('$resource[0] !== "/"');
+
+ $url = \SimpleSAML\Utils\HTTP::getBaseURL().'module.php/'.$resource;
+ if (!empty($parameters)) {
+ $url = \SimpleSAML\Utils\HTTP::addURLParameters($url, $parameters);
+ }
+ return $url;
+ }
+
+
+ /**
+ * Call a hook in all enabled modules.
+ *
+ * This function iterates over all enabled modules and calls a hook in each module.
+ *
+ * @param string $hook The name of the hook.
+ * @param mixed &$data The data which should be passed to each hook. Will be passed as a reference.
+ */
+ public static function callHooks($hook, &$data = null)
+ {
+ assert('is_string($hook)');
+
+ $modules = self::getModules();
+ sort($modules);
+ foreach ($modules as $module) {
+ if (!self::isModuleEnabled($module)) {
+ continue;
+ }
+
+ $hookfile = self::getModuleDir($module).'/hooks/hook_'.$hook.'.php';
+ if (!file_exists($hookfile)) {
+ continue;
+ }
+
+ require_once($hookfile);
+
+ $hookfunc = $module.'_hook_'.$hook;
+ assert('is_callable($hookfunc)');
+
+ $hookfunc($data);
+ }
+ }
}