X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=tags.php;h=999bffbdd838918f3bd4b32340331f256967224d;hb=f0f463e0ccf914f2464af38369a2028269761ba1;hp=4a3019ad1d30ccf2b0e93cc6079333e12ec5b720;hpb=77c283456020d1fda4bd127badfac238491edf78;p=contagged diff --git a/tags.php b/tags.php index 4a3019a..999bffb 100644 --- a/tags.php +++ b/tags.php @@ -1,7 +1,11 @@ -assign('tagcloud',tag_cloud()); @@ -12,32 +16,56 @@ function tag_cloud(){ global $conf; global $LDAP_CON; - if(!$conf[extended]) return; - - $result = ldap_queryabooks('(objectClass=contactPerson)','marker'); + global $FIELDS; + if(!$FIELDS['_marker']) return; + $result = ldap_queryabooks('(objectClass=inetOrgPerson)',$FIELDS['_marker']); $max = 0; + $min = 999999999; $tags = array(); foreach ($result as $entry){ - if(count($entry['marker'])){ - foreach($entry['marker'] as $marker){ + if(!empty($entry[$FIELDS['_marker']]) && count($entry[$FIELDS['_marker']])){ + foreach($entry[$FIELDS['_marker']] as $marker){ $marker = strtolower($marker); + if (empty($tags[$marker])) { $tags[$marker]=0; } $tags[$marker] += 1; if($tags[$marker] > $max) $max = $tags[$marker]; + if($tags[$marker] < $min) $min = $tags[$marker]; } } } ksort($tags); + tag_cloud_weight(&$tags,$min,$max,6); $out = ''; foreach($tags as $tag => $cnt){ - $pct = round($cnt * 20 / $max); // percents from 0 to 20 - - $out .= ''; + $out .= ''; $out .= htmlspecialchars($tag).' '; } return $out; } -?> + /** + * Calculate weights for a nicer tagcloud distribution + */ + function tag_cloud_weight(&$tags,$min,$max,$levels){ + // calculate tresholds + $tresholds = array(); + for($i=0; $i<=$levels; $i++){ + $tresholds[$i] = pow($max - $min + 1, $i/$levels); + } + + // assign weights + foreach($tags as $tag => $cnt){ + foreach($tresholds as $tresh => $val){ + if($cnt <= $val){ + $tags[$tag] = $tresh; + break; + } + $tags[$tag] = $levels; + } + } + } + +