From 323f0953bc4d836118de081457fce46cab9ea348 Mon Sep 17 00:00:00 2001
From: atomicdryad <g1dev@fnord.to>
Date: Wed, 22 Dec 2010 18:59:44 -0600
Subject: [PATCH] TagEditCloud: Now with options.

---
 contrib/tag_editcloud/main.php | 62 ++++++++++++++++++++++++++--------
 1 file changed, 48 insertions(+), 14 deletions(-)

diff --git a/contrib/tag_editcloud/main.php b/contrib/tag_editcloud/main.php
index a75cb4fe..93803c18 100644
--- a/contrib/tag_editcloud/main.php
+++ b/contrib/tag_editcloud/main.php
@@ -20,17 +20,47 @@ class TagEditCloud implements Extension {
                 //if(is_null($this->theme)) $this->theme = get_theme_object($this);
 
 		if($event instanceof ImageInfoBoxBuildingEvent) {
-			if($this->can_tag($event->image)) {
-				$cfgstub_sortbyname=false;	// FIXME
-				$cfgstub_showtop=40;		// Derp
-				$cfgstub_minuse=2;		// Derp
-				if($cfgstub_sortbyname) {
-					$event->add_part($this->build_tag_map($event->image,$cfgstub_minuse,false),40);
-				} else {
-					$event->add_part($this->build_tag_map($event->image,$cfgstub_showtop,4096),40);
+			if(!$config->get_bool("tageditcloud_disable")) {
+				if($this->can_tag($event->image)) {
+					if(!$cfg_minusage=$config->get_int("tageditcloud_minusage")) $cfg_minusage=2;
+					if(!$cfg_defcount=$config->get_int("tageditcloud_defcount")) $cfg_defcount=40;
+					if(!$cfg_maxcount=$config->get_int("tageditcloud_maxcount")) $cfg_maxcount=4096;
+					if($config->get_string("tageditcloud_sort") != "p") {
+						$event->add_part($this->build_tag_map($event->image,$cfg_minusage,false),40);
+					} else {
+						$event->add_part($this->build_tag_map($event->image,$cfg_defcount,$cfg_maxcount),40);
+					}
 				}
 			}
 		}
+		
+		if($event instanceof InitExtEvent) {
+			$config->set_default_bool("tageditcloud_disable",false);
+			$config->set_default_bool("tageditcloud_usedfirst",true);
+			$config->set_default_string("tageditcloud_sort",'a');
+			$config->set_default_int("tageditcloud_minusage",2);
+			$config->set_default_int("tageditcloud_defcount",40);
+			$config->set_default_int("tageditcloud_maxcount",4096);
+		}
+
+		if($event instanceof SetupBuildingEvent) {
+			$sort_by = array('Alphabetical'=>'a','Popularity'=>'p');
+
+			$sb = new SetupBlock("Tag Edit Cloud");
+			$sb->add_bool_option("tageditcloud_disable", "Disable Tag Selection Cloud: ");
+			$sb->add_choice_option("tageditcloud_sort", $sort_by, "<br>Sort the tags by:");
+			$sb->add_bool_option("tageditcloud_usedfirst","<br>Always show used tags first: ");
+			$sb->add_label("<br><b>Alpha sort</b>:<br>Only show tags used at least ");
+			$sb->add_int_option("tageditcloud_minusage");
+			$sb->add_label(" times.<br><b>Popularity sort</b>:<br>Show tags used ");
+			$sb->add_int_option("tageditcloud_defcount");
+			$sb->add_label(" times by default.<br>Show a maximum of ");
+			$sb->add_int_option("tageditcloud_maxcount");
+			$sb->add_label(" tags.");
+
+			$event->panel->add_block($sb);
+		}
+
 	}
 
         private function tag_link($tag) {
@@ -43,18 +73,19 @@ class TagEditCloud implements Extension {
 
 	private function build_tag_map($image,$defcount,$maxcount) { // 
 
-		global $database;
+		global $database,$config;
 		$html="";$cloud="";$precloud="";
 		$itags=Array();
 		$tags_min=1;
 		$alphasort=false;
+		$usedfirst=$config->get_bool("tageditcloud_usedfirst");
+
 		if(!is_int($defcount)) $defcount=20;
 		if(!is_int($maxcount)) {	// Derp this is pretty cheesy.
 			$maxcount=4096;		// Hurrrr
 			$tags_min=$defcount;
 			$alphasort=true;
 		}
-
 		if ((gettype($image) == 'object') && (isset($image->tag_array)) && ($itags=$image->tag_array)) $itags=array_fill_keys(array_values($itags),true);
 
 		$result = $database->execute(" SELECT tag, FLOOR(LOG(2.7, LOG(2.7, count - ? + 1)+1)*1.5*100)/100 AS scaled, count
@@ -75,9 +106,14 @@ class TagEditCloud implements Extension {
 			$usecount=$row['count'];
 			$link = $this->tag_link($row['tag']);
 			if($size<0.5) $size = 0.5;
+			
 			if(isset($itags[$row['tag']])) {
-//				if($size<0.75) $size = 0.75;
-				$precloud .= "&nbsp;<span onclick=\"tageditcloud_toggle_tag(this)\" class=\"tag-selected\" style='font-size: ${size}em' title='$usecount'>$h_tag</span>&nbsp;\n";
+				if($usedfirst) {
+					$precloud .= "&nbsp;<span onclick=\"tageditcloud_toggle_tag(this)\" class=\"tag-selected\" style='font-size: ${size}em' title='$usecount'>$h_tag</span>&nbsp;\n";
+				} else {
+					$counter++;
+					$cloud .= "&nbsp;<span onclick=\"tageditcloud_toggle_tag(this)\" class=\"tag-selected\" style='font-size: ${size}em' title='$usecount'>$h_tag</span>&nbsp;\n";
+				}
 			} else {
 				$counter++;
 				$cloud .= "&nbsp;<span onclick=\"tageditcloud_toggle_tag(this)\" style='font-size: ${size}em' title='$usecount'>$h_tag</span>&nbsp;\n";
@@ -86,8 +122,6 @@ class TagEditCloud implements Extension {
 		if ($precloud != '') $html .= "<div id=\"tagcloud_set\">$precloud</div>";
 		$html .="<div id=\"tagcloud_unset\">$cloud</div>";
 		$rem=count($tag_data)-$defcount;
-//		$script = "";
-//		$html.=$script;
 		if((!$alphasort)&&($counter>=$defcount)) $html .= "</div><br>[<span onclick=\"tageditcloud_toggle_extra('tagcloud_extra',this);\" style=\"color: #0000EF; font-weight:bold;\">show $rem more tags</span>]";
 //		$html.='<pre>'.var_export($itags,true).'</pre>';
 		return "<div id=\"tageditcloud\" class=\"tageditcloud\">$html</div>"; // FIXME: stupidasallhell