Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'modules/Visualization/Cloud.php')
-rw-r--r--modules/Visualization/Cloud.php150
1 files changed, 150 insertions, 0 deletions
diff --git a/modules/Visualization/Cloud.php b/modules/Visualization/Cloud.php
new file mode 100644
index 0000000000..efbed67cb0
--- /dev/null
+++ b/modules/Visualization/Cloud.php
@@ -0,0 +1,150 @@
+<?php
+// inspired from Derek Harvey (www.derekharvey.co.uk)
+class Piwik_Visualization_Cloud
+{
+ protected $wordsArray = array();
+ public $truncatingLimit = 30;
+ /**
+ * @param array array( word => 10, word2 => 50, word3 => 1)
+ */
+ function __construct($words = false)
+ {
+ if ($words !== false && is_array($words))
+ {
+ foreach ($words as $word => $value)
+ {
+ $this->addWord($word, $value);
+ }
+ }
+ }
+
+ /*
+ * Assign word to array
+ *
+ * @param string $word
+ * @return string
+ */
+ function addWord($word, $value = 1)
+ {
+// $word = strtolower($word);
+ if (isset($this->wordsArray[$word]))
+ {
+ $this->wordsArray[$word] += $value;
+ }
+ else
+ {
+ $this->wordsArray[$word] = $value;
+ }
+ }
+
+ /*
+ * Shuffle associated names in array
+ */
+ 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];
+ }
+ }
+
+ /*
+ * Calculate size of words array
+ */
+
+ function getCloudSize()
+ {
+ return array_sum($this->wordsArray);
+ }
+
+ /*
+ * Get the class range using a percentage
+ *
+ * @returns int $class
+ */
+
+ function getClassFromPercent($percent)
+ {
+ $mapping = array(
+ 95,
+ 70,
+ 50,
+ 30,
+ 15,
+ 5,
+ 0
+ );
+ foreach($mapping as $key => $value)
+ {
+ if($percent >= $value)
+ {
+ return $key;
+ }
+ }
+ }
+
+ /*
+ * Create the HTML code for each word and apply font size.
+ *
+ * @returns string $spans
+ */
+
+ function render($returnType = "html")
+ {
+ $this->shuffleCloud();
+
+ if($returnType == "html")
+ {
+ $return = '';
+ }
+ else
+ {
+ $return = array();
+ }
+
+ if (count($this->wordsArray) > 0)
+ {
+ $this->max = max($this->wordsArray);
+
+ $return = ($returnType == "html" ? "" : ($returnType == "array" ? array() : ""));
+ foreach ($this->wordsArray as $word => $popularity)
+ {
+
+ // truncating the word
+ $wordTruncated = $word;
+ if(strlen($word) > $this->truncatingLimit)
+ {
+ $wordTruncated = substr($word, 0, $this->truncatingLimit - 3).'...';
+ }
+
+ // computing the percentage
+ $percent = ($popularity / $this->max) * 100;
+
+ // and the CSS style value
+ $sizeRange = $this->getClassFromPercent($percent);
+
+ if ($returnType == "array")
+ {
+ $return[$word]['word'] = $word;
+ $return[$word]['wordTruncated'] = $wordTruncated;
+ $return[$word]['size'] = $sizeRange;
+ $return[$word]['percent'] = $percent;
+ }
+ else if ($returnType == "html")
+ {
+ $return .= "\n<span title='".$word."' class='word size{$sizeRange}'> &nbsp; {$wordTruncated} &nbsp; </span>";
+ }
+// print( $word ."=".$percent."<br>");
+ }
+ }
+ return $return;
+ }
+}
+