From b647aa0f74e66548d6d69fc4585b89220ce60043 Mon Sep 17 00:00:00 2001 From: Felix Rabinovich Date: Fri, 9 Jan 2009 23:31:46 +0000 Subject: [PATCH] Theme Administration v. 2. Doesn't distinguish between regular and admin themes yet --- core/controllers/admin_themes.php | 19 ++++++++-- core/helpers/core_installer.php | 18 ++++++++++ core/helpers/module.php | 14 -------- core/helpers/theme.php | 55 +++++++++++++++++++++++++++++ core/hooks/load_modules.php | 2 +- core/hooks/load_themes.php | 21 +++++++++++ core/models/theme.php | 21 +++++++++++ core/views/admin_themes.html.php | 31 +++++++++++----- themes/admin_default/js/ui.init.js | 7 ++++ themes/admin_default/theme.info | 4 +++ themes/admin_default/thumbnail.png | Bin 0 -> 26946 bytes themes/default/theme.info | 4 +++ 12 files changed, 170 insertions(+), 26 deletions(-) create mode 100644 core/helpers/theme.php create mode 100644 core/hooks/load_themes.php create mode 100644 core/models/theme.php create mode 100644 themes/admin_default/theme.info create mode 100644 themes/admin_default/thumbnail.png create mode 100644 themes/default/theme.info diff --git a/core/controllers/admin_themes.php b/core/controllers/admin_themes.php index 6641221f..8943f588 100644 --- a/core/controllers/admin_themes.php +++ b/core/controllers/admin_themes.php @@ -21,12 +21,27 @@ class Admin_Themes_Controller extends Admin_Controller { public function index() { $view = new Admin_View("admin.html"); $view->content = new View("admin_themes.html"); - $themes = scandir(THEMEPATH); - $view->content->themes = array_diff($themes, array(".", "..", ".svn")); + $themeDir = scandir(THEMEPATH); + $themes = array(); + foreach ($themeDir as $theme_name) { + if (substr($theme_name, 0, 1) == ".") continue; + $file = THEMEPATH . $theme_name . "/theme.info"; + $theme_info = new ArrayObject(parse_ini_file($file), ArrayObject::ARRAY_AS_PROPS); + $details = theme::get_edit_form_admin($theme_info); + $theme_info['details'] = $details; + $themes[$theme_name] = $theme_info; + } + $view->content->themes = $themes; $view->content->active = module::get_var("core", "active_theme"); print $view; } + public function edit($theme_name) { + $file = THEMEPATH . $theme_name . "/theme.info"; + $theme_info = new ArrayObject(parse_ini_file($file), ArrayObject::ARRAY_AS_PROPS); + print theme::get_edit_form_admin($theme_info); + } + public function save() { access::verify_csrf(); $theme = $this->input->post("theme"); diff --git a/core/helpers/core_installer.php b/core/helpers/core_installer.php index 043af641..115aca20 100644 --- a/core/helpers/core_installer.php +++ b/core/helpers/core_installer.php @@ -112,6 +112,14 @@ class core_installer { UNIQUE KEY(`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + $db->query("CREATE TABLE `themes` ( + `id` int(9) NOT NULL auto_increment, + `name` varchar(64) default NULL, + `version` int(9) default NULL, + PRIMARY KEY (`id`), + UNIQUE KEY(`name`)) + ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + $db->query("CREATE TABLE `permissions` ( `id` int(9) NOT NULL auto_increment, `name` varchar(64) default NULL, @@ -216,6 +224,15 @@ class core_installer { "missing_graphics_toolkit"); } + // Instantiate default themes (regular and admin) + foreach (array("default", "admin_default") as $theme_name) { + $theme_info = new ArrayObject(parse_ini_file(THEMEPATH . $theme_name . "/theme.info"), + ArrayObject::ARRAY_AS_PROPS); + $theme = ORM::factory("theme"); + $theme->name = $theme_name; + $theme->version = $theme_info->version; + $theme->save(); + } module::set_version("core", 1); } } @@ -229,6 +246,7 @@ class core_installer { $db->query("DROP TABLE IF EXISTS `logs`;"); $db->query("DROP TABLE IF EXISTS `messages`;"); $db->query("DROP TABLE IF EXISTS `modules`;"); + $db->query("DROP TABLE IF EXISTS `themes`;"); $db->query("DROP TABLE IF EXISTS `translations_incoming`;"); $db->query("DROP TABLE IF EXISTS `permissions`;"); $db->query("DROP TABLE IF EXISTS `sessions`;"); diff --git a/core/helpers/module.php b/core/helpers/module.php index 5568ee7a..0c800786 100644 --- a/core/helpers/module.php +++ b/core/helpers/module.php @@ -183,20 +183,6 @@ class module_Core { } public static function dummy_error_handler() { } - /** - * Load the active theme. This is called at bootstrap time. We will only ever have one theme - * active for any given request. - */ - public static function load_themes() { - $modules = Kohana::config('core.modules'); - if (Router::$controller == "admin") { - array_unshift($modules, THEMEPATH . 'admin_default'); - } else { - array_unshift($modules, THEMEPATH . 'default'); - } - Kohana::config_set('core.modules', $modules); - } - /** * Run a specific event on all active modules. * @param string $name the event name diff --git a/core/helpers/theme.php b/core/helpers/theme.php new file mode 100644 index 00000000..62433898 --- /dev/null +++ b/core/helpers/theme.php @@ -0,0 +1,55 @@ +name", "Theme Parameters", "GET"); +// array("id" => "gThemeDetails")); + $group = $form->group("edit_theme")->label($theme->description); + $group->input("name")->label(t("Name"))->id("gName")->value($theme->name); + $group->submit(t("Modify Theme")); + return $form; + } + + public static function get_edit_form_content($theme_name) { + $file = THEMEPATH . $theme_name . "/theme.info"; + $theme_info = new ArrayObject(parse_ini_file($file), ArrayObject::ARRAY_AS_PROPS); + } +} + diff --git a/core/hooks/load_modules.php b/core/hooks/load_modules.php index 887582f7..1c281cdf 100644 --- a/core/hooks/load_modules.php +++ b/core/hooks/load_modules.php @@ -19,4 +19,4 @@ */ Event::add("system.ready", array("module", "load_modules")); -Event::add("system.post_routing", array("module", "load_themes")); + diff --git a/core/hooks/load_themes.php b/core/hooks/load_themes.php new file mode 100644 index 00000000..e5fc12b6 --- /dev/null +++ b/core/hooks/load_themes.php @@ -0,0 +1,21 @@ +

