init('tagging',dirname(__FILE__).'/db/')){ return $db; } return false; } public function replaceTags($id, $user, $tags) { $db = $this->getDB(); $db->query('BEGIN TRANSACTION'); $queries = array(array('DELETE FROM taggings WHERE pid = ? AND tagger = ?', $id, $user)); foreach ($tags as $tag) { $queries[] = array('INSERT INTO taggings (pid, tagger, tag) VALUES(?, ?, ?)', $id, $user, $tag); } foreach ($queries as $query) { if (!call_user_func_array(array($db, 'query'), $query)) { $db->query('ROLLBACK TRANSACTION'); return false; } } return $db->query('COMMIT TRANSACTION'); } public function getTags($search, $return) { $where = '1=1'; foreach($search as $k => $v) { if (strpos($v, '%') === 0 || strrpos($v, '%') === strlen($v)) { $where .= " AND $k LIKE ?"; } else { $where .= " AND $k = ?"; } } $db = $this->getDB(); $res = $db->query('SELECT ' . $return . ', COUNT(*) ' . 'FROM taggings WHERE ' . $where . ' GROUP BY ' . $return . ' ORDER BY tag', array_values($search)); $res = $db->res2arr($res); $ret = array(); foreach ($res as $v) { $ret[$v[$return]] = $v['COUNT(*)']; } return $ret; } public function getTagSearchURL($tag) { return '?do=search&id=' . $tag . '#' . str_replace(' ', '_', strtolower($this->getLang('search_section_title'))); } public function cloudData($tags, $levels = 10) { $min = min($tags); $max = max($tags); // calculate tresholds $tresholds = array(); for($i=0; $i<=$levels; $i++){ $tresholds[$i] = pow($max - $min + 1, $i/$levels) + $min - 1; } // assign weights foreach($tags as $tag => $cnt){ foreach($tresholds as $tresh => $val){ if($cnt <= $val){ $tags[$tag] = $tresh; break; } $tags[$tag] = $levels; } } return $tags; } public function html_cloud($tags, $type, $func, $wrap = true, $return = false) { $ret = ''; if ($wrap) $ret .= '