lang_translation = $lang; } } } function getDB() { static $db; if (!is_null($db)) { return $db; } $db = plugin_load('helper', 'sqlite'); if (is_null($db)) { msg('The labeled plugin needs the sqlite plugin', -1); return false; } if($db->init('labeled', dirname(__FILE__).'/db/')){ return $db; } return false; } public function tpl_labels() { global $ID; $all = $this->getAllLabels(); if (count($all) === 0) return false; $current = $this->getLabels($ID); $result = ''; $result .= '
'; return $result; } /** * parse a string of tags. * @param string $tags * @return array single tags as array. * FIXME can be deleted? */ public function parseLabels($labels) { $labels = explode(',', $labels); foreach ($lables as &$label) { $label = trim($label); } return $labels; } public function setLabels($labels, $id) { if (auth_quickaclcheck($id) < AUTH_EDIT) { return false; } $this->deleteLabels($id); $db = $this->getDb(); foreach ($labels as $label) { if (!$this->labelExists($label)) continue; $db->query('INSERT INTO labeled (id, label) VALUES (?,?)', $id, $label); } } public function changeColor($label, $newColor) { global $INFO; if (!$INFO['isadmin']) return; $db = $this->getDb(); $db->query('UPDATE labels SET color=? WHERE name=?', $newColor, $label); } /** * remove a label form a page * @param string $label label to remove * @param string $id wiki page id */ public function removeLabel($label, $id) { if (auth_quickaclcheck($id) < AUTH_EDIT) { return false; } $db = $this->getDb(); $db->query('DELETE FROM labeled WHERE id=? AND label=?', $id, $label); } /** * delete all labels from a wikipage * @param string $id the wikipage * @return void */ private function deleteLabels($id) { if (auth_quickaclcheck($id) < AUTH_EDIT) { return false; } $db = $this->getDb(); $db->query('DELETE FROM labeled WHERE id=?', $id); } /** * add a single label to a wiki page * @param string $label * @param string $id wiki page * @return void */ public function addLabel($label, $id) { $labels = $this->getLabels($id); $labels[] = $label; $labels = array_unique($labels); $this->setLabels($labels, $id); } /** * rename a label * @param string $label old label name * @param string $newLabel new label name */ public function renameLabel($label, $newName) { global $INFO; if (!$INFO['isadmin']) return; if (!$this->labelExists($label)) return; $db = $this->getDb(); $db->query('UPDATE labels set name=? WHERE name=?', $newName, $label); $db->query('UPDATE labeled set label=? WHERE label=?', $newName, $label); } /** * get all labels * @param string $id from wiki page id * @return array list of all labels */ public function getLabels($id) { if (auth_quickaclcheck($id) < AUTH_READ) { return false; } $db = $this->getDb(); $res = $db->query('SELECT label FROM labeled WHERE id=?', $id); $labels = $db->res2arr($res); $result = array(); foreach ($labels as $label) { $result[] = $label['label']; } return $result; } /** * check if a label exists * @param string $label label to check * @return boolean true if exists */ public function labelExists($label) { $labels = $this->getAllLabels(); return isset($labels[$label]); } /** * @return array get an array of all available labels * @param boolean $reload on true force a reload */ public function getAllLabels($reload = false) { if ($this->labels !== null && !$reload) return $this->labels; $db = $this->getDb(); $res = $db->query('SELECT name, color, namespace, ordernr FROM labels ORDER BY ordernr'); $labels = $db->res2arr($res); $this->labels = array(); foreach ($labels as $label) { $this->labels[$label['name']] = $label; } return $this->labels; } /** * Change the order of the labels * * @param string $name label name to change * @param float $order ordering number */ public function changeOrder($name, $order) { global $INFO; if (!$INFO['isadmin']) return; if ($order === '') $order = 2147483647; $db = $this->getDb(); $labels = $this->getAllLabels(true); $labels[$name]['ordernr'] = $order; uasort($labels, array($this, 'cmpOrder')); $keys = array_keys($labels); $kc = count($keys); for ($i=0; $i<$kc; $i++) { if ($labels[$keys[$i]]['ordernr'] == ($i+1)) { continue; } $labels[$keys[$i]]['ordernr'] = $i+1; $db->query('UPDATE labels SET ordernr=? WHERE name=?', ($i+1), $keys[$i]); } $this->getAllLabels(true); } public function cmpOrder($a, $b) { if ($a['ordernr'] == $b['ordernr']) return 0; return ($a['ordernr'] > $b['ordernr']) ? 1 : -1; } /** * create a new label * @param string $name new name of the label * @param string $color hex color of the label * @param boolean $order Ordering number * @param string $ns namespace filter for the label */ public function createLabel($name, $color, $order = false, $ns = '') { global $INFO; if (!$INFO['isadmin']) return; if ($this->labelExists($name)) return; $ns = cleanID($ns); $db = $this->getDb(); $db->query('INSERT INTO labels (name, color, namespace) VALUES (?,?,?)', $name, $color, $ns); } /** * delete a label (and all uses of it) * @param string $label label to delete */ public function deleteLabel($label) { global $INFO; if (!$INFO['isadmin']) return; $db = $this->getDb(); $db->query('DELETE FROM labels WHERE name=?', $label); $db->query('DELETE FROM labeled WHERE label=?', $label); } }