Пример #1
0
 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);
 }
Пример #2
0
 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");
 }
Пример #3
0
 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");
 }