summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/controllers/admin_dashboard.php56
-rw-r--r--core/controllers/welcome.php6
-rw-r--r--core/helpers/block_manager.php29
-rw-r--r--core/helpers/core_block.php14
-rw-r--r--core/helpers/core_installer.php1
-rw-r--r--core/views/admin_dashboard.html.php38
6 files changed, 102 insertions, 42 deletions
diff --git a/core/controllers/admin_dashboard.php b/core/controllers/admin_dashboard.php
index aeac75d8..a1393dc1 100644
--- a/core/controllers/admin_dashboard.php
+++ b/core/controllers/admin_dashboard.php
@@ -19,24 +19,19 @@
*/
class Admin_Dashboard_Controller extends Admin_Controller {
public function index() {
- $blocks = unserialize(module::get_var("core", "dashboard_blocks"));
-
- $block_adder = new Block();
- $block_adder->id = "core:block_adder";
- $block_adder->title = t("Dashboard Content");
- $block_adder->content = $this->get_add_block_form();
-
$view = new Admin_View("admin.html");
- $view->content = block_manager::get_html("dashboard_center");
- $view->sidebar = $block_adder . block_manager::get_html("dashboard_sidebar");
+ $view->content = new View("admin_dashboard.html");
+ $view->content->blocks = block_manager::get_html("dashboard_center");
+ $view->sidebar = "<div id=\"gAdminDashboardSidebar\">" .
+ $block_adder . block_manager::get_html("dashboard_sidebar") .
+ "</div>";
print $view;
}
public function add_block() {
- $form = $this->get_add_block_form();
+ $form = core_block::get_add_block_form();
if ($form->validate()) {
list ($module_name, $block_id) = explode(":", $form->add_block->id->value);
- $blocks = block_manager::get_active();
$available = block_manager::get_available();
if ($form->add_block->center->value) {
@@ -56,13 +51,15 @@ class Admin_Dashboard_Controller extends Admin_Controller {
public function remove_block($id) {
access::verify_csrf();
- $blocks = block_manager::get_active();
- if (array_key_exists($id, $blocks["sidebar"])) {
- $deleted = $blocks["sidebar"][$id];
+ $blocks_center = block_manager::get_active("dashboard_center");
+ $blocks_sidebar = block_manager::get_active("dashboard_sidebar");
+
+ if (array_key_exists($id, $blocks_sidebar)) {
+ $deleted = $blocks_sidebar[$id];
block_manager::remove("dashboard_sidebar", $id);
- } else if (array_key_exists($id, $blocks["main"])) {
- $deleted = $blocks["main"][$id];
- block_manager::remove("dashboard_main", $id);
+ } else if (array_key_exists($id, $blocks_center)) {
+ $deleted = $blocks_center[$id];
+ block_manager::remove("dashboard_center", $id);
}
if (!empty($deleted)) {
@@ -74,12 +71,23 @@ class Admin_Dashboard_Controller extends Admin_Controller {
url::redirect("admin");
}
- 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(block_manager::get_available());
- $group->submit("center")->value(t("Add to center"));
- $group->submit("sidebar")->value(t("Add to sidebar"));
- return $form;
+ public function reorder() {
+ access::verify_csrf();
+ $active_set = array();
+ foreach (array("dashboard_sidebar", "dashboard_center") as $location) {
+ foreach (block_manager::get_active($location) as $id => $info) {
+ $active_set[$id] = $info;
+ }
+ }
+
+ foreach (array("dashboard_sidebar", "dashboard_center") as $location) {
+ $new_blocks = array();
+ foreach ($this->input->get($location, array()) as $id) {
+ $new_blocks[$id] = $active_set[$id];
+ }
+ block_manager::set_active($location, $new_blocks);
+ }
+
+ $this->_force_block_adder();
}
}
diff --git a/core/controllers/welcome.php b/core/controllers/welcome.php
index af9932d4..d957e335 100644
--- a/core/controllers/welcome.php
+++ b/core/controllers/welcome.php
@@ -507,12 +507,12 @@ class Welcome_Controller extends Template_Controller {
if ($entry == "." || $entry == "..") {
continue;
}
- if (is_dir(VARPATH . $entry) & $entry != "g3_installer") {
+ if (is_dir(VARPATH . $entry) & $entry != "g3_installer") {
$sub_dirs[] = "\"$entry\"";
}
}
$var_dir->close();
-
+
$init_g3 = array_merge($init_g3, array(
"foreach (array(" . implode(", ", $sub_dirs) . ") as \$dir) {",
" if (!@mkdir(\"var/\$dir\")) {",
@@ -528,7 +528,7 @@ class Welcome_Controller extends Template_Controller {
}
file_put_contents("$install_data/init_var.php", implode("\n", $init_g3));
-
+
// Dump the database tables and data.
$dbconfig = Kohana::config('database.default');
$dbconfig = $dbconfig["connection"];
diff --git a/core/helpers/block_manager.php b/core/helpers/block_manager.php
index d7a2aca9..724f1927 100644
--- a/core/helpers/block_manager.php
+++ b/core/helpers/block_manager.php
@@ -18,20 +18,24 @@
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
class block_manager_Core {
- static function get_active() {
- return unserialize(module::get_var("core", "blocks", "a:0:{}"));
+ static function get_active($location) {
+ return unserialize(module::get_var("core", "blocks_$location", "a:0:{}"));
+ }
+
+ static function set_active($location, $blocks) {
+ module::set_var("core", "blocks_$location", serialize($blocks));
}
static function add($location, $module_name, $block_id) {
- $blocks = self::get_active();
- $blocks[$location][rand()] = array($module_name, $block_id);
- module::set_var("core", "blocks", serialize($blocks));
+ $blocks = self::get_active($location);
+ $blocks[rand()] = array($module_name, $block_id);
+ self::set_active($location, $blocks);
}
static function remove($location, $block_id) {
- $blocks = self::get_active();
- unset($blocks[$location][$block_id]);
- module::set_var("core", "blocks", serialize($blocks));
+ $blocks = self::get_active($location);
+ unset($blocks[$block_id]);
+ self::set_active($location, $blocks);
}
static function get_available() {
@@ -49,12 +53,8 @@ class block_manager_Core {
}
static function get_html($location) {
- $active = self::get_active();
- if (empty($active[$location])) {
- return;
- }
-
- foreach ($active[$location] as $id => $desc) {
+ $active = self::get_active($location);
+ foreach ($active as $id => $desc) {
if (method_exists("$desc[0]_block", "get")) {
$block = call_user_func(array("$desc[0]_block", "get"), $desc[1]);
$block->id = $id;
@@ -64,4 +64,3 @@ class block_manager_Core {
return $result;
}
}
-
diff --git a/core/helpers/core_block.php b/core/helpers/core_block.php
index 74b81d52..bfc55f09 100644
--- a/core/helpers/core_block.php
+++ b/core/helpers/core_block.php
@@ -72,8 +72,22 @@ class core_block_Core {
$block->content = new View("admin_block_news.html");
$block->content->feed = feed::parse("http://gallery.menalto.com/node/feed", 3);
break;
+
+ case "block_adder":
+ $block->css_id = "gBlockAdder";
+ $block->title = t("Dashboard Content");
+ $block->content = self::get_add_block_form();
}
return $block;
}
+
+ 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(block_manager::get_available());
+ $group->submit("center")->value(t("Add to center"));
+ $group->submit("sidebar")->value(t("Add to sidebar"));
+ return $form;
+ }
} \ No newline at end of file
diff --git a/core/helpers/core_installer.php b/core/helpers/core_installer.php
index c7d32963..bf56ca55 100644
--- a/core/helpers/core_installer.php
+++ b/core/helpers/core_installer.php
@@ -234,6 +234,7 @@ class core_installer {
$theme->save();
}
+ block_manager::add("dashboard_sidebar", "core", "block_adder");
block_manager::add("dashboard_sidebar", "core", "stats");
block_manager::add("dashboard_sidebar", "core", "platform_info");
block_manager::add("dashboard_sidebar", "core", "project_news");
diff --git a/core/views/admin_dashboard.html.php b/core/views/admin_dashboard.html.php
new file mode 100644
index 00000000..05fec643
--- /dev/null
+++ b/core/views/admin_dashboard.html.php
@@ -0,0 +1,38 @@
+<?php defined("SYSPATH") or die("No direct script access.") ?>
+<script type="text/javascript">
+ update_blocks = function() {
+ $.get("<?= url::site("admin/dashboard/reorder") ?>",
+ {"csrf": "<?= access::csrf_token() ?>",
+ "dashboard_center[]": $("#gAdminDashboard").sortable(
+ "toArray", {attribute: "block_id"}),
+ "dashboard_sidebar[]": $("#gAdminDashboardSidebar").sortable(
+ "toArray", {attribute: "block_id"})});
+ };
+
+ $(document).ready(function(){
+ $("#gAdminDashboard .gBlock *:first").addClass("gDraggable");
+ $("#gAdminDashboard").sortable({
+ connectWith: ["#gAdminDashboardSidebar"],
+ containment: "document",
+ cursor: "move",
+ handle: $("div:first"),
+ opacity: 0.6,
+ placeholder: "gDropTarget",
+ stop: update_blocks
+ });
+
+ $("#gAdminDashboardSidebar .gBlock *:first").addClass("gDraggable");
+ $("#gAdminDashboardSidebar").sortable({
+ connectWith: ["#gAdminDashboard"],
+ containment: "document",
+ cursor: "move",
+ handle: $("div:first"),
+ opacity: 0.6,
+ placeholder: "gDropTarget",
+ stop: update_blocks
+ });
+ });
+</script>
+<div id="gAdminDashboard">
+ <?= $blocks ?>
+</div>