From b19729435cd918e03e1bd6fbb91f7281bf3e5873 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 12 Jan 2009 07:39:53 +0000 Subject: Dashboard blocks are now data driven, and you can add new blocks to both the sidebar and the center content area from a dropdown at the top of the dashboard sidebar. --- core/controllers/admin_dashboard.php | 64 ++++++++++++++++++++++- core/helpers/core_block.php | 50 ------------------ core/helpers/core_dashboard.php | 79 +++++++++++++++++++++++++++++ core/helpers/core_installer.php | 11 ++++ core/libraries/Admin_View.php | 2 - core/views/admin_dashboard_blocks.html.php | 25 +++++++++ core/views/admin_dashboard_main.html.php | 2 - core/views/admin_dashboard_sidebar.html.php | 14 ----- 8 files changed, 177 insertions(+), 70 deletions(-) create mode 100644 core/helpers/core_dashboard.php create mode 100644 core/views/admin_dashboard_blocks.html.php delete mode 100644 core/views/admin_dashboard_main.html.php delete mode 100644 core/views/admin_dashboard_sidebar.html.php (limited to 'core') diff --git a/core/controllers/admin_dashboard.php b/core/controllers/admin_dashboard.php index a3e08d4f..bd0910a7 100644 --- a/core/controllers/admin_dashboard.php +++ b/core/controllers/admin_dashboard.php @@ -19,10 +19,70 @@ */ class Admin_Dashboard_Controller extends Admin_Controller { public function index() { + $blocks = unserialize(module::get_var("core", "dashboard_blocks")); + + $block_adder = new Block(); + $block_adder->title = t("Dashboard Content"); + $block_adder->content = $this->get_add_block_form(); + $view = new Admin_View("admin.html"); - $view->content = new View("admin_dashboard_main.html"); - $view->sidebar = new View("admin_dashboard_sidebar.html"); + $view->content = $this->get_blocks($blocks["main"]); + $view->sidebar = $block_adder . $this->get_blocks($blocks["sidebar"]); print $view; } + + public function add_block() { + $form = $this->get_add_block_form(); + if ($form->validate()) { + list ($module_name, $id) = explode(":", $form->add_block->id->value); + $blocks = unserialize(module::get_var("core", "dashboard_blocks")); + $available = $this->get_block_list(); + + if ($form->add_block->center->value) { + $blocks["main"][] = array($module_name, $id); + message::success( + t("Added {{title}} block to the main dashboard area", + array("title" => $available["$module_name:$id"]))); + } else { + $blocks["sidebar"][] = array($module_name, $id); + message::success( + t("Added {{title}} to the dashboard sidebar", + array("title" => $available["$module_name:$id"]))); + } + module::set_var("core", "dashboard_blocks", serialize($blocks)); + } + url::redirect("admin/dashboard"); + } + + private function get_blocks($blocks) { + $result = ""; + foreach ($blocks as $desc) { + if (method_exists("$desc[0]_dashboard", "get_block")) { + $result .= call_user_func(array("$desc[0]_dashboard", "get_block"), $desc[1]); + } + } + return $result; + } + + private function get_block_list() { + $blocks = array(); + foreach (module::installed() as $module) { + if (method_exists("{$module->name}_dashboard", "get_list")) { + foreach (call_user_func(array("{$module->name}_dashboard", "get_list")) as $id => $title) { + $blocks["{$module->name}:$id"] = $title; + } + } + } + return $blocks; + } + + public function get_add_block_form() { + $form = new Forge("admin/dashboard/add_block", "", "post"); + $group = $form->group("add_block")->label(t("Add Block")); + $group->dropdown("id")->label("Available Blocks")->options($this->get_block_list()); + $group->submit("center")->value(t("Add to center")); + $group->submit("sidebar")->value(t("Add to sidebar")); + return $form; + } } diff --git a/core/helpers/core_block.php b/core/helpers/core_block.php index 8c65b1ad..e005b67d 100644 --- a/core/helpers/core_block.php +++ b/core/helpers/core_block.php @@ -66,54 +66,4 @@ class core_block_Core { $profiler->render(); } } - - public static function admin_dashboard_blocks($theme) { - $block = new Block(); - $block->id = "gWelcome"; - $block->title = t("Welcome to Gallery3"); - $block->content = new View("admin_block_welcome.html"); - $blocks[] = $block; - - $block = new Block(); - $block->id = "gPhotoStream"; - $block->title = t("Photo Stream"); - $block->content = new View("admin_block_photo_stream.html"); - $block->content->photos = - ORM::factory("item")->where("type", "photo")->orderby("created", "desc")->find_all(10); - $blocks[] = $block; - - $block = new Block(); - $block->id = "gLogEntries"; - $block->title = t("Log Entries"); - $block->content = new View("admin_block_log_entries.html"); - $block->content->entries = ORM::factory("log")->orderby("timestamp", "DESC")->find_all(5); - $blocks[] = $block; - - return implode("\n", $blocks); - } - - public static function admin_sidebar_blocks($theme) { - $block = new Block(); - $block->id = "gStats"; - $block->title = t("Gallery Stats"); - $block->content = new View("admin_block_stats.html"); - $block->content->album_count = ORM::factory("item")->where("type", "album")->count_all(); - $block->content->photo_count = ORM::factory("item")->where("type", "photo")->count_all(); - $blocks[] = $block; - - $block = new Block(); - $block->id = "gPlatform"; - $block->title = t("Platform Information"); - $block->content = new View("admin_block_platform.html"); - $blocks[] = $block; - - $block = new Block(); - $block->id = "gProjectNews"; - $block->title = t("Gallery Project News"); - $block->content = new View("admin_block_news.html"); - $block->content->feed = feed::parse("http://gallery.menalto.com/node/feed", 3); - $blocks[] = $block; - - return implode("\n", $blocks); - } } \ No newline at end of file diff --git a/core/helpers/core_dashboard.php b/core/helpers/core_dashboard.php new file mode 100644 index 00000000..d27ed01b --- /dev/null +++ b/core/helpers/core_dashboard.php @@ -0,0 +1,79 @@ + t("Welcome to Gallery 3!"), + "photo_stream" => t("Photo Stream"), + "log_entries" => t("Log Entries"), + "stats" => t("Gallery Stats"), + "platform_info" => t("Platform Information"), + "project_news" => t("Gallery Project News")); + } + + public static function get_block($block_id) { + $block = new Block(); + switch($block_id) { + case "welcome": + $block->id = "gWelcome"; + $block->title = t("Welcome to Gallery3"); + $block->content = new View("admin_block_welcome.html"); + break; + + case "photo_stream": + $block->id = "gPhotoStream"; + $block->title = t("Photo Stream"); + $block->content = new View("admin_block_photo_stream.html"); + $block->content->photos = + ORM::factory("item")->where("type", "photo")->orderby("created", "desc")->find_all(10); + break; + + case "log_entries": + $block->id = "gLogEntries"; + $block->title = t("Log Entries"); + $block->content = new View("admin_block_log_entries.html"); + $block->content->entries = ORM::factory("log")->orderby("timestamp", "desc")->find_all(5); + break; + + case "stats": + $block->id = "gStats"; + $block->title = t("Gallery Stats"); + $block->content = new View("admin_block_stats.html"); + $block->content->album_count = ORM::factory("item")->where("type", "album")->count_all(); + $block->content->photo_count = ORM::factory("item")->where("type", "photo")->count_all(); + break; + + case "platform_info": + $block->id = "gPlatform"; + $block->title = t("Platform Information"); + $block->content = new View("admin_block_platform.html"); + break; + + case "project_news": + $block->id = "gProjectNews"; + $block->title = t("Gallery Project News"); + $block->content = new View("admin_block_news.html"); + $block->content->feed = feed::parse("http://gallery.menalto.com/node/feed", 3); + break; + } + + return $block; + } +} \ No newline at end of file diff --git a/core/helpers/core_installer.php b/core/helpers/core_installer.php index 115aca20..0da8bc3e 100644 --- a/core/helpers/core_installer.php +++ b/core/helpers/core_installer.php @@ -233,7 +233,18 @@ class core_installer { $theme->version = $theme_info->version; $theme->save(); } + + module::set_var( + "core", "dashboard_blocks", serialize( + array("sidebar" => array(array("core", "stats"), + array("core", "platform_info"), + array("core", "project_news")), + "main" => array(array("core", "welcome"), + array("core", "photo_stream"), + array("core", "log_entries"))))); + module::set_version("core", 1); + module::set_var("core", "version", "3.0"); } } diff --git a/core/libraries/Admin_View.php b/core/libraries/Admin_View.php index a6768d8b..af2d7fa8 100644 --- a/core/libraries/Admin_View.php +++ b/core/libraries/Admin_View.php @@ -85,13 +85,11 @@ class Admin_View_Core extends View { public function __call($function, $args) { switch ($function) { case "admin_credits"; - case "admin_dashboard_blocks": case "admin_footer": case "admin_header_top": case "admin_header_bottom": case "admin_page_bottom": case "admin_page_top": - case "admin_sidebar_blocks": case "admin_head": $blocks = array(); foreach (module::installed() as $module) { diff --git a/core/views/admin_dashboard_blocks.html.php b/core/views/admin_dashboard_blocks.html.php new file mode 100644 index 00000000..56a6ab07 --- /dev/null +++ b/core/views/admin_dashboard_blocks.html.php @@ -0,0 +1,25 @@ + +
+ + + + + + + $block_list): ?> + $title): ?> + + + + + + +
+ + + +
+
+%s",print_r($available,1));flush(); ?> +%s",print_r($displayed,1));flush(); ?> diff --git a/core/views/admin_dashboard_main.html.php b/core/views/admin_dashboard_main.html.php deleted file mode 100644 index cfe7bac2..00000000 --- a/core/views/admin_dashboard_main.html.php +++ /dev/null @@ -1,2 +0,0 @@ - -admin_dashboard_blocks() ?> diff --git a/core/views/admin_dashboard_sidebar.html.php b/core/views/admin_dashboard_sidebar.html.php deleted file mode 100644 index b9bce0ef..00000000 --- a/core/views/admin_dashboard_sidebar.html.php +++ /dev/null @@ -1,14 +0,0 @@ - -
-
-
- Add Dashboard Blocks - - -
-
-
-admin_sidebar_blocks() ?> -- cgit v1.2.3