diff options
Diffstat (limited to 'modules/ViewDataTable/Cloud.php')
-rw-r--r-- | modules/ViewDataTable/Cloud.php | 234 |
1 files changed, 83 insertions, 151 deletions
diff --git a/modules/ViewDataTable/Cloud.php b/modules/ViewDataTable/Cloud.php index 30cabb0a8a..7bc5760c40 100644 --- a/modules/ViewDataTable/Cloud.php +++ b/modules/ViewDataTable/Cloud.php @@ -1,156 +1,88 @@ <?php -// inspired from Derek Harvey (www.derekharvey.co.uk) -class Piwik_Cloud +require_once "Visualization/Cloud.php"; +class Piwik_ViewDataTable_Cloud extends Piwik_ViewDataTable { - 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(); - } + function __construct($typeViewRequested) + { + parent::__construct($typeViewRequested); + } + protected $displayLogoInsteadOfLabel = false; + function init($currentControllerAction, + $moduleNameAndMethod ) + { + parent::init($currentControllerAction, + $moduleNameAndMethod ); + $this->dataTableTemplate = 'UserSettings/templates/cloud.tpl'; + $this->disableOffsetInformation(); + $this->disableExcludeLowPopulation(); + $this->disableSearchBox(); + } + + public function main() + { + $this->setDefaultLimit( 30 ); + if($this->mainAlreadyExecuted) + { + return; + } + $this->mainAlreadyExecuted = true; + + $this->loadDataTableFromAPI(); + + // We apply a filter to the DataTable, decoding the label column (useful for keywords for example) + $filter = new Piwik_DataTable_Filter_ColumnCallbackReplace( + $this->dataTable, + 'label', + 'urldecode' + ); - 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}'> {$wordTruncated} </span>"; - } -// print( $word ."=".$percent."<br>"); - } - } - return $return; - } + + $view = new Piwik_View($this->dataTableTemplate); + $view->method = $this->method; + + $view->id = $this->getUniqIdTable(); + + + $view->javascriptVariablesToSet = $this->getJavascriptVariablesToSet(); +// echo $this->dataTable; exit; + $words = $labelDetails = array(); + foreach($this->dataTable->getRows() as $row) + { + $label = $row->getColumn('label'); + $value = $row->getColumn('nb_unique_visitors'); + // case no unique visitors + if($value === false) + { + $value = $row->getColumn('nb_visits'); + } + $words[$label] = $value; + + $logo = false; + if($this->displayLogoInsteadOfLabel) + { + $logo = $row->getDetail('logo'); + } + + $labelDetails[$label] = array( + 'logo' => $logo, + 'url' => $row->getDetail('url'), + 'hits' => $value + ); + } + $cloud = new Piwik_Visualization_Cloud($words); + $cloudValues = $cloud->render('array'); + + foreach($cloudValues as &$value) + { + $value['logoWidth'] = round(max(16, $value['percent'])); + } +// var_dump($cloudValues);exit; +// var_dump($labelDetails);exit; + $view->labelDetails = $labelDetails; + $view->cloudValues = $cloudValues; + + $this->view = $view; + } } - +?> |