diff --git a/core/controllers/admin_modules.php b/core/controllers/admin_modules.php
new file mode 100644
index 00000000..12686f87
--- /dev/null
+++ b/core/controllers/admin_modules.php
@@ -0,0 +1,27 @@
+available = module::available();
+ return $view;
+ }
+}
+
diff --git a/core/controllers/welcome.php b/core/controllers/welcome.php
index d6c40850..b253f13f 100644
--- a/core/controllers/welcome.php
+++ b/core/controllers/welcome.php
@@ -425,12 +425,13 @@ class Welcome_Controller extends Template_Controller {
$modules = module::available();
try {
foreach (module::installed() as $installed_module) {
- $modules[$installed_module->name] = $installed_module->version;
+ $modules->$installed_module->version = $installed_module->version;
}
} catch (Exception $e) {
// The database may not be installed
}
ksort($modules);
+
return $modules;
}
diff --git a/core/helpers/core_menu.php b/core/helpers/core_menu.php
index 5ed88700..a30151c7 100644
--- a/core/helpers/core_menu.php
+++ b/core/helpers/core_menu.php
@@ -78,7 +78,7 @@ class core_menu_Core {
->append(Menu::factory("link")
->id("modules")
->label(_("Modules"))
- ->url("#"))
+ ->url("admin/modules"))
->append(Menu::factory("submenu")
->id("content_menu")
->label(_("Content")))
diff --git a/core/helpers/module.php b/core/helpers/module.php
index fed01921..bb6e8dad 100644
--- a/core/helpers/module.php
+++ b/core/helpers/module.php
@@ -74,7 +74,7 @@ class module_Core {
* @param string $module_name
*/
public static function is_installed($module_name) {
- return in_array($module_name, self::$module_names);
+ return !empty(self::$module_names[$module_name]);
}
/**
@@ -88,11 +88,13 @@ class module_Core {
* Return the list of available modules.
*/
public static function available() {
- $modules = array();
- foreach (glob(MODPATH . "*/helpers/*_installer.php") as $file) {
- if (empty($modules[basename(dirname(dirname($file)))])) {
- $modules[basename(dirname(dirname($file)))] = 0;
- }
+ $modules = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
+ foreach (array_merge(array("core/module.info"), glob(MODPATH . "*/module.info")) as $file) {
+ $module_name = basename(dirname($file));
+ $modules->$module_name = new ArrayObject(parse_ini_file($file), ArrayObject::ARRAY_AS_PROPS);
+ $modules->$module_name->installed =
+ empty(self::$modules[$module_name]) ?
+ null : self::$modules[$module_name]->version;
}
return $modules;
@@ -152,8 +154,8 @@ class module_Core {
try {
foreach ($modules as $module) {
- self::$module_names[] = $module->name;
- self::$modules[] = $module;
+ self::$module_names[$module->name] = $module->name;
+ self::$modules[$module->name] = $module;
$kohana_modules[] = MODPATH . $module->name;
}
diff --git a/core/module.info b/core/module.info
new file mode 100644
index 00000000..ff7da82d
--- /dev/null
+++ b/core/module.info
@@ -0,0 +1,3 @@
+name = Gallery 3
+description = Gallery core application
+version = 1
diff --git a/core/views/admin_modules.html.php b/core/views/admin_modules.html.php
new file mode 100644
index 00000000..d0a0f613
--- /dev/null
+++ b/core/views/admin_modules.html.php
@@ -0,0 +1,19 @@
+ defined("SYSPATH") or die("No direct script access."); ?>
+
+
+
+ | = _("Installed") ?> |
+ = _("Name") ?> |
+ = _("Version") ?> |
+ = _("Description") ?> |
+
+ foreach ($available as $module_name => $module_info): ?>
+
+ | = form::checkbox($module_name, '', module::is_installed($module_name)) ?> |
+ = _($module_info["name"]) ?> |
+ = module::get_version($module_name) ?> |
+ = _($module_info["description"]) ?> |
+
+ endforeach ?>
+
+
diff --git a/core/views/welcome_syscheck.html.php b/core/views/welcome_syscheck.html.php
index e46a179b..2908f8bd 100644
--- a/core/views/welcome_syscheck.html.php
+++ b/core/views/welcome_syscheck.html.php
@@ -18,7 +18,7 @@
if (empty($errors)): ?>
- if (empty($modules['core'])): ?>
+ if (!module::is_installed("core")): ?>
Your system is ready, but Gallery is not yet installed.
@@ -32,25 +32,28 @@
| Name |
- Version |
+ Installed |
+ Available |
Action |
| core |
- = $modules["core"] ?> |
+ = module::get_version("core") ?> |
+ = module::get_version("core") ?> |
= html::anchor("welcome/uninstall/core", "reset install") ?> |
- foreach ($modules as $module_name => $module_version): ?>
+ foreach ($modules as $module_name => $info): ?>
if ($module_name == "core") continue; ?>
| = $module_name ?> |
- = empty($module_version) ? "" : $module_version ?> |
+ = $info->installed ?> |
+ = $info->version ?> |
- if (empty($module_version)): ?>
- = html::anchor("welcome/install/{$module_name}", "install") ?>
+ if ($info->installed): ?>
+ = html::anchor("welcome/uninstall/{$module_name}", "uninstall") ?>
else: ?>
- = html::anchor("welcome/uninstall/{$module_name}", "uninstall") ?>
- endif; ?>
+ = html::anchor("welcome/install/{$module_name}", "install") ?>
+ endif ?>
|
endforeach; ?>
diff --git a/modules/atom/module.info b/modules/atom/module.info
new file mode 100644
index 00000000..d4b7898b
--- /dev/null
+++ b/modules/atom/module.info
@@ -0,0 +1,3 @@
+name = Atom Publishing
+description = Enables publishing Gallery resources in ATOM format
+version = 1
diff --git a/modules/comment/module.info b/modules/comment/module.info
new file mode 100644
index 00000000..08a800a6
--- /dev/null
+++ b/modules/comment/module.info
@@ -0,0 +1,3 @@
+name = Comments
+description = Allows users and guests to leave comments on photos and albums.
+version = 1
diff --git a/modules/forge/module.info b/modules/forge/module.info
new file mode 100644
index 00000000..9d2387f3
--- /dev/null
+++ b/modules/forge/module.info
@@ -0,0 +1,3 @@
+name = Forge
+description = Form generation and validation framework
+version = 1
diff --git a/modules/gallery_unit_test/module.info b/modules/gallery_unit_test/module.info
new file mode 100644
index 00000000..e22df5fc
--- /dev/null
+++ b/modules/gallery_unit_test/module.info
@@ -0,0 +1,3 @@
+name = Gallery Unit Test
+description = Gallery extension to the unit test framework
+version = 1
diff --git a/modules/gmaps/module.info b/modules/gmaps/module.info
new file mode 100644
index 00000000..32d7570f
--- /dev/null
+++ b/modules/gmaps/module.info
@@ -0,0 +1,3 @@
+name = Google Maps
+description = Integrate with the Google Maps service
+version = 1
diff --git a/modules/info/module.info b/modules/info/module.info
new file mode 100644
index 00000000..ce03473e
--- /dev/null
+++ b/modules/info/module.info
@@ -0,0 +1,3 @@
+name = Info
+description = Display extra information about photos and albums
+version = 1
diff --git a/modules/media_rss/module.info b/modules/media_rss/module.info
new file mode 100644
index 00000000..09b12c27
--- /dev/null
+++ b/modules/media_rss/module.info
@@ -0,0 +1,3 @@
+name = Media RSS
+description = Provide a Media RSS feed for albums
+version = 1
diff --git a/modules/polar_rose/module.info b/modules/polar_rose/module.info
new file mode 100644
index 00000000..45d02421
--- /dev/null
+++ b/modules/polar_rose/module.info
@@ -0,0 +1,3 @@
+name = Polar Rose
+description = Integrate Gallery with the Polar Rose facial recognition service.
+version = 1
diff --git a/modules/rearrange/module.info b/modules/rearrange/module.info
new file mode 100644
index 00000000..67c626b5
--- /dev/null
+++ b/modules/rearrange/module.info
@@ -0,0 +1,3 @@
+name = Rearrange
+description = Allows users to rearrange photos and albums in their Gallery
+version = 1
diff --git a/modules/search/module.info b/modules/search/module.info
new file mode 100644
index 00000000..cc6f4391
--- /dev/null
+++ b/modules/search/module.info
@@ -0,0 +1,3 @@
+name = Search
+description = Allows users to view a slideshow of photos
+version = 1
diff --git a/modules/tag/module.info b/modules/tag/module.info
new file mode 100644
index 00000000..562d5c32
--- /dev/null
+++ b/modules/tag/module.info
@@ -0,0 +1,3 @@
+name = Tags
+description = Allows users to tag photos and albums
+version = 1
diff --git a/modules/unit_test/module.info b/modules/unit_test/module.info
new file mode 100644
index 00000000..6a2c1dee
--- /dev/null
+++ b/modules/unit_test/module.info
@@ -0,0 +1,3 @@
+name = Unit Test
+description = Unit test framework
+version = 1
diff --git a/modules/user/module.info b/modules/user/module.info
new file mode 100644
index 00000000..2dba517d
--- /dev/null
+++ b/modules/user/module.info
@@ -0,0 +1,3 @@
+name = Users and Groups
+description = Provides user and group management
+version = 1
diff --git a/modules/watermark/module.info b/modules/watermark/module.info
new file mode 100644
index 00000000..7f866695
--- /dev/null
+++ b/modules/watermark/module.info
@@ -0,0 +1,3 @@
+name = Watermarks
+description = Allows users to watermark their photos
+version = 1