diff --git a/modules/tag_cloud/controllers/admin_tag_cloud.php b/modules/tag_cloud/controllers/admin_tag_cloud.php
new file mode 100644
index 00000000..7b3fa3d6
--- /dev/null
+++ b/modules/tag_cloud/controllers/admin_tag_cloud.php
@@ -0,0 +1,85 @@
+content = new View("admin_tag_cloud.html");
+ $view->content->form = $this->_get_admin_form();
+
+ print $view;
+ }
+
+ public function edit() {
+ access::verify_csrf();
+
+ $form = $this->_get_admin_form();
+ if ($form->validate()) {
+ $options = $form->tag_cloud_options;
+ $valid = true;
+ if (preg_match("/^0x[0-9A-Fa-f]{6}$/", $options->tagcolor->value) == 0) {
+ $options->tagcolor->add_error("not_valid", 1);
+ $valid = false;
+ }
+ if (preg_match("/^0x[0-9A-Fa-f]{6}$/", $options->background_color->value) == 0) {
+ $options->background_color->add_error("not_valid", 1);
+ $valid = false;
+ }
+ if ($valid) {
+ module::set_var("tag_cloud", "tagcolor", $options->tagcolor->value);
+ module::set_var("tag_cloud", "background_color", $options->background_color->value);
+ module::set_var("tag_cloud", "transparent", $options->transparent->value);
+ module::set_var("tag_cloud", "speed", $options->speed->value);
+ module::set_var("tag_cloud", "distribution", $options->distribution->value);
+ message::success(t("Tag cloud options updated successfully"));
+ url::redirect("admin/tag_cloud");
+ }
+ }
+
+ $view = new Admin_View("admin.html");
+ $view->content = new View("admin_tag_cloud.html");
+ $view->content->form = $form;
+
+ print $view;
+ }
+
+ private function _get_admin_form() {
+ $form = new Forge("admin/tag_cloud/edit", "", "post",
+ array("id" => "gTagCloudAdminForm"));
+ $group = $form->group("tag_cloud_options")->label(t("Tag Cloud Options"));
+ $group->input("tagcolor") ->label(t("Tag color"))
+ ->value(module::get_var("tag_cloud", "tagcolor", "0x333333"))
+ ->error_message("not_valid", t("The color value must be specified as '0xhhhhhh'"))
+ ->rules("required|length[8]");
+ $group->input("background_color")->label(t("Background color"))
+ ->value(module::get_var("tag_cloud", "background_color", "0xffffff"))
+ ->error_message("not_valid", t("The color value must be specified as '0xhhhhhh'"))
+ ->rules("required|length[8]");
+ $group->checkbox("transparent")->label(t("Transparent mode"))
+ ->checked(module::get_var("tag_cloud", "transparent", 0) == 1);
+ $group->input("speed")->label(t("Rotation speed"))
+ ->value(module::get_var("tag_cloud", "speed", "100"))
+ ->rules("required|valid_numeric|length[1,3]");
+ $group->checkbox("distribution")->label(t("Distribute tags evenly"))
+ ->checked(module::get_var("tag_cloud", "distribution", 1) == 1);
+ $group->submit("")->value(t("Save"));
+
+ return $form;
+ }
+}
diff --git a/modules/tag_cloud/helpers/tag_cloud_block.php b/modules/tag_cloud/helpers/tag_cloud_block.php
index 12e7ac94..16f5a50a 100644
--- a/modules/tag_cloud/helpers/tag_cloud_block.php
+++ b/modules/tag_cloud/helpers/tag_cloud_block.php
@@ -27,11 +27,36 @@ class tag_cloud_block {
$block = "";
switch ($block_id) {
case "tag_cloud_site":
+ $options = array();
+ foreach (array("tagcolor", "background_color", "transparent", "speed", "distribution")
+ as $option) {
+ $value = module::get_var("tag_cloud", $option, null);
+ if (!empty($value)) {
+ switch ($option) {
+ case "tagcolor":
+ $options["tcolor"] = $value;
+ break;
+ case "background_color":
+ $options["bgColor"] = $value;
+ break;
+ case "transparent":
+ $options["wmode"] = "\"transparent\"";
+ break;
+ case "speed":
+ $options["tspeed"] = $value;
+ break;
+ case "distribution":
+ $options["distr"] = "\"true\"";
+ break;
+ }
+ }
+ }
$block = new Block();
$block->css_id = "gTag3D";
$block->title = t("Tag Cloud");
$block->content = new View("tag_cloud_block.html");
$block->content->cloud = tag::cloud(30);
+ $block->content->options = $options;
if ($theme->item() && $theme->page_type() != "tag" && access::can("edit", $theme->item())) {
$controller = new Tags_Controller();
diff --git a/modules/tag_cloud/helpers/tag_cloud_event.php b/modules/tag_cloud/helpers/tag_cloud_event.php
new file mode 100644
index 00000000..3a2a30e7
--- /dev/null
+++ b/modules/tag_cloud/helpers/tag_cloud_event.php
@@ -0,0 +1,28 @@
+get("appearance_menu")
+ ->append(Menu::factory("link")
+ ->id("tag_cloud")
+ ->label(t("Tag Cloud"))
+ ->url(url::site("admin/tag_cloud")));
+ }
+}
diff --git a/modules/tag_cloud/js/tag_cloud.js b/modules/tag_cloud/js/tag_cloud.js
index 243bc1d6..6c268d8f 100644
--- a/modules/tag_cloud/js/tag_cloud.js
+++ b/modules/tag_cloud/js/tag_cloud.js
@@ -56,7 +56,7 @@
"&distr=" + self.options.distr + "&mode=" + self.options.mode +
"&tagcloud=" + escape("