summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-01-12 07:39:53 +0000
committerBharat Mediratta <bharat@menalto.com>2009-01-12 07:39:53 +0000
commitb19729435cd918e03e1bd6fbb91f7281bf3e5873 (patch)
tree2e1e1723bfcb8358ac4060927c396777acff2af7
parentef303bde3e853a01e45b7734698210a40a7be812 (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.php64
-rw-r--r--core/helpers/core_block.php50
-rw-r--r--core/helpers/core_dashboard.php79
-rw-r--r--core/helpers/core_installer.php11
-rw-r--r--core/libraries/Admin_View.php2
-rw-r--r--core/views/admin_dashboard_blocks.html.php25
-rw-r--r--core/views/admin_dashboard_main.html.php2
-rw-r--r--core/views/admin_dashboard_sidebar.html.php14
-rw-r--r--modules/comment/helpers/comment_block.php11
-rw-r--r--modules/comment/helpers/comment_dashboard.php39
-rw-r--r--modules/comment/helpers/comment_installer.php4
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);
}