diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/controllers/admin_dashboard.php | 56 | ||||
-rw-r--r-- | core/controllers/welcome.php | 6 | ||||
-rw-r--r-- | core/helpers/block_manager.php | 29 | ||||
-rw-r--r-- | core/helpers/core_block.php | 14 | ||||
-rw-r--r-- | core/helpers/core_installer.php | 1 | ||||
-rw-r--r-- | core/views/admin_dashboard.html.php | 38 |
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> |