Pulled out SQL statements into separate lines to allow for easier debugability, fixed up the documentation, prettied up the code to Campware coding conventions.

This commit is contained in:
paul 2006-09-01 09:27:29 +00:00
parent 3a90898e3b
commit 8b40272996

View file

@ -46,11 +46,12 @@ define('ALIBERR_BADSMEMB', 21);
class Subjects extends ObjClasses { class Subjects extends ObjClasses {
var $subjTable; var $subjTable;
var $smembTable; var $smembTable;
/** /**
* Constructor * Constructor
* *
* @param dbc object * @param object $dbc
* @param config array * @param array $config
* @return this * @return this
*/ */
function Subjects(&$dbc, $config) function Subjects(&$dbc, $config)
@ -58,117 +59,146 @@ class Subjects extends ObjClasses{
parent::ObjClasses($dbc, $config); parent::ObjClasses($dbc, $config);
$this->subjTable = $config['tblNamePrefix'].'subjs'; $this->subjTable = $config['tblNamePrefix'].'subjs';
$this->smembTable = $config['tblNamePrefix'].'smemb'; $this->smembTable = $config['tblNamePrefix'].'smemb';
} } // constructor
/* ======================================================= public methods */ /* ======================================================= public methods */
/** /**
* Add new subject * Add new subject
* *
* @param login string * @param string $login
* @param pass string, optional * @param string $pass, optional
* @param realname string, optional * @param string $realname, optional
* @param passenc boolean, optional, password already encrypted if true * @param boolean $passenc, optional, password already encrypted if true
* @return int/err * @return int/err
*/ */
function addSubj($login, $pass=NULL, $realname='', $passenc=FALSE) function addSubj($login, $pass=NULL, $realname='', $passenc=FALSE)
{ {
if(!$login) return $this->dbc->raiseError( if(!$login) {
get_class($this)."::addSubj: empty login" return $this->dbc->raiseError(get_class($this)."::addSubj: empty login");
); }
$id = $this->dbc->nextId("{$this->subjTable}_id_seq"); $id = $this->dbc->nextId("{$this->subjTable}_id_seq");
if(PEAR::isError($id)) return $id; if (PEAR::isError($id)) {
if(!is_null($pass) && !$passenc) $pass = md5($pass);
$r = $this->dbc->query("
INSERT INTO {$this->subjTable} (id, login, pass, type, realname)
VALUES ($id, '$login', ".
(is_null($pass) ? "'!', 'G'" : "'$pass', 'U'").",
'$realname')
");
if(PEAR::isError($r)) return $r;
return $id; return $id;
} }
if (!is_null($pass) && !$passenc) {
$pass = md5($pass);
}
$sql = "INSERT INTO {$this->subjTable} (id, login, pass, type, realname)
VALUES ($id, '$login', ".
(is_null($pass) ? "'!', 'G'" : "'$pass', 'U'").",
'$realname')";
$r = $this->dbc->query($sql);
if (PEAR::isError($r)) {
return $r;
}
return $id;
} // fn addSubj
/** /**
* Remove subject by uid or by login * Remove subject by uid or by login
* *
* @param login string * @param string $login
* @param uid int, optional, default: null * @param int $uid, optional, default: null
* @return boolean/err * @return boolean/err
*/ */
function removeSubj($login, $uid=NULL) function removeSubj($login, $uid=NULL)
{ {
if(is_null($uid)) $uid = $this->getSubjId($login); if (is_null($uid)) {
if(PEAR::isError($uid)) return $uid; $uid = $this->getSubjId($login);
$r = $this->dbc->query("DELETE FROM {$this->smembTable}
WHERE (uid='$uid' OR gid='$uid') AND mid is null");
if(PEAR::isError($r)) return $r;
$r = $this->dbc->query("DELETE FROM {$this->subjTable}
WHERE login='$login'");
if(PEAR::isError($r)) return $r;
return $this->_rebuildRels();
} }
if (PEAR::isError($uid)) {
return $uid;
}
$sql = "DELETE FROM {$this->smembTable}
WHERE (uid='$uid' OR gid='$uid') AND mid is null";
$r = $this->dbc->query($sql);
if (PEAR::isError($r)) {
return $r;
}
$sql2 = "DELETE FROM {$this->subjTable}
WHERE login='$login'";
$r = $this->dbc->query($sql2);
if (PEAR::isError($r)) {
return $r;
}
return $this->_rebuildRels();
} // fn removeSubj
/** /**
* Check login and password * Check login and password
* *
* @param login string * @param string $login
* @param pass string, optional * @param string $pass, optional
* @return boolean/int/err * @return boolean/int/err
*/ */
function authenticate($login, $pass='') function authenticate($login, $pass='')
{ {
$cpass = md5($pass); $cpass = md5($pass);
$id = $this->dbc->getOne(" $sql = "SELECT id FROM {$this->subjTable}
SELECT id FROM {$this->subjTable} WHERE login='$login' AND pass='$cpass' AND type='U'";
WHERE login='$login' AND pass='$cpass' AND type='U' $id = $this->dbc->getOne($sql);
"); if (PEAR::isError($id)) {
if(PEAR::isError($id)) return $id; return $id;
return (is_null($id) ? FALSE : $id);
} }
return (is_null($id) ? FALSE : $id);
} // fn authenticate
/** /**
* Set lastlogin or lastfail timestamp * Set lastlogin or lastfail timestamp
* *
* @param login string * @param string $login
* @param failed boolean, true=> set lastfail, false=> set lastlogin * @param boolean $failed, true=> set lastfail, false=> set lastlogin
* @return boolean/int/err * @return boolean/int/err
*/ */
function setTimeStamp($login, $failed=FALSE) function setTimeStamp($login, $failed=FALSE)
{ {
$fld = ($failed ? 'lastfail' : 'lastlogin'); $fld = ($failed ? 'lastfail' : 'lastlogin');
$r = $this->dbc->query(" $sql = "UPDATE {$this->subjTable} SET $fld=now()
UPDATE {$this->subjTable} SET $fld=now() WHERE login='$login'";
WHERE login='$login' $r = $this->dbc->query($sql);
"); if (PEAR::isError($r)) {
if(PEAR::isError($r)) return $r; return $r;
return TRUE;
} }
return TRUE;
} // fn setTimeStamp
/** /**
* Change user password * Change user password
* *
* @param login string * @param string $login
* @param oldpass string, old password (optional for 'superuser mode') * @param string $oldpass, old password (optional for 'superuser mode')
* @param pass string, optional * @param string $pass, optional
* @param passenc boolean, optional, password already encrypted if true * @param boolean $passenc, optional, password already encrypted if true
* @return boolean/err * @return boolean/err
*/ */
function passwd($login, $oldpass=null, $pass='', $passenc=FALSE) function passwd($login, $oldpass=null, $pass='', $passenc=FALSE)
{ {
if(!$passenc) $cpass = md5($pass); if (!$passenc) {
else $cpass = $pass; $cpass = md5($pass);
} else {
$cpass = $pass;
}
if (!is_null($oldpass)) { if (!is_null($oldpass)) {
$oldcpass = md5($oldpass); $oldcpass = md5($oldpass);
$oldpCond = "AND pass='$oldcpass'"; $oldpCond = "AND pass='$oldcpass'";
}else{ $oldpCond = ''; } } else {
$r = $this->dbc->query(" $oldpCond = '';
UPDATE {$this->subjTable} SET pass='$cpass'
WHERE login='$login' $oldpCond AND type='U'
");
if(PEAR::isError($r)) return $r;
return TRUE;
} }
$sql = "UPDATE {$this->subjTable} SET pass='$cpass'
WHERE login='$login' $oldpCond AND type='U'";
$r = $this->dbc->query($sql);
if (PEAR::isError($r)) {
return $r;
}
return TRUE;
} // fn passwd
/* --------------------------------------------------------------- groups */ /* --------------------------------------------------------------- groups */
@ -176,90 +206,131 @@ class Subjects extends ObjClasses{
* Add {login} and direct/indirect members to {gname} and to groups, * Add {login} and direct/indirect members to {gname} and to groups,
* where {gname} is [in]direct member * where {gname} is [in]direct member
* *
* @param login string * @param string $login
* @param gname string * @param string $gname
* @return int/err * @return int/err
*/ */
function addSubj2Gr($login, $gname) function addSubj2Gr($login, $gname)
{ {
$uid = $this->getSubjId($login); if(PEAR::isError($uid)) return $uid; $uid = $this->getSubjId($login);
$gid = $this->getSubjId($gname); if(PEAR::isError($gid)) return $gid; if (PEAR::isError($uid)) {
$isgr = $this->isGroup($gid); if(PEAR::isError($isgr)) return $isgr; return $uid;
if(!$isgr) return PEAR::raiseError( }
"Subjects::addSubj2Gr: Not a group ($gname)", ALIBERR_NOTGR $gid = $this->getSubjId($gname);
); if (PEAR::isError($gid)) {
return $gid;
}
$isgr = $this->isGroup($gid);
if (PEAR::isError($isgr)) {
return $isgr;
}
if (!$isgr) {
return PEAR::raiseError("Subjects::addSubj2Gr: Not a group ($gname)", ALIBERR_NOTGR);
}
// add subject and all [in]direct members to group $gname: // add subject and all [in]direct members to group $gname:
$mid = $this->_plainAddSubj2Gr($uid, $gid); $mid = $this->_plainAddSubj2Gr($uid, $gid);
if(PEAR::isError($mid)) return $mid; if (PEAR::isError($mid)) {
return $mid;
}
// add it to all groups where $gname is [in]direct member: // add it to all groups where $gname is [in]direct member:
$marr = $this->_listRMemb($gid); if(PEAR::isError($marr)) return $marr; $marr = $this->_listRMemb($gid);
if (PEAR::isError($marr)) {
return $marr;
}
foreach($marr as $k=>$v){ foreach($marr as $k=>$v){
$r = $this->_plainAddSubj2Gr( $r = $this->_plainAddSubj2Gr(
$uid, $v['gid'], intval($v['level'])+1, $v['id']); $uid, $v['gid'], intval($v['level'])+1, $v['id']);
if(PEAR::isError($r)) return $r; if (PEAR::isError($r)) {
return $r;
}
} }
return $mid; return $mid;
} } // fn addSubj2Gr
/** /**
* Remove subject from group * Remove subject from group
* *
* @param login string * @param string $login
* @param gname string * @param string $gname
* @return boolean/err * @return boolean/err
*/ */
function removeSubjFromGr($login, $gname) function removeSubjFromGr($login, $gname)
{ {
$uid = $this->getSubjId($login); if(PEAR::isError($uid)) return $uid; $uid = $this->getSubjId($login);
$gid = $this->getSubjId($gname); if(PEAR::isError($gid)) return $gid; if (PEAR::isError($uid)) {
$mid = $this->dbc->getOne($q = "SELECT id FROM {$this->smembTable} return $uid;
WHERE uid='$uid' AND gid='$gid' AND mid is null");
if(is_null($mid)) return FALSE;
if(PEAR::isError($mid)) return $mid;
// remove it:
$r = $this->_removeMemb($mid); if(PEAR::isError($r)) return $r;
// and rebuild indirect memberships:
$r = $this->_rebuildRels(); if(PEAR::isError($r)) return $r;
return TRUE;
} }
$gid = $this->getSubjId($gname);
if (PEAR::isError($gid)) {
return $gid;
}
$sql = "SELECT id FROM {$this->smembTable}
WHERE uid='$uid' AND gid='$gid' AND mid is null";
$mid = $this->dbc->getOne($sql);
if (is_null($mid)) {
return FALSE;
}
if (PEAR::isError($mid)) {
return $mid;
}
// remove it:
$r = $this->_removeMemb($mid);
if (PEAR::isError($r)) {
return $r;
}
// and rebuild indirect memberships:
$r = $this->_rebuildRels();
if (PEAR::isError($r)) {
return $r;
}
return TRUE;
} // fn removeSubjFromGr
/* --------------------------------------------------------- info methods */ /* --------------------------------------------------------- info methods */
/** /**
* Get subject id from login * Get subject id from login
* *
* @param login string * @param string $login
* @return int/err * @return int/err
*/ */
function getSubjId($login) function getSubjId($login)
{ {
return $this->dbc->getOne("SELECT id FROM {$this->subjTable} $sql = "SELECT id FROM {$this->subjTable}
WHERE login='$login'"); WHERE login='$login'";
} return $this->dbc->getOne($sql);
} // fn getSubjId
/** /**
* Get subject name (login) from id * Get subject name (login) from id
* *
* @param id int * @param int $id
* @param fld string * @param string $fld
* @return string/err * @return string/err
*/ */
function getSubjName($id, $fld='login') function getSubjName($id, $fld='login')
{ {
return $this->dbc->getOne("SELECT $fld FROM {$this->subjTable} $sql = "SELECT $fld FROM {$this->subjTable}
WHERE id='$id'"); WHERE id='$id'";
} return $this->dbc->getOne($sql);
} // fn getSubjName
/** /**
* Get all subjects * Get all subjects
* *
* @param flds string, optional * @param string $flds, optional
* @return array/err * @return array/err
*/ */
function getSubjects($flds='id, login') function getSubjects($flds='id, login')
{ {
return $this->dbc->getAll("SELECT $flds FROM {$this->subjTable}"); $sql = "SELECT $flds FROM {$this->subjTable}";
} return $this->dbc->getAll($sql);
} // fn getSubjects
/** /**
* Get subjects with count of direct members * Get subjects with count of direct members
@ -268,162 +339,199 @@ class Subjects extends ObjClasses{
*/ */
function getSubjectsWCnt() function getSubjectsWCnt()
{ {
return $this->dbc->getAll(" $sql = "
SELECT count(m.uid)as cnt, s.id, s.login, s.type SELECT count(m.uid)as cnt, s.id, s.login, s.type
FROM {$this->subjTable} s FROM {$this->subjTable} s
LEFT JOIN {$this->smembTable} m ON m.gid=s.id LEFT JOIN {$this->smembTable} m ON m.gid=s.id
WHERE m.mid is null WHERE m.mid is null
GROUP BY s.id, s.login, s.type GROUP BY s.id, s.login, s.type
ORDER BY s.id" ORDER BY s.id";
); return $this->dbc->getAll($sql);
} } // fn getSubjectsWCnt
/** /**
* Return true if subject is a group * Return true if subject is a group
* *
* @param gid int * @param int $gid
* @return boolean/err * @return boolean/err
*/ */
function isGroup($gid) function isGroup($gid)
{ {
$r = $this->dbc->getOne("SELECT type FROM {$this->subjTable} $sql = "SELECT type FROM {$this->subjTable}
WHERE id='$gid'"); WHERE id='$gid'";
if(PEAR::isError($r)) return $r; $r = $this->dbc->getOne($sql);
return ($r === 'G' ); if (PEAR::isError($r)) {
return $r;
} }
return ($r === 'G');
} // fn isGroup
/** /**
* List direct members of group * List direct members of group
* *
* @param gid int * @param int $gid
* @return array/err * @return array/err
*/ */
function listGroup($gid) function listGroup($gid)
{ {
return $this->dbc->getAll("SELECT s.id, s.login, s.type $sql = "SELECT s.id, s.login, s.type
FROM {$this->smembTable} m, {$this->subjTable} s FROM {$this->smembTable} m, {$this->subjTable} s
WHERE m.uid=s.id AND m.mid is null AND m.gid='$gid'"); WHERE m.uid=s.id AND m.mid is null AND m.gid='$gid'";
} return $this->dbc->getAll($sql);
} // fn listGroup
/** /**
* Return true if uid is [id]direct member of gid * Return true if uid is [id]direct member of gid
* *
* @param uid int, local user id * @param int $uid, local user id
* @param gid int, local group id * @param int $gid, local group id
* @return boolean * @return boolean
*/ */
function isMemberOf($uid, $gid) function isMemberOf($uid, $gid)
{ {
$res = $this->dbc->getOne(" $sql = "
SELECT count(*)as cnt SELECT count(*)as cnt
FROM {$this->smembTable} FROM {$this->smembTable}
WHERE uid='$uid' AND gid='$gid' WHERE uid='$uid' AND gid='$gid'
"); ";
if(PEAR::isError($res)) return $res; $res = $this->dbc->getOne($sql);
return (intval($res) > 0); if (PEAR::isError($res)) {
return $res;
} }
return (intval($res) > 0);
} // fn isMemberOf
/* ==================================================== "private" methods */ /* ==================================================== "private" methods */
/** /**
* Create membership record * Create membership record
* *
* @param uid int * @param int $uid
* @param gid int * @param int $gid
* @param level int, optional * @param int $level, optional
* @param mid int, optional * @param int $mid, optional
* @return int/err * @return int/err
*/ */
function _addMemb($uid, $gid, $level=0, $mid='null') function _addMemb($uid, $gid, $level=0, $mid='null')
{ {
if($uid == $gid) return PEAR::raiseError( if($uid == $gid) {
"Subjects::_addMemb: uid==gid ($uid)", ALIBERR_BADSMEMB return PEAR::raiseError("Subjects::_addMemb: uid==gid ($uid)", ALIBERR_BADSMEMB);
); }
$a = $this->dbc->getAll("SELECT id, level, mid FROM {$this->smembTable} $sql = "SELECT id, level, mid FROM {$this->smembTable}
WHERE uid='$uid' AND gid='$gid' ORDER BY level ASC"); WHERE uid='$uid' AND gid='$gid' ORDER BY level ASC";
if(PEAR::isError($a)) return $a; $a = $this->dbc->getAll($sql);
if (PEAR::isError($a)) {
return $a;
}
if (count($a) > 0) { if (count($a) > 0) {
$a0 = $a[0]; $a0 = $a[0];
$id = $a0['id']; $id = $a0['id'];
if ($level < intval($a0['level'])){ if ($level < intval($a0['level'])){
$r = $this->dbc->query("UPDATE {$this->smembTable} $sql2 = "UPDATE {$this->smembTable}
SET level='$level', mid=$mid WHERE id='{$a0['id']}'"); SET level='$level', mid=$mid WHERE id='{$a0['id']}'";
if(PEAR::isError($r)) return $r; $r = $this->dbc->query($sql2);
if (PEAR::isError($r)) {
return $r;
}
} }
} else { } else {
$id = $this->dbc->nextId("{$this->smembTable}_id_seq"); $id = $this->dbc->nextId("{$this->smembTable}_id_seq");
if(PEAR::isError($id)) return $id; if (PEAR::isError($id)) {
$r = $this->dbc->query("
INSERT INTO {$this->smembTable} (id, uid, gid, level, mid)
VALUES ($id, $uid, $gid, $level, $mid)
");
if(PEAR::isError($r)) return $r;
}
return $id; return $id;
} }
$sql3 = "
INSERT INTO {$this->smembTable} (id, uid, gid, level, mid)
VALUES ($id, $uid, $gid, $level, $mid)
";
$r = $this->dbc->query($sql3);
if (PEAR::isError($r)) {
return $r;
}
}
return $id;
} // fn _addMemb
/** /**
* Remove membership record * Remove membership record
* *
* @param mid int * @param int $mid
* @return null/err * @return null/err
*/ */
function _removeMemb($mid) function _removeMemb($mid)
{ {
return $this->dbc->query("DELETE FROM {$this->smembTable} $sql = "DELETE FROM {$this->smembTable}
WHERE id='$mid'"); WHERE id='$mid'";
} return $this->dbc->query($sql);
} // fn _removeMemb
/** /**
* List [in]direct members of group * List [in]direct members of group
* *
* @param gid int * @param int $gid
* @param uid int, optional * @param int $uid, optional
* @return array/err * @return array/err
*/ */
function _listMemb($gid, $uid=NULL) function _listMemb($gid, $uid=NULL)
{ {
return $this->dbc->getAll(" $sql = "
SELECT id, uid, level FROM {$this->smembTable} SELECT id, uid, level FROM {$this->smembTable}
WHERE gid='$gid'".(is_null($uid) ? '' : " AND uid='$uid'")); WHERE gid='$gid'".(is_null($uid) ? '' : " AND uid='$uid'");
} return $this->dbc->getAll($sql);
} // fn _listMemb
/** /**
* List groups where uid is [in]direct member * List groups where uid is [in]direct member
* *
* @param gid int * @param int $gid
* @param uid int, optional * @param int $uid, optional
* @return array/err * @return array/err
*/ */
function _listRMemb($uid, $gid=NULL) function _listRMemb($uid, $gid=NULL)
{ {
return $this->dbc->getAll(" $sql = "
SELECT id, gid, level FROM {$this->smembTable} SELECT id, gid, level FROM {$this->smembTable}
WHERE uid='$uid'".(is_null($gid) ? '' : " AND gid='$gid'")); WHERE uid='$uid'".(is_null($gid) ? '' : " AND gid='$gid'");
} return $this->dbc->getAll($sql);
} // fn listRMemb
/** /**
* Add uid and its [in]direct members to gid * Add uid and its [in]direct members to gid
* *
* @param uid int * @param int $uid
* @param gid int * @param int $gid
* @param level int * @param int $level
* @param rmid int // * @param int $rmid //
* @return int/err * @return int/err
*/ */
function _plainAddSubj2Gr($uid, $gid, $level=0, $rmid='null') function _plainAddSubj2Gr($uid, $gid, $level=0, $rmid='null')
{ {
$mid = $this->_addMemb($uid, $gid, $level, $rmid); $mid = $this->_addMemb($uid, $gid, $level, $rmid);
if(PEAR::isError($mid)) return $mid; if (PEAR::isError($mid)) {
$marr = $this->_listMemb($uid); if(PEAR::isError($marr)) return $marr; return $mid;
}
$marr = $this->_listMemb($uid);
if (PEAR::isError($marr)) {
return $marr;
}
foreach ($marr as $k => $v) { foreach ($marr as $k => $v) {
$r = $this->_addMemb( $r = $this->_addMemb(
$v['uid'], $gid, intval($v['level'])+$level+1, $mid $v['uid'], $gid, intval($v['level'])+$level+1, $mid
); );
if(PEAR::isError($r)) return $r; if (PEAR::isError($r)) {
return $r;
}
} }
return $mid; return $mid;
} } // fn _plainAddSubj2Gr
/** /**
* Rebuild indirect membership records<br> * Rebuild indirect membership records<br>
@ -435,26 +543,36 @@ class Subjects extends ObjClasses{
{ {
$this->dbc->query("BEGIN"); $this->dbc->query("BEGIN");
$r = $this->dbc->query("LOCK TABLE {$this->smembTable}"); $r = $this->dbc->query("LOCK TABLE {$this->smembTable}");
if(PEAR::isError($r)) return $r; if (PEAR::isError($r)) {
return $r;
}
$r = $this->dbc->query("DELETE FROM {$this->smembTable} $r = $this->dbc->query("DELETE FROM {$this->smembTable}
WHERE mid is not null"); WHERE mid is not null");
if(PEAR::isError($r)) return $r; if (PEAR::isError($r)) {
return $r;
}
$arr = $this->dbc->getAll("SELECT uid, gid FROM {$this->smembTable}"); $arr = $this->dbc->getAll("SELECT uid, gid FROM {$this->smembTable}");
// WHERE mid is null // WHERE mid is null
if(PEAR::isError($arr)) return $arr; if (PEAR::isError($arr)) {
return $arr;
}
foreach ($arr as $it) { foreach ($arr as $it) {
$marr = $this->_listRMemb($it['gid']); $marr = $this->_listRMemb($it['gid']);
if(PEAR::isError($marr)) return $marr; if (PEAR::isError($marr)) {
return $marr;
}
foreach ($marr as $k => $v) { foreach ($marr as $k => $v) {
$r = $this->_plainAddSubj2Gr( $r = $this->_plainAddSubj2Gr(
$it['uid'], $v['gid'], intval($v['level'])+1, $v['id'] $it['uid'], $v['gid'], intval($v['level'])+1, $v['id']
); );
if(PEAR::isError($r)) return $r; if (PEAR::isError($r)) {
return $r;
}
} }
} }
$r = $this->dbc->query("COMMIT"); if(PEAR::isError($r)) return $r; $r = $this->dbc->query("COMMIT"); if(PEAR::isError($r)) return $r;
return TRUE; return TRUE;
} } // fn _rebuildRels
/* =============================================== test and debug methods */ /* =============================================== test and debug methods */
@ -462,8 +580,8 @@ class Subjects extends ObjClasses{
/** /**
* Dump subjects for debug * Dump subjects for debug
* *
* @param indstr string // indentation string * @param string $indstr // indentation string
* @param ind string // aktual indentation * @param string $ind // aktual indentation
* @return string * @return string
*/ */
function dumpSubjects($indstr=' ', $ind='') function dumpSubjects($indstr=' ', $ind='')
@ -473,7 +591,8 @@ class Subjects extends ObjClasses{
$this->getSubjectsWCnt() $this->getSubjectsWCnt()
))."\n"; ))."\n";
return $r; return $r;
} } // fn dumpSubjects
/** /**
* Delete all subjects and membership records * Delete all subjects and membership records
@ -485,7 +604,8 @@ class Subjects extends ObjClasses{
$this->dbc->query("DELETE FROM {$this->subjTable}"); $this->dbc->query("DELETE FROM {$this->subjTable}");
$this->dbc->query("DELETE FROM {$this->smembTable}"); $this->dbc->query("DELETE FROM {$this->smembTable}");
parent::deleteData(); parent::deleteData();
} } // fn deleteData
/** /**
* Insert test data * Insert test data
@ -513,7 +633,8 @@ class Subjects extends ObjClasses{
$this->addSubj2Gr('gr4', 'gr3'); $this->addSubj2Gr('gr4', 'gr3');
$this->addSubj2Gr('gr3', 'gr2'); $this->addSubj2Gr('gr3', 'gr2');
return $this->tdata['subjects'] = $o; return $this->tdata['subjects'] = $o;
} } // fn testData
/** /**
* Make basic test * Make basic test
@ -521,7 +642,9 @@ class Subjects extends ObjClasses{
*/ */
function test() function test()
{ {
if(PEAR::isError($p = parent::test())) return $p; if (PEAR::isError($p = parent::test())) {
return $p;
}
$this->deleteData(); $this->deleteData();
$this->testData(); $this->testData();
$this->test_correct = "root(0), test1(0), test2(0), test3(0),". $this->test_correct = "root(0), test1(0), test2(0), test3(0),".
@ -535,14 +658,17 @@ class Subjects extends ObjClasses{
" gr1(0), gr2(1), gr3(1), gr4(1)\n"; " gr1(0), gr2(1), gr3(1), gr4(1)\n";
$this->test_dump .= $this->dumpSubjects(); $this->test_dump .= $this->dumpSubjects();
$this->deleteData(); $this->deleteData();
if($this->test_dump == $this->test_correct) if ($this->test_dump == $this->test_correct) {
{ $this->test_log.="subj: OK\n";
$this->test_log.="subj: OK\n"; return TRUE; return TRUE;
}else return PEAR::raiseError( } else {
return PEAR::raiseError(
'Subjects::test:', 1, PEAR_ERROR_DIE, '%s'. 'Subjects::test:', 1, PEAR_ERROR_DIE, '%s'.
"<pre>\ncorrect:\n{$this->test_correct}\n". "<pre>\ncorrect:\n{$this->test_correct}\n".
"dump:\n{$this->test_dump}\n</pre>\n"); "dump:\n{$this->test_dump}\n</pre>\n");
} }
} // fn test
/** /**
* Create tables + initialize * Create tables + initialize
@ -576,8 +702,8 @@ class Subjects extends ObjClasses{
$this->dbc->query("CREATE UNIQUE INDEX {$this->smembTable}_id_idx $this->dbc->query("CREATE UNIQUE INDEX {$this->smembTable}_id_idx
ON {$this->smembTable} (id)"); ON {$this->smembTable} (id)");
$this->dbc->createSequence("{$this->smembTable}_id_seq"); $this->dbc->createSequence("{$this->smembTable}_id_seq");
} // fn install
}
/** /**
* Drop tables etc. * Drop tables etc.
@ -591,6 +717,7 @@ class Subjects extends ObjClasses{
$this->dbc->query("DROP TABLE {$this->smembTable}"); $this->dbc->query("DROP TABLE {$this->smembTable}");
$this->dbc->dropSequence("{$this->smembTable}_id_seq"); $this->dbc->dropSequence("{$this->smembTable}_id_seq");
parent::uninstall(); parent::uninstall();
} } // fn uninstall
}
} // class Subjects
?> ?>