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.
This commit is contained in:
Bharat Mediratta
2009-01-12 07:39:53 +00:00
parent ef303bde3e
commit b19729435c
11 changed files with 220 additions and 81 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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");
}
}

View File

@@ -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) {

View File

@@ -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(); ?>

View File

@@ -1,2 +0,0 @@
<?php defined("SYSPATH") or die("No direct script access.") ?>
<?= $theme->admin_dashboard_blocks() ?>

View File

@@ -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() ?>

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}