/** * モジュールインポートメソッド * * MODULES_DIR に配置してあるモジュールをインポートする。 * 指定の方法は、 * MODULES_DIR/a/b/c/Foo.php * というモジュールに対して * a.b.c.Foo * もしくは * a.b.c.* * という方法で指定する。 * 最後を * で指定した場合、そのディレクトリに含まれる全てのファイルを取得する。 * サブディレクトリは検索しない * * ToDo * モジュールが読み込めなかったとき、原因がわかりにくい * * Usage * <code> * CSR::import('package.module.name'); * CSR::import('package.module.*'); * </code> * * @param string package name * @return void */ function import($package) { $loadedModules =& CSR::get('modules'); if (isset($loadedModules[$package])) { return; } //$loadedModules[$package]; $path = str_replace('.', '/', $package); if (basename($path) === '*') { $path = substr($path, 0, -1); if (is_dir(MODULES_DIR . $path) && ($dir = opendir(MODULES_DIR . $path))) { while (($entry = readdir($dir)) !== false) { if (!is_dir(MODULES_DIR . $path . $entry) && $entry[0] !== '.') { $package = str_replace('/', '.', $path . str_replace('.php', '', $entry)); if (!CSR::_importModule($package)) { trigger_error(sprintf('Failed import %s.', $package), E_USER_WARNING); } } } closedir($dir); } } else { if (!CSR::_importModule($package)) { trigger_error(sprintf('Failed import %s.', $package), E_USER_WARNING); } } }