Skip to content
This repository
tag: 0.6.3
Fetching contributors…

Cannot retrieve contributors at this time

file 108 lines (100 sloc) 2.153 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
<?php
/**
* Piwik - Open source web analytics
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
* @version $Id$
*
* @category Piwik
* @package Piwik
*/

/**
* Generates a tag cloud from a given data array.
* The generated tag cloud can be in PHP format, or in HTML.
*
* Inspired from Derek Harvey (www.derekharvey.co.uk)
*
* @package Piwik
* @subpackage Piwik_Visualization
*/
class Piwik_Visualization_Cloud
{
protected $wordsArray = array();
public $truncatingLimit = 30;

/*
* Assign word to array
* @param string $word
* @return string
*/
function addWord($word, $value = 1)
{
if (isset($this->wordsArray[$word]))
{
$this->wordsArray[$word] += $value;
}
else
{
$this->wordsArray[$word] = $value;
}
}

public function render()
{
$this->shuffleCloud();
$return = array();
if(empty($this->wordsArray)) {
return array();
}
$maxValue = max($this->wordsArray);
foreach ($this->wordsArray as $word => $popularity)
{
$wordTruncated = $word;
if(strlen($word) > $this->truncatingLimit)
{
$wordTruncated = substr($word, 0, $this->truncatingLimit - 3).'...';
}
$percent = ($popularity / $maxValue) * 100;
// CSS style value
$sizeRange = $this->getClassFromPercent($percent);

$return[$word] = array(
'word' => $word,
'wordTruncated' => $wordTruncated,
'value' => $popularity,
'size' => $sizeRange,
'percent' => $percent,
);
}
return $return;
}

/*
* Shuffle associated names in array
*/
protected function shuffleCloud()
{
$keys = array_keys($this->wordsArray);

shuffle($keys);

if (count($keys) && is_array($keys))
{
$tmpArray = $this->wordsArray;
$this->wordsArray = array();
foreach ($keys as $key => $value)
$this->wordsArray[$value] = $tmpArray[$value];
}
}

/*
* Get the class range using a percentage
*
* @returns int $class
*/
protected function getClassFromPercent($percent)
{
$mapping = array(95, 70, 50, 30, 15, 5, 0);
foreach($mapping as $key => $value)
{
if($percent >= $value)
{
return $key;
}
}
}
}
Something went wrong with that request. Please try again.