Exemplo n.º 1
0
 /**
  * answer the tag cloud html
  * 
  * @param object Iterator $tags
  * @param optional string $viewAction The action to use when clicking on a tag. 
  *							 Usually view or viewuser
  * @param optional array $styles An array of style-strings to use for various 
  *						levels of of tag occurrances.
  * @param optional array $additionalParams An array of parameters to pass in the same namespace
  * @param optional array $additionalNamespacedParams A two-dimensional array. Keys of the top 
  *						array are the namespaces, the values of the top array are arrays 
  * 						of key/value pairs in that namespace.
  * @return string
  * @access public
  * @static
  * @since 11/7/06
  */
 static function getTagCloud($tags, $viewAction = 'view', $styles = null, $additionalParams = null, array $additionalNamespacedParams = array())
 {
     ob_start();
     if ($tags->hasNext()) {
         $harmoni = Harmoni::instance();
         $harmoni->request->startNamespace("polyphony-tags");
         $tagArray = array();
         $occArray = array();
         $nameArray = array();
         $tag = $tags->next();
         $tagArray[] = $tag;
         $nameArray[] = $tag->getValue();
         $occArray[] = $tag->getOccurances();
         $minFreq = $maxFreq = $tag->getOccurances();
         while ($tags->hasNext()) {
             $tag = $tags->next();
             $tagArray[] = $tag;
             $nameArray[] = $tag->getValue();
             $occArray[] = $tag->getOccurances();
             if ($tag->getOccurances() < $minFreq) {
                 $minFreq = $tag->getOccurances();
             }
             if ($tag->getOccurances() > $maxFreq) {
                 $maxFreq = $tag->getOccurances();
             }
         }
         if (!is_array($styles)) {
             $styles = TagAction::getDefaultStyles();
         }
         // First Try to get a meaningful Standard Deviation
         $incrementSize = TagAction::deviation($occArray);
         // If there are only two results, try this method
         if (!$incrementSize) {
             $incrementSize = ceil(($maxFreq - $minFreq) / count($styles));
         }
         // If we still don't have an increment size, use 1
         if (!$incrementSize) {
             $incrementSize = 1;
         }
         // 			printpre(TagAction::average($occArray));
         // 			printpre($incrementSize);
         array_multisort($nameArray, $tagArray);
         for ($key = 0; $key < count($tagArray); $key++) {
             $tag = $tagArray[$key];
             $group = -1;
             for ($i = $minFreq; $i <= $tag->getOccurances() && $group < count($styles) - 1; $i = $i + $incrementSize) {
                 $group++;
             }
             $group = max(0, $group);
             $style = $styles[$group];
             $url = $harmoni->request->mkURL('tags', $viewAction);
             if (RequestContext::value('agent_id')) {
                 $url->setValue('agent_id', RequestContext::value('agent_id'));
             }
             if (is_array($additionalParams)) {
                 foreach ($additionalParams as $name => $value) {
                     $url->setValue($name, $value);
                 }
             }
             foreach ($additionalNamespacedParams as $namespace => $params) {
                 $harmoni->request->startNamespace($namespace);
                 foreach ($params as $name => $value) {
                     $url->setValue($name, $value);
                 }
                 $harmoni->request->endNamespace();
             }
             $url->setValue("tag", $tag->getValue());
             print "\n\t<a rel='tag' href='" . $url->write() . "' ";
             print " title=\"";
             // 				print $group." ";
             // 				print str_replace('%2', $tag->getValue(),
             // 						str_replace('%1', $tag->getOccurances(),
             // 							_("View (%1) items tagged with '%2'")));
             print str_replace('%2', $tag->getOccurances(), str_replace('%1', $tag->getValue(), _("View items tagged with '%1'. ") . "(" . _("Frequency") . ": %2)"));
             // span styles cloudStyle, rel and frequency NOT validating
             print "\" style='" . $style . "'";
             print " class='tag_cloud_group_" . $group . " tag_frequency_" . $tag->getOccurances() . "'";
             print ">";
             print $tag->getValue() . "</a> ";
         }
         $harmoni->request->endNamespace();
     }
     return ob_get_clean();
 }