qa-mouseover-layer.php 2.93 KB
Newer Older
Scott committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
<?php
/*
	Question2Answer by Gideon Greenspan and contributors
	http://www.question2answer.org/

	File: qa-plugin/mouseover-layer/qa-mouseover-layer.php
	Description: Theme layer class for mouseover layer 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.

	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
*/

Scott committed
23 24 25 26 27 28 29 30 31 32 33
class qa_html_theme_layer extends qa_html_theme_base
{
	public function q_list($q_list)
	{
		if (!empty($q_list['qs']) && qa_opt('mouseover_content_on')) { // first check it is not an empty list and the feature is turned on

			// Collect the question ids of all items in the question list (so we can do this in one DB query)

			$postids = array();
			foreach ($q_list['qs'] as $question) {
				if (isset($question['raw']['postid']))
34
					$postids[] = $question['raw']['postid'];
Scott committed
35
			}
Scott committed
36

Scott committed
37
			if (!empty($postids)) {
Scott committed
38

39
				// Retrieve the content for these questions from the database
Scott committed
40

Scott committed
41
				$maxlength = qa_opt('mouseover_content_max_len');
42
				$result = qa_db_query_sub('SELECT postid, content, format FROM ^posts WHERE postid IN (#)', $postids);
Scott committed
43
				$postinfo = qa_db_read_all_assoc($result, 'postid');
Scott committed
44

Scott committed
45
				// Get the regular expression fragment to use for blocked words and the maximum length of content to show
Scott committed
46

Scott committed
47
				$blockwordspreg = qa_get_block_words_preg();
Scott committed
48

Scott committed
49
				// Now add the popup to the title for each question
Scott committed
50

Scott committed
51 52 53 54
				foreach ($q_list['qs'] as $index => $question) {
					if (isset($postinfo[$question['raw']['postid']])) {
						$thispost = $postinfo[$question['raw']['postid']];
						$text = qa_viewer_text($thispost['content'], $thispost['format'], array('blockwordspreg' => $blockwordspreg));
55
						$text = preg_replace('/\s+/', ' ', $text);  // Remove duplicated blanks, new line characters, tabs, etc
Scott committed
56 57
						$text = qa_shorten_string_line($text, $maxlength);
						$title = isset($question['title']) ? $question['title'] : '';
58
						$q_list['qs'][$index]['title'] = $this->getHtmlTitle(qa_html($text), $title);
Scott committed
59 60 61 62 63
					}
				}
			}
		}

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
		parent::q_list($q_list); // call back through to the default function
	}

	/**
	 * Returns the needed HTML to display the tip. Depending on the theme in use, this might need to be
	 * tuned in order for the tip to be displayed properly
	 *
	 * @access private
	 * @param string $mouseOverText Text of the tip
	 * @param string $questionTitle Question title
	 * @return string HTML needed to display the tip and the question title
	 */
	private function getHtmlTitle($mouseOverText, $questionTitle)
	{
		return sprintf('<span title="%s">%s</span>', $mouseOverText, $questionTitle);
Scott committed
79
	}
Scott committed
80
}