2010-11-24 15:43:08 +00:00
< ? php
2010-11-30 12:23:46 +00:00
/**
* Implementation of the user object in the document management system
*
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS_Core
2010-11-30 12:23:46 +00:00
* @ license GPL 2
* @ version @ version @
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2002 - 2005 Markus Westphal , 2006 - 2008 Malcolm Cowe ,
* 2010 Uwe Steinmann
* @ version Release : @ package_version @
*/
/**
* Class to represent a user in the document management system
*
* @ category DMS
2013-02-14 11:10:53 +00:00
* @ package SeedDMS_Core
2010-11-30 12:23:46 +00:00
* @ author Markus Westphal , Malcolm Cowe , Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2002 - 2005 Markus Westphal , 2006 - 2008 Malcolm Cowe ,
* 2010 Uwe Steinmann
* @ version Release : @ package_version @
*/
2013-02-14 11:10:53 +00:00
class SeedDMS_Core_User {
2010-12-05 20:29:33 +00:00
/**
* @ var integer id of user
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_id ;
2010-12-05 20:29:33 +00:00
/**
* @ var string login name of user
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_login ;
2010-12-05 20:29:33 +00:00
/**
* @ var string password of user as saved in database ( md5 )
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_pwd ;
2010-12-05 20:29:33 +00:00
2012-08-28 07:31:31 +00:00
/**
* @ var string date when password expires
*
* @ access protected
*/
var $_pwdExpiration ;
2010-12-05 20:29:33 +00:00
/**
* @ var string full human readable name of user
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_fullName ;
2010-12-05 20:29:33 +00:00
/**
* @ var string email address of user
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_email ;
2010-12-05 20:29:33 +00:00
/**
* @ var string prefered language of user
* possible values are 'English' , 'German' , 'Chinese_ZH_TW' , 'Czech'
* 'Francais' , 'Hungarian' , 'Italian' , 'Portuguese_BR' , 'Slovak' ,
* 'Spanish'
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_language ;
2010-12-05 20:29:33 +00:00
/**
* @ var string preselected theme of user
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_theme ;
2010-12-05 20:29:33 +00:00
/**
* @ var string comment of user
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_comment ;
2010-12-05 20:29:33 +00:00
/**
2013-02-14 11:10:53 +00:00
* @ var string role of user . Can be one of SeedDMS_Core_User :: role_user ,
* SeedDMS_Core_User :: role_admin , SeedDMS_Core_User :: role_guest
2010-12-05 20:29:33 +00:00
*
* @ access protected
*/
var $_role ;
/**
2012-08-28 07:31:31 +00:00
* @ var boolean true if user shall be hidden
2010-12-05 20:29:33 +00:00
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_isHidden ;
2010-12-05 20:29:33 +00:00
2012-08-28 07:31:31 +00:00
/**
* @ var boolean true if user is disabled
*
* @ access protected
*/
var $_isDisabled ;
/**
* @ var int number of login failures
*
* @ access protected
*/
var $_loginFailures ;
2014-03-26 07:16:53 +00:00
/**
* @ var object home folder
*
* @ access protected
*/
var $_homeFolder ;
2010-12-05 20:29:33 +00:00
/**
* @ var object reference to the dms instance this user belongs to
*
* @ access protected
*/
2010-11-24 15:43:08 +00:00
var $_dms ;
2010-12-05 20:29:33 +00:00
const role_user = '0' ;
const role_admin = '1' ;
const role_guest = '2' ;
2014-05-22 06:21:22 +00:00
function SeedDMS_Core_User ( $id , $login , $pwd , $fullName , $email , $language , $theme , $comment , $role , $isHidden = 0 , $isDisabled = 0 , $pwdExpiration = '0000-00-00 00:00:00' , $loginFailures = 0 , $quota = 0 , $homeFolder = null ) {
2010-11-24 15:43:08 +00:00
$this -> _id = $id ;
$this -> _login = $login ;
$this -> _pwd = $pwd ;
$this -> _fullName = $fullName ;
$this -> _email = $email ;
$this -> _language = $language ;
$this -> _theme = $theme ;
$this -> _comment = $comment ;
2010-12-05 20:29:33 +00:00
$this -> _role = $role ;
2010-11-24 15:43:08 +00:00
$this -> _isHidden = $isHidden ;
2012-08-28 07:31:31 +00:00
$this -> _isDisabled = $isDisabled ;
$this -> _pwdExpiration = $pwdExpiration ;
$this -> _loginFailures = $loginFailures ;
2012-12-19 10:24:58 +00:00
$this -> _quota = $quota ;
2014-03-26 07:16:53 +00:00
$this -> _homeFolder = $homeFolder ;
2010-11-24 15:43:08 +00:00
$this -> _dms = null ;
}
2010-10-29 13:19:51 +00:00
2015-04-16 12:11:14 +00:00
/**
* Create an instance of a user object
*
* @ param string | integer $id Id , login name , or email of user , depending
* on the 3 rd parameter .
* @ param object $dms instance of dms
* @ param string $by search by [ name | email ] . If 'name' is passed , the method
* will check for the 4 th paramater and also filter by email . If this
* parameter is left empty , the user will be search by its Id .
* @ param string $email optional email address if searching for name
* @ return object instance of class SeedDMS_Core_User
*/
2015-04-14 17:37:06 +00:00
public static function getInstance ( $id , $dms , $by = '' , $email = '' ) { /* {{{ */
$db = $dms -> getDB ();
switch ( $by ) {
case 'name' :
2015-04-16 12:11:14 +00:00
$queryStr = " SELECT * FROM tblUsers WHERE login = " . $db -> qstr ( $id );
2015-04-14 17:37:06 +00:00
if ( $email )
2015-04-16 12:11:14 +00:00
$queryStr .= " AND email= " . $db -> qstr ( $email );
2015-04-14 17:37:06 +00:00
break ;
case 'email' :
2015-04-16 12:11:14 +00:00
$queryStr = " SELECT * FROM tblUsers WHERE email = " . $db -> qstr ( $id );
2015-04-14 17:37:06 +00:00
break ;
default :
$queryStr = " SELECT * FROM tblUsers WHERE id = " . ( int ) $id ;
}
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false ) return false ;
if ( count ( $resArr ) != 1 ) return false ;
$resArr = $resArr [ 0 ];
$user = new self ( $resArr [ " id " ], $resArr [ " login " ], $resArr [ " pwd " ], $resArr [ " fullName " ], $resArr [ " email " ], $resArr [ " language " ], $resArr [ " theme " ], $resArr [ " comment " ], $resArr [ " role " ], $resArr [ " hidden " ], $resArr [ " disabled " ], $resArr [ " pwdExpiration " ], $resArr [ " loginfailures " ], $resArr [ " quota " ], $resArr [ " homefolder " ]);
$user -> setDMS ( $dms );
return $user ;
} /* }}} */
public static function getAllInstances ( $orderby , $dms ) { /* {{{ */
$db = $dms -> getDB ();
if ( $orderby == 'fullname' )
$queryStr = " SELECT * FROM tblUsers ORDER BY fullname " ;
else
$queryStr = " SELECT * FROM tblUsers ORDER BY login " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
$users = array ();
for ( $i = 0 ; $i < count ( $resArr ); $i ++ ) {
$user = new self ( $resArr [ $i ][ " id " ], $resArr [ $i ][ " login " ], $resArr [ $i ][ " pwd " ], $resArr [ $i ][ " fullName " ], $resArr [ $i ][ " email " ], ( isset ( $resArr [ $i ][ " language " ]) ? $resArr [ $i ][ " language " ] : NULL ), ( isset ( $resArr [ $i ][ " theme " ]) ? $resArr [ $i ][ " theme " ] : NULL ), $resArr [ $i ][ " comment " ], $resArr [ $i ][ " role " ], $resArr [ $i ][ " hidden " ], $resArr [ $i ][ " disabled " ], $resArr [ $i ][ " pwdExpiration " ], $resArr [ $i ][ " loginfailures " ], $resArr [ $i ][ " quota " ], $resArr [ $i ][ " homefolder " ]);
$user -> setDMS ( $dms );
$users [ $i ] = $user ;
}
return $users ;
} /* }}} */
2010-11-15 21:08:07 +00:00
function setDMS ( $dms ) {
$this -> _dms = $dms ;
}
2010-11-24 15:43:08 +00:00
function getID () { return $this -> _id ; }
function getLogin () { return $this -> _login ; }
function setLogin ( $newLogin ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET login = " . $db -> qstr ( $newLogin ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _login = $newLogin ;
return true ;
} /* }}} */
function getFullName () { return $this -> _fullName ; }
function setFullName ( $newFullName ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET fullname = " . $db -> qstr ( $newFullName ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _fullName = $newFullName ;
return true ;
} /* }}} */
function getPwd () { return $this -> _pwd ; }
function setPwd ( $newPwd ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET pwd = " . $db -> qstr ( $newPwd ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _pwd = $newPwd ;
return true ;
} /* }}} */
2012-08-28 07:31:31 +00:00
function getPwdExpiration () { return $this -> _pwdExpiration ; }
function setPwdExpiration ( $newPwdExpiration ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2014-05-16 09:29:25 +00:00
if ( trim ( $newPwdExpiration ) == '' )
$newPwdExpiration = '0000-00-00 00:00:00' ;
2012-08-28 07:31:31 +00:00
$queryStr = " UPDATE tblUsers SET pwdExpiration = " . $db -> qstr ( $newPwdExpiration ) . " WHERE id = " . $this -> _id ;
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _pwdExpiration = $newPwdExpiration ;
return true ;
} /* }}} */
2010-11-24 15:43:08 +00:00
function getEmail () { return $this -> _email ; }
function setEmail ( $newEmail ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET email = " . $db -> qstr ( $newEmail ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _email = $newEmail ;
return true ;
} /* }}} */
function getLanguage () { return $this -> _language ; }
function setLanguage ( $newLanguage ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET language = " . $db -> qstr ( $newLanguage ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _language = $newLanguage ;
return true ;
} /* }}} */
function getTheme () { return $this -> _theme ; }
function setTheme ( $newTheme ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET theme = " . $db -> qstr ( $newTheme ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _theme = $newTheme ;
return true ;
} /* }}} */
function getComment () { return $this -> _comment ; }
function setComment ( $newComment ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUsers SET comment = " . $db -> qstr ( $newComment ) . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res )
return false ;
$this -> _comment = $newComment ;
return true ;
} /* }}} */
2010-12-05 20:29:33 +00:00
function getRole () { return $this -> _role ; }
function setRole ( $newrole ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " UPDATE tblUsers SET role = " . $newrole . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
$this -> _role = $newrole ;
return true ;
} /* }}} */
2013-02-14 11:10:53 +00:00
function isAdmin () { return ( $this -> _role == SeedDMS_Core_User :: role_admin ); }
2010-11-24 15:43:08 +00:00
function setAdmin ( $isAdmin ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2013-02-14 11:10:53 +00:00
$queryStr = " UPDATE tblUsers SET role = " . SeedDMS_Core_User :: role_admin . " WHERE id = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
if ( ! $db -> getResult ( $queryStr ))
return false ;
2013-02-14 11:10:53 +00:00
$this -> _role = SeedDMS_Core_User :: role_admin ;
2010-11-24 15:43:08 +00:00
return true ;
} /* }}} */
2013-02-14 11:10:53 +00:00
function isGuest () { return ( $this -> _role == SeedDMS_Core_User :: role_guest ); }
2010-12-03 07:20:44 +00:00
function setGuest ( $isGuest ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2013-02-14 11:10:53 +00:00
$queryStr = " UPDATE tblUsers SET role = " . SeedDMS_Core_User :: role_guest . " WHERE id = " . $this -> _id ;
2010-12-03 07:20:44 +00:00
if ( ! $db -> getResult ( $queryStr ))
return false ;
2013-02-14 11:10:53 +00:00
$this -> _role = SeedDMS_Core_User :: role_guest ;
2010-12-03 07:20:44 +00:00
return true ;
} /* }}} */
2010-11-24 15:43:08 +00:00
function isHidden () { return $this -> _isHidden ; }
function setHidden ( $isHidden ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$isHidden = ( $isHidden ) ? " 1 " : " 0 " ;
$queryStr = " UPDATE tblUsers SET hidden = " . $isHidden . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
2010-12-03 07:20:44 +00:00
$this -> _isHidden = $isHidden ;
2010-11-24 15:43:08 +00:00
return true ;
} /* }}} */
2010-11-05 21:17:41 +00:00
2012-08-28 07:31:31 +00:00
function isDisabled () { return $this -> _isDisabled ; }
function setDisabled ( $isDisabled ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$isDisabled = ( $isDisabled ) ? " 1 " : " 0 " ;
$queryStr = " UPDATE tblUsers SET disabled = " . $isDisabled . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
$this -> _isDisabled = $isDisabled ;
return true ;
} /* }}} */
function addLoginFailure () { /* {{{ */
$db = $this -> _dms -> getDB ();
$this -> _loginFailures ++ ;
$queryStr = " UPDATE tblUsers SET loginfailures = " . $this -> _loginFailures . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
return $this -> _loginFailures ;
} /* }}} */
function clearLoginFailures () { /* {{{ */
$db = $this -> _dms -> getDB ();
$this -> _loginFailures = 0 ;
$queryStr = " UPDATE tblUsers SET loginfailures = " . $this -> _loginFailures . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
return true ;
} /* }}} */
2013-02-06 13:55:05 +00:00
/**
* Calculate the disk space for all documents owned by the user
*
* This is done by using the internal database field storing the
* filesize of a document version .
*
* @ return integer total disk space in Bytes
*/
2012-12-19 10:24:58 +00:00
function getUsedDiskSpace () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT SUM(filesize) sum FROM tblDocumentContent a LEFT JOIN tblDocuments b ON a.document=b.id WHERE b.owner = " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
return $resArr [ 0 ][ 'sum' ];
} /* }}} */
function getQuota () { return $this -> _quota ; }
function setQuota ( $quota ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$quota = intval ( $quota );
$queryStr = " UPDATE tblUsers SET quota = " . $quota . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
$this -> _quota = $quota ;
return true ;
} /* }}} */
2014-03-26 07:16:53 +00:00
function getHomeFolder () { return $this -> _homeFolder ; }
function setHomeFolder ( $homefolder ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2014-03-26 16:29:56 +00:00
$queryStr = " UPDATE tblUsers SET homefolder = " . ( int ) $homefolder . " WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr ))
return false ;
$this -> _homeFolder = $homefolder ;
2014-03-26 07:16:53 +00:00
return true ;
} /* }}} */
2010-11-22 14:53:28 +00:00
/**
* Remove the user and also remove all its keywords , notifies , etc .
* Do not remove folders and documents of the user , but assign them
* to a different user .
*
2010-12-22 19:47:08 +00:00
* @ param object $user the user doing the removal ( needed for entry in
2012-09-11 13:16:18 +00:00
* review and approve log ) .
2010-11-22 14:53:28 +00:00
* @ param object $assignToUser the user who is new owner of folders and
* documents which previously were owned by the delete user .
* @ return boolean true on success or false in case of an error
*/
2010-12-22 19:47:08 +00:00
function remove ( $user , $assignToUser = null ) { /* {{{ */
2010-11-24 15:43:08 +00:00
$db = $this -> _dms -> getDB ();
2010-11-05 21:17:41 +00:00
2010-11-22 14:53:28 +00:00
/* Records like folders and documents that formely have belonged to
* the user will assign to another user . If no such user is set ,
* the function now returns false and will not use the admin user
* anymore .
*/
if ( ! $assignToUser )
return ;
$assignTo = $assignToUser -> getID ();
2012-10-22 13:33:30 +00:00
$db -> startTransaction ();
2010-11-22 14:53:28 +00:00
// delete private keyword lists
2010-11-24 15:43:08 +00:00
$queryStr = " SELECT tblKeywords.id FROM tblKeywords, tblKeywordCategories WHERE tblKeywords.category = tblKeywordCategories.id AND tblKeywordCategories.owner = " . $this -> _id ;
$resultArr = $db -> getResultArray ( $queryStr );
if ( count ( $resultArr ) > 0 ) {
$queryStr = " DELETE FROM tblKeywords WHERE " ;
for ( $i = 0 ; $i < count ( $resultArr ); $i ++ ) {
$queryStr .= " id = " . $resultArr [ $i ][ " id " ];
if ( $i + 1 < count ( $resultArr ))
$queryStr .= " OR " ;
}
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-10-29 13:19:51 +00:00
}
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblKeywordCategories WHERE owner = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
//Benachrichtigungen entfernen
$queryStr = " DELETE FROM tblNotify WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
/* Assign documents of the removed user to the given user */
2010-11-24 15:43:08 +00:00
$queryStr = " UPDATE tblFolders SET owner = " . $assignTo . " WHERE owner = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
$queryStr = " UPDATE tblDocuments SET owner = " . $assignTo . " WHERE owner = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
$queryStr = " UPDATE tblDocumentContent SET createdBy = " . $assignTo . " WHERE createdBy = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
// Remove private links on documents ...
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblDocumentLinks WHERE userID = " . $this -> _id . " AND public = 0 " ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
// ... but keep public links
2010-11-24 15:43:08 +00:00
$queryStr = " UPDATE tblDocumentLinks SET userID = " . $assignTo . " WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
// set administrator for deleted user's attachments
$queryStr = " UPDATE tblDocumentFiles SET userID = " . $assignTo . " WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
//Evtl. von diesem Benutzer gelockte Dokumente werden freigegeben
$queryStr = " DELETE FROM tblDocumentLocks WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
// Delete user from all groups
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblGroupMembers WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
// User aus allen ACLs streichen
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblACLs WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
// Delete image of user
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblUserImages WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2012-08-28 07:48:59 +00:00
// Delete entries in password history
$queryStr = " DELETE FROM tblUserPasswordHistory WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2012-08-28 07:48:59 +00:00
// Delete entries in password request
$queryStr = " DELETE FROM tblUserPasswordRequest WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
// mandatory review/approve
$queryStr = " DELETE FROM tblMandatoryReviewers WHERE reviewerUserID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblMandatoryApprovers WHERE approverUserID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblMandatoryReviewers WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
$queryStr = " DELETE FROM tblMandatoryApprovers WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2013-01-24 08:29:30 +00:00
$queryStr = " DELETE FROM tblWorkflowMandatoryWorkflow WHERE userid = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2013-02-05 09:09:53 +00:00
$queryStr = " DELETE FROM tblWorkflowTransitionUsers WHERE userid = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
// set administrator for deleted user's events
$queryStr = " UPDATE tblEvents SET userID = " . $assignTo . " WHERE userID = " . $this -> _id ;
2012-10-22 13:33:30 +00:00
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-10-29 13:19:51 +00:00
2012-10-22 13:33:30 +00:00
// Delete user itself
$queryStr = " DELETE FROM tblUsers WHERE id = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr )) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
2010-10-29 13:19:51 +00:00
// TODO : update document status if reviewer/approver has been deleted
// "DELETE FROM tblDocumentApproveLog WHERE userID = " . $this->_id;
// "DELETE FROM tblDocumentReviewLog WHERE userID = " . $this->_id;
2010-11-24 15:43:08 +00:00
$reviewStatus = $this -> getReviewStatus ();
foreach ( $reviewStatus [ " indstatus " ] as $ri ) {
$queryStr = " INSERT INTO `tblDocumentReviewLog` (`reviewID`, `status`, `comment`, `date`, `userID`) " .
2013-03-26 20:06:20 +00:00
" VALUES (' " . $ri [ " reviewID " ] . " ', '-2', 'Reviewer removed from process', CURRENT_TIMESTAMP, ' " . $user -> getID () . " ') " ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
2012-10-22 13:33:30 +00:00
if ( ! $res ) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
}
$approvalStatus = $this -> getApprovalStatus ();
foreach ( $approvalStatus [ " indstatus " ] as $ai ) {
$queryStr = " INSERT INTO `tblDocumentApproveLog` (`approveID`, `status`, `comment`, `date`, `userID`) " .
2013-03-26 20:06:20 +00:00
" VALUES (' " . $ai [ " approveID " ] . " ', '-2', 'Approver removed from process', CURRENT_TIMESTAMP, ' " . $user -> getID () . " ') " ;
2010-11-24 15:43:08 +00:00
$res = $db -> getResult ( $queryStr );
2012-10-22 13:33:30 +00:00
if ( ! $res ) {
$db -> rollbackTransaction ();
return false ;
}
2010-11-24 15:43:08 +00:00
}
2015-04-22 08:31:36 +00:00
$receiptStatus = $this -> getReceiptStatus ();
foreach ( $receiptStatus [ " indstatus " ] as $ri ) {
$queryStr = " INSERT INTO `tblDocumentReceiptLog` (`receiptID`, `status`, `comment`, `date`, `userID`) " .
" VALUES (' " . $ri [ " receiptID " ] . " ', '-2', 'Recipient removed from process', CURRENT_TIMESTAMP, ' " . $user -> getID () . " ') " ;
$res = $db -> getResult ( $queryStr );
if ( ! $res ) {
$db -> rollbackTransaction ();
return false ;
}
}
$revisionStatus = $this -> getRevisionStatus ();
foreach ( $revisionStatus [ " indstatus " ] as $ri ) {
$queryStr = " INSERT INTO `tblDocumentRevisionLog` (`revisionID`, `status`, `comment`, `date`, `userID`) " .
2015-05-11 07:29:34 +00:00
" VALUES (' " . $ri [ " revisionID " ] . " ', '-2', 'Revisor removed from process', CURRENT_TIMESTAMP, ' " . $user -> getID () . " ') " ;
2015-04-22 08:31:36 +00:00
$res = $db -> getResult ( $queryStr );
if ( ! $res ) {
$db -> rollbackTransaction ();
return false ;
}
}
2012-10-22 13:33:30 +00:00
$db -> commitTransaction ();
2010-11-24 15:43:08 +00:00
return true ;
2010-11-22 14:53:28 +00:00
} /* }}} */
2011-10-10 14:08:52 +00:00
/**
* Make the user a member of a group
2013-02-14 11:10:53 +00:00
* This function uses { @ link SeedDMS_Group :: addUser } but checks before if
2011-10-10 14:08:52 +00:00
* the user is already a member of the group .
*
* @ param object $group group to be the member of
* @ return boolean true on success or false in case of an error or the user
* is already a member of the group
*/
2010-11-22 14:53:28 +00:00
function joinGroup ( $group ) { /* {{{ */
2010-11-24 15:43:08 +00:00
if ( $group -> isMember ( $this ))
return false ;
if ( ! $group -> addUser ( $this ))
return false ;
unset ( $this -> _groups );
return true ;
2010-11-22 14:53:28 +00:00
} /* }}} */
2010-11-24 15:43:08 +00:00
2011-10-10 14:08:52 +00:00
/**
* Removes the user from a group
2013-02-14 11:10:53 +00:00
* This function uses { @ link SeedDMS_Group :: removeUser } but checks before if
2011-10-10 14:08:52 +00:00
* the user is a member of the group at all .
*
* @ param object $group group to leave
* @ return boolean true on success or false in case of an error or the user
* is not a member of the group
*/
2010-11-22 14:53:28 +00:00
function leaveGroup ( $group ) { /* {{{ */
2010-11-24 15:43:08 +00:00
if ( ! $group -> isMember ( $this ))
return false ;
if ( ! $group -> removeUser ( $this ))
return false ;
unset ( $this -> _groups );
return true ;
2010-11-22 14:53:28 +00:00
} /* }}} */
2010-11-24 15:43:08 +00:00
2011-10-10 14:08:52 +00:00
/**
* Get all groups the user is a member of
*
* @ return array list of groups
*/
2010-11-22 14:53:28 +00:00
function getGroups () { /* {{{ */
2010-11-24 15:43:08 +00:00
$db = $this -> _dms -> getDB ();
if ( ! isset ( $this -> _groups ))
{
$queryStr = " SELECT `tblGroups`.*, `tblGroupMembers`.`userID` FROM `tblGroups` " .
" LEFT JOIN `tblGroupMembers` ON `tblGroups`.`id` = `tblGroupMembers`.`groupID` " .
" WHERE `tblGroupMembers`.`userID`=' " . $this -> _id . " ' " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
$this -> _groups = array ();
2015-04-22 15:20:57 +00:00
$classname = $this -> _dms -> getClassname ( 'group' );
2010-11-24 15:43:08 +00:00
foreach ( $resArr as $row ) {
2015-04-22 15:20:57 +00:00
$group = new $classname ( $row [ " id " ], $row [ " name " ], $row [ " comment " ]);
2012-09-11 12:55:54 +00:00
$group -> setDMS ( $this -> _dms );
2010-11-24 15:43:08 +00:00
array_push ( $this -> _groups , $group );
}
}
return $this -> _groups ;
2010-11-22 14:53:28 +00:00
} /* }}} */
2010-11-24 15:43:08 +00:00
2010-11-22 14:53:28 +00:00
/**
* Checks if user is member of a given group
*
2010-11-24 15:43:08 +00:00
* @ param object $group
2010-11-22 14:53:28 +00:00
* @ return boolean true if user is member of the given group otherwise false
*/
function isMemberOfGroup ( $group ) { /* {{{ */
2010-11-24 15:43:08 +00:00
return $group -> isMember ( $this );
2010-11-22 14:53:28 +00:00
} /* }}} */
/**
* Check if user has an image in its profile
*
* @ return boolean true if user has a picture of itself
*/
function hasImage () { /* {{{ */
2010-11-24 15:43:08 +00:00
if ( ! isset ( $this -> _hasImage )) {
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT COUNT(*) AS num FROM tblUserImages WHERE userID = " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
2012-01-12 17:02:00 +00:00
if ( $resArr === false )
2010-11-24 15:43:08 +00:00
return false ;
if ( $resArr [ 0 ][ " num " ] == 0 ) $this -> _hasImage = false ;
else $this -> _hasImage = true ;
}
return $this -> _hasImage ;
2010-11-22 14:53:28 +00:00
} /* }}} */
2010-11-24 15:43:08 +00:00
2010-12-21 17:39:16 +00:00
/**
* Get the image from the users profile
*
* @ return array image data
*/
function getImage () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT * FROM tblUserImages WHERE userID = " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
2012-01-12 17:02:00 +00:00
if ( $resArr === false )
2010-12-21 17:39:16 +00:00
return false ;
2012-01-12 17:02:00 +00:00
if ( $resArr )
$resArr = $resArr [ 0 ];
2010-12-21 17:39:16 +00:00
return $resArr ;
} /* }}} */
2010-11-24 15:43:08 +00:00
function setImage ( $tmpfile , $mimeType ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$fp = fopen ( $tmpfile , " rb " );
if ( ! $fp ) return false ;
$content = fread ( $fp , filesize ( $tmpfile ));
fclose ( $fp );
if ( $this -> hasImage ())
2011-12-01 21:20:58 +00:00
$queryStr = " UPDATE tblUserImages SET image = ' " . base64_encode ( $content ) . " ', mimeType = " . $db -> qstr ( $mimeType ) . " WHERE userID = " . $this -> _id ;
2010-11-24 15:43:08 +00:00
else
2011-12-01 21:20:58 +00:00
$queryStr = " INSERT INTO tblUserImages (userID, image, mimeType) VALUES ( " . $this -> _id . " , ' " . base64_encode ( $content ) . " ', " . $db -> qstr ( $mimeType ) . " ) " ;
2010-11-24 15:43:08 +00:00
if ( ! $db -> getResult ( $queryStr ))
return false ;
$this -> _hasImage = true ;
return true ;
} /* }}} */
2013-02-05 09:09:53 +00:00
/**
* Returns all documents of a given user
*
* @ param object $user
* @ return array list of documents
*/
function getDocuments () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser` " .
" FROM `tblDocuments` " .
" LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` " .
" WHERE `tblDocuments`.`owner` = " . $this -> _id . " ORDER BY `sequence` " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$documents = array ();
2015-04-22 15:20:57 +00:00
$classname = $this -> _dms -> getClassname ( 'document' );
2013-02-05 09:09:53 +00:00
foreach ( $resArr as $row ) {
2015-04-22 15:20:57 +00:00
$document = new $classname ( $row [ " id " ], $row [ " name " ], $row [ " comment " ], $row [ " date " ], $row [ " expires " ], $row [ " owner " ], $row [ " folder " ], $row [ " inheritAccess " ], $row [ " defaultAccess " ], $row [ " lockUser " ], $row [ " keywords " ], $row [ " sequence " ]);
2013-02-05 09:09:53 +00:00
$document -> setDMS ( $this -> _dms );
$documents [] = $document ;
}
return $documents ;
} /* }}} */
/**
* Returns all documents locked by a given user
*
* @ param object $user
* @ return array list of documents
*/
function getDocumentsLocked () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT `tblDocuments`.* " .
" FROM `tblDocumentLocks` LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentLocks`.`document` " .
" WHERE `tblDocumentLocks`.`userID` = ' " . $this -> _id . " ' " .
" ORDER BY `id` DESC " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$documents = array ();
2015-04-22 15:20:57 +00:00
$classname = $this -> _dms -> getClassname ( 'document' );
2013-02-05 09:09:53 +00:00
foreach ( $resArr as $row ) {
2015-04-22 15:20:57 +00:00
$document = new $classname ( $row [ " id " ], $row [ " name " ], $row [ " comment " ], $row [ " date " ], $row [ " expires " ], $row [ " owner " ], $row [ " folder " ], $row [ " inheritAccess " ], $row [ " defaultAccess " ], $row [ " lockUser " ], $row [ " keywords " ], $row [ " sequence " ]);
$document -> setDMS ( $this -> _dms );
$documents [] = $document ;
}
return $documents ;
} /* }}} */
/**
* Returns all documents check out by a given user
*
* @ param object $user
* @ return array list of documents
*/
function getDocumentsCheckOut () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT `tblDocuments`.* " .
" FROM `tblDocumentCheckOuts` LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentCheckOuts`.`document` " .
" WHERE `tblDocumentCheckOuts`.`userID` = ' " . $this -> _id . " ' " .
" ORDER BY `id` ASC " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$documents = array ();
$classname = $this -> _dms -> getClassname ( 'document' );
foreach ( $resArr as $row ) {
$document = new $classname ( $row [ " id " ], $row [ " name " ], $row [ " comment " ], $row [ " date " ], $row [ " expires " ], $row [ " owner " ], $row [ " folder " ], $row [ " inheritAccess " ], $row [ " defaultAccess " ], $row [ " lockUser " ], $row [ " keywords " ], $row [ " sequence " ]);
2013-02-05 09:09:53 +00:00
$document -> setDMS ( $this -> _dms );
$documents [] = $document ;
}
return $documents ;
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Get a list of reviews
* This function returns a list of all reviews seperated by individual
* and group reviews . If the document id
2015-04-20 11:43:40 +00:00
* is passed , then only this document will be checked for reviews . The
2011-10-12 06:16:44 +00:00
* same is true for the version of a document which limits the list
* further .
*
* For a detaile description of the result array see
2013-02-14 11:10:53 +00:00
* { link SeedDMS_Core_User :: getApprovalStatus } which does the same for
2013-02-11 07:47:52 +00:00
* approvals .
2011-10-12 06:16:44 +00:00
*
* @ param int $documentID optional document id for which to retrieve the
* reviews
* @ param int $version optional version of the document
* @ return array list of all reviews
*/
2010-11-24 15:43:08 +00:00
function getReviewStatus ( $documentID = null , $version = null ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$status = array ( " indstatus " => array (), " grpstatus " => array ());
// See if the user is assigned as an individual reviewer.
$queryStr = " SELECT `tblDocumentReviewers`.*, `tblDocumentReviewLog`.`status`, " .
" `tblDocumentReviewLog`.`comment`, `tblDocumentReviewLog`.`date`, " .
" `tblDocumentReviewLog`.`userID` " .
" FROM `tblDocumentReviewers` " .
" LEFT JOIN `tblDocumentReviewLog` USING (`reviewID`) " .
2011-10-12 06:16:44 +00:00
" WHERE `tblDocumentReviewers`.`type`='0' " .
2011-12-01 21:20:58 +00:00
( $documentID == null ? " " : " AND `tblDocumentReviewers`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentReviewers`.`version` = ' " . ( int ) $version . " ' " ) .
2011-10-12 06:16:44 +00:00
" AND `tblDocumentReviewers`.`required`=' " . $this -> _id . " ' " .
2013-01-24 08:29:30 +00:00
" ORDER BY `tblDocumentReviewLog`.`reviewLogID` DESC " ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
2013-02-06 13:55:05 +00:00
if ( is_bool ( $resArr ) && $resArr === false )
2010-11-24 15:43:08 +00:00
return false ;
if ( count ( $resArr ) > 0 ) {
2013-01-24 08:29:30 +00:00
foreach ( $resArr as $res ) {
if ( isset ( $status [ " indstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " indstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
2010-11-24 15:43:08 +00:00
}
// See if the user is the member of a group that has been assigned to
// review the document version.
$queryStr = " SELECT `tblDocumentReviewers`.*, `tblDocumentReviewLog`.`status`, " .
" `tblDocumentReviewLog`.`comment`, `tblDocumentReviewLog`.`date`, " .
" `tblDocumentReviewLog`.`userID` " .
" FROM `tblDocumentReviewers` " .
" LEFT JOIN `tblDocumentReviewLog` USING (`reviewID`) " .
" LEFT JOIN `tblGroupMembers` ON `tblGroupMembers`.`groupID` = `tblDocumentReviewers`.`required` " .
2011-10-12 06:16:44 +00:00
" WHERE `tblDocumentReviewers`.`type`='1' " .
2011-12-01 21:20:58 +00:00
( $documentID == null ? " " : " AND `tblDocumentReviewers`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentReviewers`.`version` = ' " . ( int ) $version . " ' " ) .
2011-10-12 06:16:44 +00:00
" AND `tblGroupMembers`.`userID`=' " . $this -> _id . " ' " .
2013-01-24 08:29:30 +00:00
" ORDER BY `tblDocumentReviewLog`.`reviewLogID` DESC " ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
2013-02-06 13:55:05 +00:00
if ( is_bool ( $resArr ) && $resArr === false )
2010-11-24 15:43:08 +00:00
return false ;
if ( count ( $resArr ) > 0 ) {
2013-01-24 08:29:30 +00:00
foreach ( $resArr as $res ) {
if ( isset ( $status [ " grpstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " grpstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
2010-11-24 15:43:08 +00:00
}
return $status ;
2010-11-22 14:53:28 +00:00
} /* }}} */
2010-11-24 15:43:08 +00:00
2011-10-12 06:16:44 +00:00
/**
* Get a list of approvals
* This function returns a list of all approvals seperated by individual
* and group approvals . If the document id
* is passed , then only this document will be checked for approvals . The
* same is true for the version of a document which limits the list
* further .
*
* The result array has two elements :
* - indstatus : which contains the approvals by individuals ( users )
* - grpstatus : which contains the approvals by groups
*
* Each element is itself an array of approvals with the following elements :
* - approveID : unique id of approval
* - documentID : id of document , that needs to be approved
* - version : version of document , that needs to be approved
* - type : 0 for individual approval , 1 for group approval
* - required : id of user who is required to do the approval
* - status : 0 not approved , ....
* - comment : comment given during approval
* - date : date of approval
* - userID : id of user who has done the approval
*
* @ param int $documentID optional document id for which to retrieve the
* approvals
* @ param int $version optional version of the document
* @ return array list of all approvals
*/
2010-11-24 15:43:08 +00:00
function getApprovalStatus ( $documentID = null , $version = null ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$status = array ( " indstatus " => array (), " grpstatus " => array ());
2011-11-29 07:18:19 +00:00
$queryStr =
" SELECT `tblDocumentApprovers`.*, `tblDocumentApproveLog`.`status`, " .
2011-10-12 06:16:44 +00:00
" `tblDocumentApproveLog`.`comment`, `tblDocumentApproveLog`.`date`, " .
" `tblDocumentApproveLog`.`userID` " .
" FROM `tblDocumentApprovers` " .
" LEFT JOIN `tblDocumentApproveLog` USING (`approveID`) " .
" WHERE `tblDocumentApprovers`.`type`='0' " .
2011-12-01 21:20:58 +00:00
( $documentID == null ? " " : " AND `tblDocumentApprovers`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentApprovers`.`version` = ' " . ( int ) $version . " ' " ) .
2011-10-12 06:16:44 +00:00
" AND `tblDocumentApprovers`.`required`=' " . $this -> _id . " ' " .
2013-01-24 08:29:30 +00:00
" ORDER BY `tblDocumentApproveLog`.`approveLogID` DESC " ;
2011-10-12 06:16:44 +00:00
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
if ( count ( $resArr ) > 0 ) {
2013-01-24 08:29:30 +00:00
foreach ( $resArr as $res ) {
if ( isset ( $status [ " indstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " indstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
2010-11-24 15:43:08 +00:00
}
// See if the user is the member of a group that has been assigned to
// approve the document version.
2011-10-12 06:16:44 +00:00
$queryStr =
" SELECT `tblDocumentApprovers`.*, `tblDocumentApproveLog`.`status`, " .
" `tblDocumentApproveLog`.`comment`, `tblDocumentApproveLog`.`date`, " .
" `tblDocumentApproveLog`.`userID` " .
" FROM `tblDocumentApprovers` " .
" LEFT JOIN `tblDocumentApproveLog` USING (`approveID`) " .
" LEFT JOIN `tblGroupMembers` ON `tblGroupMembers`.`groupID` = `tblDocumentApprovers`.`required` " .
" WHERE `tblDocumentApprovers`.`type`='1' " .
2011-12-01 21:20:58 +00:00
( $documentID == null ? " " : " AND `tblDocumentApprovers`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentApprovers`.`version` = ' " . ( int ) $version . " ' " ) .
2011-10-12 06:16:44 +00:00
" AND `tblGroupMembers`.`userID`=' " . $this -> _id . " ' " .
2013-01-24 08:29:30 +00:00
" ORDER BY `tblDocumentApproveLog`.`approveLogID` DESC " ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
if ( count ( $resArr ) > 0 ) {
2013-01-24 08:29:30 +00:00
foreach ( $resArr as $res ) {
if ( isset ( $status [ " grpstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " grpstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
2010-11-24 15:43:08 +00:00
}
return $status ;
} /* }}} */
2015-04-20 11:43:40 +00:00
/**
* Get a list of receipts
* This function returns a list of all receipts seperated by individual
* and group receipts . If the document id
* is passed , then only this document will be checked for receipts . The
* same is true for the version of a document which limits the list
* further .
*
* For a detaile description of the result array see
* { link SeedDMS_Core_User :: getApprovalStatus } which does the same for
* approvals .
*
* @ param int $documentID optional document id for which to retrieve the
* receipt
* @ param int $version optional version of the document
* @ return array list of all receipts
*/
function getReceiptStatus ( $documentID = null , $version = null ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$status = array ( " indstatus " => array (), " grpstatus " => array ());
// See if the user is assigned as an individual recipient.
$queryStr = " SELECT `tblDocumentRecipients`.*, `tblDocumentReceiptLog`.`status`, " .
" `tblDocumentReceiptLog`.`comment`, `tblDocumentReceiptLog`.`date`, " .
" `tblDocumentReceiptLog`.`userID` " .
" FROM `tblDocumentRecipients` " .
2015-04-20 16:32:56 +00:00
" LEFT JOIN `tblDocumentReceiptLog` USING (`receiptID`) " .
2015-04-20 11:43:40 +00:00
" WHERE `tblDocumentRecipients`.`type`='0' " .
( $documentID == null ? " " : " AND `tblDocumentRecipients`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentRecipients`.`version` = ' " . ( int ) $version . " ' " ) .
" AND `tblDocumentRecipients`.`required`=' " . $this -> _id . " ' " .
2015-04-20 16:32:56 +00:00
" ORDER BY `tblDocumentReceiptLog`.`receiptLogID` DESC " ;
2015-04-20 11:43:40 +00:00
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr === false )
return false ;
if ( count ( $resArr ) > 0 ) {
foreach ( $resArr as $res ) {
if ( isset ( $status [ " indstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " indstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
}
// See if the user is the member of a group that has been assigned to
// receipt the document version.
$queryStr = " SELECT `tblDocumentRecipients`.*, `tblDocumentReceiptLog`.`status`, " .
" `tblDocumentReceiptLog`.`comment`, `tblDocumentReceiptLog`.`date`, " .
" `tblDocumentReceiptLog`.`userID` " .
" FROM `tblDocumentRecipients` " .
2015-04-20 16:32:56 +00:00
" LEFT JOIN `tblDocumentReceiptLog` USING (`receiptID`) " .
2015-04-20 11:43:40 +00:00
" LEFT JOIN `tblGroupMembers` ON `tblGroupMembers`.`groupID` = `tblDocumentRecipients`.`required` " .
" WHERE `tblDocumentRecipients`.`type`='1' " .
( $documentID == null ? " " : " AND `tblDocumentRecipients`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentRecipients`.`version` = ' " . ( int ) $version . " ' " ) .
" AND `tblGroupMembers`.`userID`=' " . $this -> _id . " ' " .
2015-04-20 16:32:56 +00:00
" ORDER BY `tblDocumentReceiptLog`.`receiptLogID` DESC " ;
2015-04-20 11:43:40 +00:00
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr === false )
2015-04-22 08:31:36 +00:00
return false ;
if ( count ( $resArr ) > 0 ) {
foreach ( $resArr as $res ) {
if ( isset ( $status [ " grpstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " grpstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
}
return $status ;
} /* }}} */
/**
* Get a list of revisions
* This function returns a list of all revisions seperated by individual
* and group revisions . If the document id
* is passed , then only this document will be checked for revisions . The
* same is true for the version of a document which limits the list
* further .
*
* For a detaile description of the result array see
* { link SeedDMS_Core_User :: getApprovalStatus } which does the same for
* approvals .
*
* @ param int $documentID optional document id for which to retrieve the
* revisions
* @ param int $version optional version of the document
2015-05-11 07:29:34 +00:00
* @ return array list of all revisions . If the result array has no elements ,
* then the user was not a revisor . If there elements for 'indstatus' or
* 'grpstatus' then the revision hasn ' t been started .
2015-04-22 08:31:36 +00:00
*/
function getRevisionStatus ( $documentID = null , $version = null ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2015-05-11 07:29:34 +00:00
$status = array ();
2015-04-22 08:31:36 +00:00
2015-05-11 07:29:34 +00:00
// See if the user is assigned as an individual revisor.
$queryStr = " SELECT `tblDocumentRevisors`.*, `tblDocumentRevisionLog`.`status`, " .
2015-04-22 08:31:36 +00:00
" `tblDocumentRevisionLog`.`comment`, `tblDocumentRevisionLog`.`date`, " .
" `tblDocumentRevisionLog`.`userID` " .
2015-05-11 07:29:34 +00:00
" FROM `tblDocumentRevisors` " .
2015-04-22 08:31:36 +00:00
" LEFT JOIN `tblDocumentRevisionLog` USING (`revisionID`) " .
2015-05-11 07:29:34 +00:00
" WHERE `tblDocumentRevisors`.`type`='0' " .
( $documentID == null ? " " : " AND `tblDocumentRevisors`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentRevisors`.`version` = ' " . ( int ) $version . " ' " ) .
" AND `tblDocumentRevisors`.`required`=' " . $this -> _id . " ' " .
2015-04-22 08:31:36 +00:00
" ORDER BY `tblDocumentRevisionLog`.`revisionLogID` DESC " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr === false )
return false ;
if ( count ( $resArr ) > 0 ) {
2015-05-11 07:29:34 +00:00
$status [ 'indstatus' ] = array ();
2015-04-22 08:31:36 +00:00
foreach ( $resArr as $res ) {
2015-05-11 07:29:34 +00:00
if ( $res [ 'date' ]) {
if ( isset ( $status [ " indstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " indstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
2015-04-22 08:31:36 +00:00
$status [ " indstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
}
}
// See if the user is the member of a group that has been assigned to
// revision the document version.
2015-05-11 07:29:34 +00:00
$queryStr = " SELECT `tblDocumentRevisors`.*, `tblDocumentRevisionLog`.`status`, " .
2015-04-22 08:31:36 +00:00
" `tblDocumentRevisionLog`.`comment`, `tblDocumentRevisionLog`.`date`, " .
" `tblDocumentRevisionLog`.`userID` " .
2015-05-11 07:29:34 +00:00
" FROM `tblDocumentRevisors` " .
2015-04-22 08:31:36 +00:00
" LEFT JOIN `tblDocumentRevisionLog` USING (`revisionID`) " .
2015-05-11 07:29:34 +00:00
" LEFT JOIN `tblGroupMembers` ON `tblGroupMembers`.`groupID` = `tblDocumentRevisors`.`required` " .
" WHERE `tblDocumentRevisors`.`type`='1' " .
( $documentID == null ? " " : " AND `tblDocumentRevisors`.`documentID` = ' " . ( int ) $documentID . " ' " ) .
( $version == null ? " " : " AND `tblDocumentRevisors`.`version` = ' " . ( int ) $version . " ' " ) .
2015-04-22 08:31:36 +00:00
" AND `tblGroupMembers`.`userID`=' " . $this -> _id . " ' " .
" ORDER BY `tblDocumentRevisionLog`.`revisionLogID` DESC " ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr === false )
2015-04-20 11:43:40 +00:00
return false ;
if ( count ( $resArr ) > 0 ) {
2015-05-11 07:29:34 +00:00
$status [ 'grpstatus' ] = array ();
2015-04-20 11:43:40 +00:00
foreach ( $resArr as $res ) {
if ( isset ( $status [ " grpstatus " ][ $res [ 'documentID' ]])) {
if ( $status [ " grpstatus " ][ $res [ 'documentID' ]][ 'date' ] < $res [ 'date' ]) {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
} else {
$status [ " grpstatus " ][ $res [ 'documentID' ]] = $res ;
}
}
}
return $status ;
} /* }}} */
2013-02-02 16:01:10 +00:00
/**
* Get a list of documents with a workflow
*
* @ param int $documentID optional document id for which to retrieve the
* reviews
* @ param int $version optional version of the document
* @ return array list of all workflows
*/
function getWorkflowStatus ( $documentID = null , $version = null ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2013-02-05 09:09:53 +00:00
$queryStr = 'SELECT d.*, c.userid FROM tblWorkflowTransitions a LEFT JOIN tblWorkflows b ON a.workflow=b.id LEFT JOIN tblWorkflowTransitionUsers c ON a.id=c.transition LEFT JOIN tblWorkflowDocumentContent d ON b.id=d.workflow WHERE d.document IS NOT NULL AND a.state=d.state AND c.userid=' . $this -> _id ;
if ( $documentID ) {
$queryStr .= ' AND d.document=' . ( int ) $documentID ;
if ( $version )
$queryStr .= ' AND d.version=' . ( int ) $version ;
}
2013-02-02 16:01:10 +00:00
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
$result [ 'u' ] = array ();
if ( count ( $resArr ) > 0 ) {
foreach ( $resArr as $res ) {
$result [ 'u' ][] = $res ;
}
}
$queryStr = 'select d.*, c.groupid from tblWorkflowTransitions a left join tblWorkflows b on a.workflow=b.id left join tblWorkflowTransitionGroups c on a.id=c.transition left join tblWorkflowDocumentContent d on b.id=d.workflow left join tblGroupMembers e on c.groupid = e.groupID where d.document is not null and a.state=d.state and e.userID=' . $this -> _id ;
2013-02-05 09:09:53 +00:00
if ( $documentID ) {
$queryStr .= ' AND d.document=' . ( int ) $documentID ;
if ( $version )
$queryStr .= ' AND d.version=' . ( int ) $version ;
}
2013-02-02 16:01:10 +00:00
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
$result [ 'g' ] = array ();
if ( count ( $resArr ) > 0 ) {
foreach ( $resArr as $res ) {
$result [ 'g' ][] = $res ;
}
}
return $result ;
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Get a list of mandatory reviewers
* A user which isn ' t trusted completely may have assigned mandatory
* reviewers ( both users and groups ) .
* Whenever the user inserts a new document the mandatory reviewers are
* filled in as reviewers .
*
* @ return array list of arrays with two elements containing the user id
* ( reviewerUserID ) and group id ( reviewerGroupID ) of the reviewer .
*/
2010-11-24 15:43:08 +00:00
function getMandatoryReviewers () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT * FROM tblMandatoryReviewers WHERE userID = " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
2010-10-29 13:19:51 +00:00
return $resArr ;
2010-11-24 15:43:08 +00:00
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Get a list of mandatory approvers
2013-02-14 11:10:53 +00:00
* See { link SeedDMS_Core_User :: getMandatoryReviewers }
2011-10-12 06:16:44 +00:00
*
* @ return array list of arrays with two elements containing the user id
* ( approverUserID ) and group id ( approverGroupID ) of the approver .
*/
2010-11-24 15:43:08 +00:00
function getMandatoryApprovers () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT * FROM tblMandatoryApprovers WHERE userID = " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
2010-10-29 13:19:51 +00:00
return $resArr ;
2010-11-24 15:43:08 +00:00
} /* }}} */
2013-01-24 08:29:30 +00:00
/**
* Get the mandatory workflow
* A user which isn ' t trusted completely may have assigned mandatory
* workflow
* Whenever the user inserts a new document the mandatory workflow is
* filled in as the workflow .
*
* @ return object workflow
*/
function getMandatoryWorkflow () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT * FROM tblWorkflowMandatoryWorkflow WHERE userid = " . $this -> _id ;
$resArr = $db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
if ( ! $resArr )
return null ;
$workflow = $this -> _dms -> getWorkflow ( $resArr [ 0 ][ 'workflow' ]);
return $workflow ;
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Set a mandatory reviewer
* This function sets a mandatory reviewer if it isn ' t already set .
*
* @ param integer $id id of reviewer
* @ param boolean $isgroup true if $id is a group
* @ return boolean true on success , otherwise false
*/
2010-11-24 15:43:08 +00:00
function setMandatoryReviewer ( $id , $isgroup = false ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2010-10-29 13:19:51 +00:00
if ( $isgroup ){
2010-11-24 15:43:08 +00:00
2010-10-29 13:19:51 +00:00
$queryStr = " SELECT * FROM tblMandatoryReviewers WHERE userID = " . $this -> _id . " AND reviewerGroupID = " . $id ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
2011-10-12 06:16:44 +00:00
if ( count ( $resArr ) != 0 ) return true ;
2010-11-24 15:43:08 +00:00
$queryStr = " INSERT INTO tblMandatoryReviewers (userID, reviewerGroupID) VALUES ( " . $this -> _id . " , " . $id . " ) " ;
$resArr = $db -> getResult ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
2010-10-29 13:19:51 +00:00
} else {
2010-11-24 15:43:08 +00:00
2010-10-29 13:19:51 +00:00
$queryStr = " SELECT * FROM tblMandatoryReviewers WHERE userID = " . $this -> _id . " AND reviewerUserID = " . $id ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
2011-10-12 06:16:44 +00:00
if ( count ( $resArr ) != 0 ) return true ;
2010-11-24 15:43:08 +00:00
$queryStr = " INSERT INTO tblMandatoryReviewers (userID, reviewerUserID) VALUES ( " . $this -> _id . " , " . $id . " ) " ;
$resArr = $db -> getResult ( $queryStr );
2010-10-29 13:19:51 +00:00
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
2010-11-24 15:43:08 +00:00
}
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Set a mandatory approver
* This function sets a mandatory approver if it isn ' t already set .
*
* @ param integer $id id of approver
* @ param boolean $isgroup true if $id is a group
* @ return boolean true on success , otherwise false
*/
2010-11-24 15:43:08 +00:00
function setMandatoryApprover ( $id , $isgroup = false ) { /* {{{ */
$db = $this -> _dms -> getDB ();
2010-10-29 13:19:51 +00:00
if ( $isgroup ){
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblMandatoryApprovers WHERE userID = " . $this -> _id . " AND approverGroupID = " . ( int ) $id ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
2010-10-29 13:19:51 +00:00
if ( count ( $resArr ) != 0 ) return ;
2010-11-24 15:43:08 +00:00
$queryStr = " INSERT INTO tblMandatoryApprovers (userID, approverGroupID) VALUES ( " . $this -> _id . " , " . $id . " ) " ;
$resArr = $db -> getResult ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
2010-10-29 13:19:51 +00:00
} else {
2010-11-24 15:43:08 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblMandatoryApprovers WHERE userID = " . $this -> _id . " AND approverUserID = " . ( int ) $id ;
2010-11-24 15:43:08 +00:00
$resArr = $db -> getResultArray ( $queryStr );
2010-10-29 13:19:51 +00:00
if ( count ( $resArr ) != 0 ) return ;
2010-11-24 15:43:08 +00:00
$queryStr = " INSERT INTO tblMandatoryApprovers (userID, approverUserID) VALUES ( " . $this -> _id . " , " . $id . " ) " ;
$resArr = $db -> getResult ( $queryStr );
2010-10-29 13:19:51 +00:00
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
}
2010-11-24 15:43:08 +00:00
} /* }}} */
2013-01-24 08:29:30 +00:00
/**
* Set a mandatory workflow
* This function sets a mandatory workflow if it isn ' t already set .
*
* @ param object $workflow workflow
* @ return boolean true on success , otherwise false
*/
function setMandatoryWorkflow ( $workflow ) { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " SELECT * FROM tblWorkflowMandatoryWorkflow WHERE userid = " . $this -> _id . " AND workflow = " . ( int ) $workflow -> getID ();
$resArr = $db -> getResultArray ( $queryStr );
if ( count ( $resArr ) != 0 ) return ;
$queryStr = " INSERT INTO tblWorkflowMandatoryWorkflow (userid, workflow) VALUES ( " . $this -> _id . " , " . $workflow -> getID () . " ) " ;
$resArr = $db -> getResult ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Deletes all mandatory reviewers
*
* @ return boolean true on success , otherwise false
*/
2010-11-24 15:43:08 +00:00
function delMandatoryReviewers () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " DELETE FROM tblMandatoryReviewers WHERE userID = " . $this -> _id ;
2010-10-29 13:19:51 +00:00
if ( ! $db -> getResult ( $queryStr )) return false ;
2011-10-12 06:16:44 +00:00
return true ;
2010-11-24 15:43:08 +00:00
} /* }}} */
2011-10-12 06:16:44 +00:00
/**
* Deletes all mandatory approvers
*
* @ return boolean true on success , otherwise false
*/
2010-11-24 15:43:08 +00:00
function delMandatoryApprovers () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " DELETE FROM tblMandatoryApprovers WHERE userID = " . $this -> _id ;
2010-10-29 13:19:51 +00:00
if ( ! $db -> getResult ( $queryStr )) return false ;
2011-10-12 06:16:44 +00:00
return true ;
2010-11-24 15:43:08 +00:00
} /* }}} */
2011-10-10 14:08:52 +00:00
2013-01-24 08:29:30 +00:00
/**
* Deletes the mandatory workflow
*
* @ return boolean true on success , otherwise false
*/
function delMandatoryWorkflow () { /* {{{ */
$db = $this -> _dms -> getDB ();
$queryStr = " DELETE FROM tblWorkflowMandatoryWorkflow WHERE userid = " . $this -> _id ;
if ( ! $db -> getResult ( $queryStr )) return false ;
return true ;
} /* }}} */
2010-11-24 15:43:08 +00:00
}
?>