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 .= " <span onclick=\"tageditcloud_toggle_tag(this)\" class=\"tag-selected\" style='font-size: ${size}em' title='$usecount'>$h_tag</span> \n"; + if($usedfirst) { + $precloud .= " <span onclick=\"tageditcloud_toggle_tag(this)\" class=\"tag-selected\" style='font-size: ${size}em' title='$usecount'>$h_tag</span> \n"; + } else { + $counter++; + $cloud .= " <span onclick=\"tageditcloud_toggle_tag(this)\" class=\"tag-selected\" style='font-size: ${size}em' title='$usecount'>$h_tag</span> \n"; + } } else { $counter++; $cloud .= " <span onclick=\"tageditcloud_toggle_tag(this)\" style='font-size: ${size}em' title='$usecount'>$h_tag</span> \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