-

- -

-
"> + "> - - checked="checked" - /> - + + $theme): ?> + + +
+
+ + " alt="name ?>" /> +
+ description ?>
+ + name ?> +
+ + " alt="name ?>" /> +
+ description ?>
+ name ?> +
"/>
+
+
diff --git a/themes/admin_default/js/ui.init.js b/themes/admin_default/js/ui.init.js index 001c240a..0bc7f156 100644 --- a/themes/admin_default/js/ui.init.js +++ b/themes/admin_default/js/ui.init.js @@ -22,4 +22,11 @@ $(document).ready(function(){ for (var i=0; i < dialogLinks.length; i++) { $(dialogLinks[i]).bind("click", {element: dialogLinks[i]}, handleDialogEvent); }; + + $("#gThemeAdmin :radio").click(function(event) { + console.log("clicked radio " + event.target.value); + $("#gThemeDetails").load("themes/edit/" + event.target.value); + }); + + $("#gThemeDetails").load("themes/edit/default"); }); diff --git a/themes/admin_default/theme.info b/themes/admin_default/theme.info new file mode 100644 index 00000000..a96713d4 --- /dev/null +++ b/themes/admin_default/theme.info @@ -0,0 +1,4 @@ +name = Default Admin +description = Default Gallery theme to administer +version = 1 +author = Gallery Team diff --git a/themes/admin_default/thumbnail.png b/themes/admin_default/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..c0594db286c9aefc26040df8f600754baa8d96e5 GIT binary patch literal 26946 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≫h|U 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 Z1^~3xOGUigB254Q002ovPDHLkV1oAc;^hDU literal 0 HcmV?d00001 diff --git a/themes/default/theme.info b/themes/default/theme.info new file mode 100644 index 00000000..6f540473 --- /dev/null +++ b/themes/default/theme.info @@ -0,0 +1,4 @@ +name = Default +description = Default Gallery theme to view photos and albums +version = 1 +author = Gallery Team