qa-tag-cloud.php 4.41 KB
Newer Older
Gideon Greenspan committed
1 2 3 4 5 6 7
<?php

/*
	Question2Answer (c) Gideon Greenspan

	http://www.question2answer.org/

8

Gideon Greenspan committed
9 10 11 12 13 14 15 16 17
	File: qa-plugin/tag-cloud-widget/qa-tag-cloud.php
	Version: See define()s at top of qa-include/qa-base.php
	Description: Widget module class for tag cloud plugin


	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.
18

Gideon Greenspan committed
19 20 21 22 23 24 25 26 27
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

	class qa_tag_cloud {
28

29
		public function option_default($option)
Gideon Greenspan committed
30
		{
31
			if ($option === 'tag_cloud_count_tags')
Gideon Greenspan committed
32
				return 100;
33
			if ($option === 'tag_cloud_font_size')
Gideon Greenspan committed
34
				return 24;
35
			if ($option === 'tag_cloud_minimal_font_size')
36
				return 8;
37
			if ($option === 'tag_cloud_size_popular')
Gideon Greenspan committed
38 39 40
				return true;
		}

41

42
		public function admin_form()
Gideon Greenspan committed
43
		{
44
			$saved = qa_clicked('tag_cloud_save_button');
45

46 47 48 49 50
			if ($saved) {
				qa_opt('tag_cloud_count_tags', (int) qa_post_text('tag_cloud_count_tags_field'));
				qa_opt('tag_cloud_font_size', (int) qa_post_text('tag_cloud_font_size_field'));
				qa_opt('tag_cloud_minimal_font_size', (int) qa_post_text('tag_cloud_minimal_font_size_field'));
				qa_opt('tag_cloud_size_popular', (int) qa_post_text('tag_cloud_size_popular_field'));
Gideon Greenspan committed
51
			}
52

Gideon Greenspan committed
53 54
			return array(
				'ok' => $saved ? 'Tag cloud settings saved' : null,
55

Gideon Greenspan committed
56 57 58 59
				'fields' => array(
					array(
						'label' => 'Maximum tags to show:',
						'type' => 'number',
60
						'value' => (int) qa_opt('tag_cloud_count_tags'),
Gideon Greenspan committed
61
						'suffix' => 'tags',
Gideon Greenspan committed
62
						'tags' => 'name="tag_cloud_count_tags_field"',
Gideon Greenspan committed
63 64 65
					),

					array(
66
						'label' => 'Biggest font size:',
Gideon Greenspan committed
67 68
						'suffix' => 'pixels',
						'type' => 'number',
69
						'value' => (int) qa_opt('tag_cloud_font_size'),
Gideon Greenspan committed
70
						'tags' => 'name="tag_cloud_font_size_field"',
Gideon Greenspan committed
71
					),
72

73 74 75 76 77 78 79 80
					array(
						'label' => 'Smallest allowed font size:',
						'suffix' => 'pixels',
						'type' => 'number',
						'value' => (int) qa_opt('tag_cloud_minimal_font_size'),
						'tags' => 'name="tag_cloud_minimal_font_size_field"',
					),

Gideon Greenspan committed
81 82 83 84
					array(
						'label' => 'Font size represents tag popularity',
						'type' => 'checkbox',
						'value' => qa_opt('tag_cloud_size_popular'),
Gideon Greenspan committed
85
						'tags' => 'name="tag_cloud_size_popular_field"',
Gideon Greenspan committed
86 87
					),
				),
88

Gideon Greenspan committed
89 90 91
				'buttons' => array(
					array(
						'label' => 'Save Changes',
Gideon Greenspan committed
92
						'tags' => 'name="tag_cloud_save_button"',
Gideon Greenspan committed
93 94 95 96 97
					),
				),
			);
		}

98

99
		public function allow_template($template)
Gideon Greenspan committed
100
		{
101 102 103 104 105
			$allowed = array(
				'activity', 'qa', 'questions', 'hot', 'ask', 'categories', 'question',
				'tag', 'tags', 'unanswered', 'user', 'users', 'search', 'admin', 'custom',
			);
			return in_array($template, $allowed);
Gideon Greenspan committed
106 107
		}

108

109
		public function allow_region($region)
Gideon Greenspan committed
110
		{
111
			return ($region === 'side');
Gideon Greenspan committed
112
		}
113

Gideon Greenspan committed
114

115
		public function output_widget($region, $place, $themeobject, $template, $request, $qa_content)
Gideon Greenspan committed
116
		{
117
			require_once QA_INCLUDE_DIR . 'qa-db-selects.php';
118

119
			$populartags = qa_db_single_select(qa_db_popular_tags_selectspec(0, (int) qa_opt('tag_cloud_count_tags')));
120

121
			$maxcount = reset($populartags);
122

123
			$themeobject->output(sprintf('<h2 style="margin-top: 0; padding-top: 0;">%s</h2>', qa_lang_html('main/popular_tags')));
124

125
			$themeobject->output('<div style="font-size: 10px;">');
126

127 128 129 130
			$maxsize = qa_opt('tag_cloud_font_size');
			$minsize = qa_opt('tag_cloud_minimal_font_size');
			$scale = qa_opt('tag_cloud_size_popular');
			$blockwordspreg = qa_get_block_words_preg();
131

Gideon Greenspan committed
132
			foreach ($populartags as $tag => $count) {
133 134 135 136
				$matches = qa_block_words_match_all($tag, $blockwordspreg);
				if (empty($matches)) {
					if ($scale) {
						$size = number_format($maxsize * $count / $maxcount, 1);
137 138
						if ($size < $minsize)
							$size = $minsize;
139 140 141 142 143
					} else
						$size = $maxsize;

					$themeobject->output(sprintf('<a href="%s" style="font-size: %dpx; vertical-align: baseline;">%s</a>', qa_path_html('tag/' . $tag), $size, qa_html($tag)));
				}
Gideon Greenspan committed
144
			}
145

Gideon Greenspan committed
146
			$themeobject->output('</div>');
Gideon Greenspan committed
147
		}
148

Gideon Greenspan committed
149
	}
150

Gideon Greenspan committed
151 152 153 154

/*
	Omit PHP closing tag to help avoid accidental output
*/