diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-01-12 07:39:53 +0000 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-01-12 07:39:53 +0000 |
commit | b19729435cd918e03e1bd6fbb91f7281bf3e5873 (patch) | |
tree | 2e1e1723bfcb8358ac4060927c396777acff2af7 | |
parent | ef303bde3e853a01e45b7734698210a40a7be812 (diff) |
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.
-rw-r--r-- | core/controllers/admin_dashboard.php | 64 | ||||
-rw-r--r-- | core/helpers/core_block.php | 50 | ||||
-rw-r--r-- | core/helpers/core_dashboard.php | 79 | ||||
-rw-r--r-- | core/helpers/core_installer.php | 11 | ||||
-rw-r--r-- | core/libraries/Admin_View.php | 2 | ||||
-rw-r--r-- | core/views/admin_dashboard_blocks.html.php | 25 | ||||
-rw-r--r-- | core/views/admin_dashboard_main.html.php | 2 | ||||
-rw-r--r-- | core/views/admin_dashboard_sidebar.html.php | 14 | ||||
-rw-r--r-- | modules/comment/helpers/comment_block.php | 11 | ||||
-rw-r--r-- | modules/comment/helpers/comment_dashboard.php | 39 | ||||
-rw-r--r-- | modules/comment/helpers/comment_installer.php | 4 |
11 files changed, 220 insertions, 81 deletions
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 <b>{{title}}</b> block to the main dashboard area", + array("title" => $available["$module_name:$id"]))); + } else { + $blocks["sidebar"][] = array($module_name, $id); + message::success( + t("Added <b>{{title}}</b> 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 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class core_dashboard_Core { + public static function get_list() { + return array( + "welcome" => 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 @@ +<?php defined("SYSPATH") or die("No direct script access.") ?> +<div id="gAdminDashboardBlocks"> + <table border="1"> + <tr> + <th> <?= t("Main") ?> </th> + <th> <?= t("Sidebar") ?> </th> + </tr> + + <? foreach ($available as $module_name => $block_list): ?> + <? foreach ($block_list as $id => $title): ?> + <tr> + <td> + <?= $title ?> + </td> + <td> + <option> + </option> + </td> + </tr> + <? endforeach ?> + <? endforeach ?> + </table> +</div> +<? printf("<pre>%s</pre>",print_r($available,1));flush(); ?> +<? printf("<pre>%s</pre>",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 @@ -<?php defined("SYSPATH") or die("No direct script access.") ?> -<?= $theme->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 @@ -<?php defined("SYSPATH") or die("No direct script access.") ?> -<div id="gAvailableBlocks" class="gBlock"> - <form class="gBlockContent"> - <fieldset> - <legend>Add Dashboard Blocks</legend> - <label for="">Available blocks</label> - <select name="" id=""> - <option>Somthing</option> - <option>Somthing else</option> - </select> - </fieldset> - </form> -</div> -<?= $theme->admin_sidebar_blocks() ?> diff --git a/modules/comment/helpers/comment_block.php b/modules/comment/helpers/comment_block.php index 837eebb9..c9b2dfe8 100644 --- a/modules/comment/helpers/comment_block.php +++ b/modules/comment/helpers/comment_block.php @@ -17,7 +17,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - class comment_block_Core { public static function head($theme) { $url = url::file("modules/comment/js/comment.js"); @@ -40,14 +39,4 @@ class comment_block_Core { $block->content .= comment::get_add_form($theme->item())->render("form.html"); return $block; } - - public static function admin_dashboard_blocks($theme) { - $block = new Block(); - $block->id = "gRecentComments"; - $block->title = t("Recent Comments"); - $block->content = new View("admin_block_recent_comments.html"); - $block->content->comments = - ORM::factory("comment")->orderby("created", "DESC")->limit(5)->find_all(); - return $block; - } }
\ No newline at end of file diff --git a/modules/comment/helpers/comment_dashboard.php b/modules/comment/helpers/comment_dashboard.php new file mode 100644 index 00000000..c53ecb47 --- /dev/null +++ b/modules/comment/helpers/comment_dashboard.php @@ -0,0 +1,39 @@ +<?php defined("SYSPATH") or die("No direct script access."); +/** + * Gallery - a web based photo album viewer and editor + * Copyright (C) 2000-2008 Bharat Mediratta + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + */ +class comment_dashboard_Core { + public static function get_list() { + return array("recent_comments" => t("Recent Comments")); + } + + public static function get_block($block_id) { + $block = new Block(); + switch ($block_id) { + case "recent_comments": + $block->id = "gRecentComments"; + $block->title = t("Recent Comments"); + $block->content = new View("admin_block_recent_comments.html"); + $block->content->comments = + ORM::factory("comment")->orderby("created", "DESC")->limit(5)->find_all(); + break; + } + + return $block; + } +}
\ No newline at end of file diff --git a/modules/comment/helpers/comment_installer.php b/modules/comment/helpers/comment_installer.php index 0a45839f..4b3a7259 100644 --- a/modules/comment/helpers/comment_installer.php +++ b/modules/comment/helpers/comment_installer.php @@ -49,6 +49,10 @@ class comment_installer { PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); + + $dashboard_blocks = unserialize(module::get_var("core", "dashboard_blocks")); + $dashboard_blocks["main"][] = array("comment", "recent_comments"); + module::set_var("core", "dashboard_blocks", serialize($dashboard_blocks)); module::set_var("comment", "spam_caught", 0); module::set_version("comment", 1); } |