public function delink($cat) { // return values // 1 failed to delete if (!$this->_user->can("delentry", $cat)) { throw new CodeKBException(__METHOD__, "entry", "failedunlink", $cat); } $db = new CodeKBDatabase(); $db->start(); $db->dosql("DELETE FROM entry_cat " . "WHERE cat = {$db->number($cat)} AND " . "entry = {$db->number($this->_id)}"); // Are there any other links left? $db->dosql("SELECT entry " . "FROM entry_cat " . "WHERE entry = {$db->number($this->_id)}"); if ($db->countrows() == 0) { if (!$this->delete()) { $db->abort(); throw new CodeKBException(__METHOD__, "entry", "faileddel", $cat, 1); } } $db->commit(); if ($db->success()) { return true; } throw new CodeKBException(__METHOD__, "entry", "failedunlink", $cat); }
public function joingroup($user, $group) { // return values // 1 already in group $db = new CodeKBDatabase(); $db->start(); $db->dosql("SELECT userid " . "FROM group_user " . "WHERE userid = {$db->number($user)} AND " . "groupid = {$db->number($group)}"); if ($db->countrows() > 0) { $db->abort(); throw new CodeKBException(__METHOD__, "admin", "alreadyingroup", null, 1); } $db->dosql("INSERT INTO group_user (groupid, userid) " . "VALUES ({$db->number($group)}, " . "{$db->number($user)})"); $db->commit(); if ($db->success()) { return true; } throw new CodeKBException(__METHOD__, "admin", "failedjoin"); }
public function register($name, $pass) { // return values // 1 duplicate user $pass = sha1($pass); global $lang; if ($name == $lang['admin']['nobody']) { throw new CodeKBException(__METHOD__, "admin", "duplicateuser", $name, 1); } $db = new CodeKBDatabase(); $db->start(); $db->dosql("SELECT id " . "FROM users " . "WHERE name = '{$db->string($name)}'"); if ($db->countrows() > 0) { $db->abort(); throw new CodeKBException(__METHOD__, "admin", "duplicateuser", $name, 1); } // We need a random id $succ = false; while ($succ == false) { $id = mt_rand(); $db->dosql("SELECT id " . "FROM users " . "WHERE id = {$db->number($id)}"); if ($db->countrows() == 0) { break; } } $db->dosql("INSERT INTO users (id, name, pass) " . "VALUES ({$db->number($id)}, " . "'{$db->string($name)}', " . "'{$db->string($pass)}')"); $db->commit(); if ($db->success()) { return true; } throw new CodeKBException(__METHOD__, "admin", "failedadduser", $name); }
public function delete(&$dbobj = null, $level = 0) { // return values // 1 aborted recursion // Are we at the first recursion level? if (is_null($dbobj)) { $first = true; $db = new CodeKBDatabase(); $db->start(); $dbobj =& $db; } else { $first = false; $db =& $dbobj; } if ($this->_id == 0 || !$this->_user->can("delcat", $this)) { $db->abort(); return false; } $entries = $this->listentries(); foreach ($entries as $val) { $tmpentry = new CodeKBEntry($val['id'], $this->_user); $tmpentry->delink($this->_id); unset($tmpentry); } $db->dosql("SELECT id " . "FROM categories " . "WHERE parent = {$db->number($this->_id)}", $level); while ($val = $db->row($level)) { $subcat = new CodeKBCategory($val['id'], $this->_user); if (!$subcat->delete($db, $level + 1)) { $db->abort(); throw new CodeKBException(__METHOD__, "category", "faileddel", null, 1); } unset($subcat); } $db->dosql("DELETE FROM rights " . "WHERE category = {$db->number($this->_id)}", $level); $db->dosql("DELETE FROM categories " . "WHERE id = {$db->number($this->_id)}", $level); if ($first) { $db->commit(); } else { return $db->success(); } if ($db->success()) { return true; } $db->abort(); throw new CodeKBException(__METHOD__, "category", "faileddel"); }