2010-11-12 22:40:12 +00:00
< ? php
2010-11-30 12:23:46 +00:00
/**
* Implementation of the document management system
*
* @ category DMS
2011-01-20 14:03:10 +00:00
* @ package LetoDMS_Core
2010-11-30 12:23:46 +00:00
* @ license GPL 2
* @ version @ version @
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2010 , Uwe Steinmann
* @ version Release : @ package_version @
*/
2010-11-12 22:40:12 +00:00
2010-11-30 12:23:46 +00:00
/**
* Include some files
*/
2010-11-22 20:42:19 +00:00
require_once ( " inc.AccessUtils.php " );
2010-11-25 21:04:53 +00:00
require_once ( " inc.FileUtils.php " );
2010-11-27 20:52:03 +00:00
require_once ( " inc.ClassAccess.php " );
2010-11-12 22:40:12 +00:00
require_once ( " inc.ClassFolder.php " );
require_once ( " inc.ClassDocument.php " );
2010-11-27 20:52:03 +00:00
require_once ( " inc.ClassGroup.php " );
require_once ( " inc.ClassUser.php " );
require_once ( " inc.ClassKeywords.php " );
2010-12-22 19:48:08 +00:00
require_once ( " inc.ClassNotification.php " );
2010-11-12 22:40:12 +00:00
/**
2010-12-22 19:48:08 +00:00
* Class to represent the complete document management system .
* This class is needed to do most of the dms operations . It needs
2011-01-20 08:18:37 +00:00
* an instance of { @ link LetoDMS_Core_DatabaseAccess } to access the
2010-12-22 19:48:08 +00:00
* underlying database . Many methods are factory functions which create
* objects representing the entities in the dms , like folders , documents ,
* users , or groups .
*
2011-01-20 14:26:02 +00:00
* Each dms has its own database for meta data and a data store for document
* content . Both must be specified when creating a new instance of this class .
* All folders and documents are organized in a hierachy like
2010-12-22 19:48:08 +00:00
* a regular file system starting with a { @ link $rootFolderID }
*
* This class does not enforce any access rights on documents and folders
* by design . It is up to the calling application to use the methods
2011-01-20 08:18:37 +00:00
* { @ link LetoDMS_Core_Folder :: getAccessMode } and
* { @ link LetoDMS_Core_Document :: getAccessMode } and interpret them as desired .
2011-01-14 19:40:38 +00:00
* Though , there are two convinient functions to filter a list of
* documents / folders for which users have access rights for . See
2011-01-20 08:18:37 +00:00
* { @ link LetoDMS_Core_DMS :: filterAccess }
* and { @ link LetoDMS_Core_DMS :: filterUsersByAccess }
2010-12-22 19:48:08 +00:00
*
* Though , this class has two methods to set the currently logged in user
* ({ @ link setUser } and { @ link login }), none of them need to be called , because
* there is currently no class within the LetoDMS core which needs the logged
* in user .
*
* < code >
* < ? php
* include ( " inc/inc.ClassDMS.php " );
2011-01-20 08:18:37 +00:00
* $db = new LetoDMS_Core_DatabaseAccess ( $type , $hostname , $user , $passwd , $name );
2010-12-22 19:48:08 +00:00
* $db -> connect () or die ( " Could not connect to db-server " );
2011-01-20 08:18:37 +00:00
* $dms = new LetoDMS_Core_DMS ( $db , $contentDir );
2010-12-22 19:48:08 +00:00
* $dms -> setRootFolderID ( 1 );
* ...
* ?>
* </ code >
2010-11-12 22:40:12 +00:00
*
* @ category DMS
2011-01-20 14:03:10 +00:00
* @ package LetoDMS_Core
2010-11-30 12:23:46 +00:00
* @ version @ version @
2010-11-12 22:40:12 +00:00
* @ author Uwe Steinmann < uwe @ steinmann . cx >
* @ copyright Copyright ( C ) 2010 , Uwe Steinmann
* @ version Release : @ package_version @
*/
2011-01-20 08:18:37 +00:00
class LetoDMS_Core_DMS {
2010-11-12 22:40:12 +00:00
/**
2010-11-30 12:23:46 +00:00
* @ var object $db reference to database object . This must be an instance
2011-01-20 08:18:37 +00:00
* of { @ link LetoDMS_Core_DatabaseAccess } .
2010-11-12 22:40:12 +00:00
* @ access protected
*/
protected $db ;
2010-11-15 12:01:21 +00:00
/**
2010-11-30 12:23:46 +00:00
* @ var object $user reference to currently logged in user . This must be
2011-01-20 08:18:37 +00:00
* an instance of { @ link LetoDMS_Core_User } . This variable is currently not
2010-12-22 19:48:08 +00:00
* used . It is set by { @ link setUser } .
* @ access private
2010-11-15 12:01:21 +00:00
*/
2010-12-22 19:48:08 +00:00
private $user ;
2010-11-15 12:01:21 +00:00
2010-11-12 22:40:12 +00:00
/**
2010-11-30 12:23:46 +00:00
* @ var string $contentDir location in the file system where all the
2010-12-22 19:48:08 +00:00
* document data is located . This should be an absolute path .
2010-11-12 22:40:12 +00:00
* @ access public
*/
public $contentDir ;
2010-11-15 21:08:07 +00:00
/**
* @ var integer $rootFolderID ID of root folder
* @ access public
*/
public $rootFolderID ;
2010-11-18 10:32:10 +00:00
/**
2010-12-22 19:48:08 +00:00
* @ var boolean $enableConverting set to true if conversion of content
* is desired
2010-11-18 10:32:10 +00:00
* @ access public
*/
public $enableConverting ;
/**
* @ var array $convertFileTypes list of files types that shall be converted
* @ access public
*/
public $convertFileTypes ;
2010-11-25 21:04:53 +00:00
/**
* @ var array $viewOnlineFileTypes list of files types that can be viewed
* online
* @ access public
*/
public $viewOnlineFileTypes ;
2011-02-03 15:10:46 +00:00
/**
* @ var string $version version of pear package
* @ access public
*/
public $version ;
2010-11-22 20:42:19 +00:00
/**
* Filter objects out which are not accessible in a given mode by a user .
*
* @ param array $objArr list of objects ( either documents or folders )
* @ param object $user user for which access is checked
* @ param integer $minMode minimum access mode required
* @ return array filtered list of objects
*/
static function filterAccess ( $objArr , $user , $minMode ) { /* {{{ */
if ( ! is_array ( $objArr )) {
return array ();
}
$newArr = array ();
foreach ( $objArr as $obj ) {
if ( $obj -> getAccessMode ( $user ) >= $minMode )
array_push ( $newArr , $obj );
}
return $newArr ;
} /* }}} */
/**
* Filter users out which cannot access an object in a given mode .
*
* @ param object $obj object that shall be accessed
* @ param array $users list of users which are to check for sufficient
* access rights
* @ param integer $minMode minimum access right on the object for each user
* @ return array filtered list of users
*/
static function filterUsersByAccess ( $obj , $users , $minMode ) { /* {{{ */
$newArr = array ();
foreach ( $users as $currUser ) {
if ( $obj -> getAccessMode ( $currUser ) >= $minMode )
array_push ( $newArr , $currUser );
}
return $newArr ;
} /* }}} */
2010-12-22 19:48:08 +00:00
/**
* Create a new instance of the dms
*
* @ param object $db object to access the underlying database
* @ param string $contentDir path in filesystem containing the data store
* all document contents is stored
2011-01-20 08:18:37 +00:00
* @ return object instance of LetoDMS_Core_DMS
2010-12-22 19:48:08 +00:00
*/
function __construct ( $db , $contentDir ) { /* {{{ */
2010-11-12 22:40:12 +00:00
$this -> db = $db ;
2010-12-22 19:48:08 +00:00
if ( substr ( $contentDir , - 1 ) == '/' )
$this -> contentDir = $contentDir ;
else
$this -> contentDir = $contentDir . '/' ;
2010-11-15 21:08:07 +00:00
$this -> rootFolderID = 1 ;
2011-12-08 18:36:57 +00:00
$this -> maxDirID = 0 ; //31998;
2010-11-18 10:32:10 +00:00
$this -> enableAdminRevApp = false ;
$this -> enableConverting = false ;
$this -> convertFileTypes = array ();
2011-02-03 15:10:46 +00:00
$this -> version = '@package_version@' ;
if ( $this -> version [ 0 ] == '@' )
2012-08-28 07:28:16 +00:00
$this -> version = '3.4.0' ;
2010-11-15 21:08:07 +00:00
} /* }}} */
2010-11-16 09:07:19 +00:00
function getDB () { /* {{{ */
return $this -> db ;
} /* }}} */
2011-02-03 15:10:46 +00:00
/**
* Return the database version
*
* @ return array array with elements major , minor , subminor , date
*/
function getDBVersion () { /* {{{ */
$tbllist = $this -> db -> TableList ();
2011-03-23 13:28:17 +00:00
$tbllist = explode ( ',' , strtolower ( join ( ',' , $tbllist )));
if ( ! array_search ( 'tblversion' , $tbllist ))
2011-02-03 15:10:46 +00:00
return false ;
$queryStr = " SELECT * FROM tblVersion order by major,minor,subminor limit 1 " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
if ( count ( $resArr ) != 1 )
return false ;
$resArr = $resArr [ 0 ];
return $resArr ;
} /* }}} */
/**
* Check if the version in the database is the same as of this package
* Only the major and minor version number will be checked .
*
2011-11-28 14:03:01 +00:00
* @ return boolean returns false if versions do not match , but returns
* true if version matches or table tblVersion does not exists .
2011-02-03 15:10:46 +00:00
*/
function checkVersion () { /* {{{ */
$tbllist = $this -> db -> TableList ();
2011-03-23 13:28:17 +00:00
$tbllist = explode ( ',' , strtolower ( join ( ',' , $tbllist )));
if ( ! array_search ( 'tblversion' , $tbllist ))
2011-11-28 14:03:01 +00:00
return true ;
2011-02-03 15:10:46 +00:00
$queryStr = " SELECT * FROM tblVersion order by major,minor,subminor limit 1 " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
if ( count ( $resArr ) != 1 )
return false ;
$resArr = $resArr [ 0 ];
$ver = explode ( '.' , $this -> version );
if (( $resArr [ 'major' ] != $ver [ 0 ]) || ( $resArr [ 'minor' ] != $ver [ 1 ]))
return false ;
return true ;
} /* }}} */
2010-12-22 19:48:08 +00:00
/**
* Set id of root folder
* This function must be called right after creating an instance of
2011-01-20 08:18:37 +00:00
* LetoDMS_Core_DMS
2010-12-22 19:48:08 +00:00
*
* @ param interger $id id of root folder
*/
2010-11-15 21:08:07 +00:00
function setRootFolderID ( $id ) { /* {{{ */
$this -> rootFolderID = $id ;
} /* }}} */
2010-12-22 19:48:08 +00:00
/**
2011-12-08 18:36:57 +00:00
* Set maximum number of subdirectories per directory
*
* The value of maxDirID is quite crucial because , all documents are
* associated with a directory in the filesystem . Consequently , there is
* maximum number of documents , because depending on the file system
* the maximum number of subdirectories is limited . Since version 3.3 . 0 of
* letodms an additional directory level has been introduced . All documents
* from 1 to maxDirID - 1 will be saved in 1 /< docid > , documents from maxDirID
* to 2 * maxDirID - 1 are stored in 2 /< docid > and so on .
*
* This function must be called right after creating an instance of
* LetoDMS_Core_DMS
*
* @ param interger $id id of root folder
*/
function setMaxDirID ( $id ) { /* {{{ */
$this -> maxDirID = $id ;
} /* }}} */
/**
2010-12-22 19:48:08 +00:00
* Get root folder
*
* @ return object / boolean return the object of the root folder or false if
* the root folder id was not set before with { @ link setRootFolderID } .
*/
2010-12-01 13:36:33 +00:00
function getRootFolder () { /* {{{ */
2010-12-22 19:48:08 +00:00
if ( ! $this -> rootFolderID ) return false ;
2010-12-01 13:36:33 +00:00
return $this -> getFolder ( $this -> rootFolderID );
} /* }}} */
2010-11-16 09:07:19 +00:00
function setEnableAdminRevApp ( $enable ) { /* {{{ */
$this -> enableAdminRevApp = $enable ;
} /* }}} */
2010-11-18 10:32:10 +00:00
function setEnableConverting ( $enable ) { /* {{{ */
$this -> enableConverting = $enable ;
} /* }}} */
function setConvertFileTypes ( $types ) { /* {{{ */
$this -> convertFileTypes = $types ;
} /* }}} */
2010-11-25 21:04:53 +00:00
function setViewOnlineFileTypes ( $types ) { /* {{{ */
$this -> viewOnlineFileTypes = $types ;
} /* }}} */
2010-11-15 12:01:21 +00:00
/**
* Login as a user
*
2010-12-22 19:48:08 +00:00
* Checks if the given credentials are valid and returns a user object .
2010-11-15 12:01:21 +00:00
* It also sets the property $user for later access on the currently
* logged in user
*
* @ param string $username login name of user
* @ param string $password password of user
*
2011-01-20 08:18:37 +00:00
* @ return object instance of class LetoDMS_Core_User or false
2010-11-15 12:01:21 +00:00
*/
function login ( $username , $password ) { /* {{{ */
} /* }}} */
/**
* Set the logged in user
*
2010-11-23 14:56:25 +00:00
* If user authentication was done externally , this function can
2010-11-15 12:01:21 +00:00
* be used to tell the dms who is currently logged in .
*
* @ param object $user
*
*/
function setUser ( $user ) { /* {{{ */
$this -> user = $user ;
} /* }}} */
2010-11-12 22:40:12 +00:00
/**
* Return a document by its id
*
* This function retrieves a document from the database by its id .
*
* @ param integer $id internal id of document
2011-01-20 08:18:37 +00:00
* @ return object instance of LetoDMS_Core_Document or false
2010-11-12 22:40:12 +00:00
*/
function getDocument ( $id ) { /* {{{ */
if ( ! is_numeric ( $id )) return false ;
2010-12-01 13:36:33 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblDocuments WHERE id = " . ( int ) $id ;
2010-11-12 22:40:12 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
if ( count ( $resArr ) != 1 )
return false ;
$resArr = $resArr [ 0 ];
2010-12-01 13:36:33 +00:00
2010-11-12 22:40:12 +00:00
// New Locking mechanism uses a separate table to track the lock.
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblDocumentLocks WHERE document = " . ( int ) $id ;
2010-11-12 22:40:12 +00:00
$lockArr = $this -> db -> getResultArray ( $queryStr );
if (( is_bool ( $lockArr ) && $lockArr == false ) || ( count ( $lockArr ) == 0 )) {
// Could not find a lock on the selected document.
$lock = - 1 ;
}
else {
// A lock has been identified for this document.
$lock = $lockArr [ 0 ][ " userID " ];
}
2010-12-01 13:36:33 +00:00
2011-01-20 08:18:37 +00:00
$document = new LetoDMS_Core_Document ( $resArr [ " id " ], $resArr [ " name " ], $resArr [ " comment " ], $resArr [ " date " ], $resArr [ " expires " ], $resArr [ " owner " ], $resArr [ " folder " ], $resArr [ " inheritAccess " ], $resArr [ " defaultAccess " ], $lock , $resArr [ " keywords " ], $resArr [ " sequence " ]);
2010-11-12 22:40:12 +00:00
$document -> setDMS ( $this );
return $document ;
} /* }}} */
2010-11-22 14:49:29 +00:00
/**
* Returns all documents of a given user
*
* @ param object $user
* @ return array list of documents
*/
function getDocumentsByUser ( $user ) { /* {{{ */
$queryStr = " SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser` " .
" FROM `tblDocuments` " .
" LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` " .
" WHERE `tblDocuments`.`owner` = " . $user -> getID () . " ORDER BY `sequence` " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$documents = array ();
foreach ( $resArr as $row ) {
2011-01-20 08:18:37 +00:00
$document = new LetoDMS_Core_Document ( $row [ " id " ], $row [ " name " ], $row [ " comment " ], $row [ " date " ], $row [ " expires " ], $row [ " owner " ], $row [ " folder " ], $row [ " inheritAccess " ], $row [ " defaultAccess " ], $row [ " lockUser " ], $row [ " keywords " ], $row [ " sequence " ]);
2010-12-01 13:36:33 +00:00
$document -> setDMS ( $this );
$documents [] = $document ;
2010-11-22 14:49:29 +00:00
}
return $documents ;
} /* }}} */
2012-08-28 07:28:16 +00:00
/**
* Returns all documents locked by a given user
* FIXME : Not full implemented . Do not use , because it still requires the
* temporary tables !
*
* @ param object $user
* @ return array list of documents
*/
function getDocumentsLockedByUser ( $user ) { /* {{{ */
$queryStr = " SELECT `tblDocuments`.* " .
" FROM `tblDocuments` LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id` = `tblDocumentLocks`.`document` " .
" WHERE `tblDocumentLocks`.`userID` = ' " . $user -> getID () . " ' " .
" ORDER BY `id` DESC " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$documents = array ();
foreach ( $resArr as $row ) {
$document = new LetoDMS_Core_Document ( $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 );
$documents [] = $document ;
}
return $documents ;
} /* }}} */
2010-12-01 13:36:33 +00:00
/**
* Returns a document by its name
*
* This function searches a document by its name and restricts the search
* to given folder if passed as the second parameter .
*
* @ param string $name
* @ param object $folder
* @ return object / boolean found document or false
*/
function getDocumentByName ( $name , $folder = null ) { /* {{{ */
if ( ! $name ) return false ;
$queryStr = " SELECT `tblDocuments`.*, `tblDocumentLocks`.`userID` as `lockUser` " .
" FROM `tblDocuments` " .
" LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` " .
2011-12-01 21:20:58 +00:00
" WHERE `tblDocuments`.`name` = " . $this -> db -> qstr ( $name );
2010-12-01 13:36:33 +00:00
if ( $folder )
$queryStr .= " AND `tblDocuments`.`folder` = " . $folder -> getID ();
$queryStr .= " LIMIT 1 " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
if ( ! $resArr )
return false ;
$row = $resArr [ 0 ];
2011-01-20 08:18:37 +00:00
$document = new LetoDMS_Core_Document ( $row [ " id " ], $row [ " name " ], $row [ " comment " ], $row [ " date " ], $row [ " expires " ], $row [ " owner " ], $row [ " folder " ], $row [ " inheritAccess " ], $row [ " defaultAccess " ], $row [ " lockUser " ], $row [ " keywords " ], $row [ " sequence " ]);
2010-12-01 13:36:33 +00:00
$document -> setDMS ( $this );
return $document ;
} /* }}} */
2010-11-12 22:40:12 +00:00
/*
* Search the database for documents
*
* @ param query string seach query with space separated words
* @ param limit integer number of items in result set
* @ param offset integer index of first item in result set
2012-01-17 08:36:08 +00:00
* @ param logicalmode string either AND or OR
2010-11-12 22:40:12 +00:00
* @ param searchin array () list of fields to search in
2011-11-28 14:03:01 +00:00
* 1 = keywords , 2 = name , 3 = comment
2010-11-12 22:40:12 +00:00
* @ param startFolder object search in the folder only ( null for root folder )
* @ param owner object search for documents owned by this user
* @ param status array list of status
* @ param creationstartdate array search for documents created after this date
* @ param creationenddate array search for documents created before this date
2011-12-06 12:31:20 +00:00
* @ param categories array list of categories the documents must have assigned
* @ param mode int decide whether to search for documents / folders
* 0x1 = documents only
* 0x2 = folders only
* 0x3 = both
2010-11-12 22:40:12 +00:00
* @ return array containing the elements total and docs
*/
2012-01-17 08:36:08 +00:00
function search ( $query , $limit = 0 , $offset = 0 , $logicalmode = 'AND' , $searchin = array (), $startFolder = null , $owner = null , $status = array (), $creationstartdate = array (), $creationenddate = array (), $categories = array (), $mode = 0x3 ) { /* {{{ */
2010-11-12 22:40:12 +00:00
// Split the search string into constituent keywords.
$tkeys = array ();
if ( strlen ( $query ) > 0 ) {
2011-04-12 07:19:55 +00:00
$tkeys = preg_split ( " /[ \t \r \n ,]+/ " , $query );
2010-11-12 22:40:12 +00:00
}
2010-12-01 13:36:33 +00:00
2010-11-12 22:40:12 +00:00
// if none is checkd search all
if ( count ( $searchin ) == 0 )
$searchin = array ( 0 , 1 , 2 , 3 );
2011-11-28 14:03:01 +00:00
/*--------- Do it all over again for folders -------------*/
2011-12-06 12:31:20 +00:00
if ( $mode & 0x2 ) {
2011-11-28 14:03:01 +00:00
$searchKey = " " ;
// Assemble the arguments for the concatenation function. This allows the
// search to be carried across all the relevant fields.
$concatFunction = " " ;
if ( in_array ( 2 , $searchin )) {
$concatFunction = ( strlen ( $concatFunction ) == 0 ? " " : $concatFunction . " , " ) . " `tblFolders`.`name` " ;
2012-02-13 08:31:01 +00:00
$searchFields [] = " `tblFolders`.`name` " ;
2011-11-28 14:03:01 +00:00
}
if ( in_array ( 3 , $searchin )) {
$concatFunction = ( strlen ( $concatFunction ) == 0 ? " " : $concatFunction . " , " ) . " `tblFolders`.`comment` " ;
2012-02-13 08:31:01 +00:00
$searchFields [] = " `tblFolders`.`comment` " ;
2011-11-28 14:03:01 +00:00
}
if ( strlen ( $concatFunction ) > 0 && count ( $tkeys ) > 0 ) {
$concatFunction = " CONCAT_WS(' ', " . $concatFunction . " ) " ;
foreach ( $tkeys as $key ) {
$key = trim ( $key );
if ( strlen ( $key ) > 0 ) {
2012-02-13 08:31:01 +00:00
//$searchKey = (strlen($searchKey)==0 ? "" : $searchKey." ".$logicalmode." ").$concatFunction." LIKE ".$this->db->qstr('%'.$key.'%');
$searchKey = ( strlen ( $searchKey ) == 0 ? " " : $searchKey . " " . $logicalmode . " " ) . " ( " . implode ( " like " . $this -> db -> qstr ( " % " . $key . " % " ) . " OR " , $searchFields ) . " like " . $this -> db -> qstr ( " % " . $key . " % " ) . " ) " ;
2011-11-28 14:03:01 +00:00
}
}
}
// Check to see if the search has been restricted to a particular sub-tree in
// the folder hierarchy.
$searchFolder = " " ;
if ( $startFolder ) {
$searchFolder = " `tblFolders`.`folderList` LIKE '%: " . $startFolder -> getID () . " :%' " ;
}
// Check to see if the search has been restricted to a particular
// document owner.
$searchOwner = " " ;
if ( $owner ) {
$searchOwner = " `tblFolders`.`owner` = ' " . $owner -> getId () . " ' " ;
}
// Is the search restricted to documents created between two specific dates?
$searchCreateDate = " " ;
if ( $creationstartdate ) {
$startdate = makeTimeStamp ( 0 , 0 , 0 , $creationstartdate [ 'year' ], $creationstartdate [ " month " ], $creationstartdate [ " day " ]);
if ( $startdate ) {
$searchCreateDate .= " `tblFolders`.`date` >= " . $startdate ;
}
}
if ( $creationenddate ) {
$stopdate = makeTimeStamp ( 23 , 59 , 59 , $creationenddate [ " year " ], $creationenddate [ " month " ], $creationenddate [ " day " ]);
if ( $stopdate ) {
if ( $startdate )
$searchCreateDate .= " AND " ;
$searchCreateDate .= " `tblFolders`.`date` <= " . $stopdate ;
}
}
$searchQuery = " FROM `tblFolders` WHERE 1=1 " ;
if ( strlen ( $searchKey ) > 0 ) {
$searchQuery .= " AND ( " . $searchKey . " ) " ;
}
if ( strlen ( $searchFolder ) > 0 ) {
$searchQuery .= " AND " . $searchFolder ;
}
if ( strlen ( $searchOwner ) > 0 ) {
$searchQuery .= " AND ( " . $searchOwner . " ) " ;
}
if ( strlen ( $searchCreateDate ) > 0 ) {
$searchQuery .= " AND ( " . $searchCreateDate . " ) " ;
}
// Count the number of rows that the search will produce.
$resArr = $this -> db -> getResultArray ( " SELECT COUNT(*) AS num " . $searchQuery );
$totalFolders = 0 ;
if ( is_numeric ( $resArr [ 0 ][ " num " ]) && $resArr [ 0 ][ " num " ] > 0 ) {
$totalFolders = ( integer ) $resArr [ 0 ][ " num " ];
}
// If there are no results from the count query, then there is no real need
// to run the full query. TODO: re-structure code to by-pass additional
// queries when no initial results are found.
// Only search if the offset is not beyond the number of folders
if ( $totalFolders > $offset ) {
// Prepare the complete search query, including the LIMIT clause.
$searchQuery = " SELECT `tblFolders`.* " . $searchQuery ;
if ( $limit ) {
$searchQuery .= " LIMIT " . $offset . " , " . $limit ;
}
// Send the complete search query to the database.
$resArr = $this -> db -> getResultArray ( $searchQuery );
} else {
$resArr = array ();
}
// ------------------- Ausgabe der Ergebnisse ----------------------------
$numResults = count ( $resArr );
if ( $numResults == 0 ) {
$folderresult = array ( 'totalFolders' => $totalFolders , 'folders' => array ());
} else {
foreach ( $resArr as $folderArr ) {
$folders [] = $this -> getFolder ( $folderArr [ 'id' ]);
}
$folderresult = array ( 'totalFolders' => $totalFolders , 'folders' => $folders );
}
} else {
$folderresult = array ( 'totalFolders' => 0 , 'folders' => array ());
}
/*--------- Do it all over again for documents -------------*/
2011-12-06 12:31:20 +00:00
if ( $mode & 0x1 ) {
$searchKey = " " ;
// Assemble the arguments for the concatenation function. This allows the
// search to be carried across all the relevant fields.
$concatFunction = " " ;
2012-02-13 08:31:01 +00:00
$searchFields = array ();
2011-12-06 12:31:20 +00:00
if ( in_array ( 1 , $searchin )) {
$concatFunction = " `tblDocuments`.`keywords` " ;
2012-02-13 08:31:01 +00:00
$searchFields [] = " `tblDocuments`.`keywords` " ;
2011-12-06 12:31:20 +00:00
}
if ( in_array ( 2 , $searchin )) {
$concatFunction = ( strlen ( $concatFunction ) == 0 ? " " : $concatFunction . " , " ) . " `tblDocuments`.`name` " ;
2012-02-13 08:31:01 +00:00
$searchFields [] = " `tblDocuments`.`name` " ;
2011-12-06 12:31:20 +00:00
}
if ( in_array ( 3 , $searchin )) {
$concatFunction = ( strlen ( $concatFunction ) == 0 ? " " : $concatFunction . " , " ) . " `tblDocuments`.`comment` " ;
2012-02-13 08:31:01 +00:00
$searchFields [] = " `tblDocuments`.`comment` " ;
2011-12-06 12:31:20 +00:00
}
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
if ( strlen ( $concatFunction ) > 0 && count ( $tkeys ) > 0 ) {
$concatFunction = " CONCAT_WS(' ', " . $concatFunction . " ) " ;
foreach ( $tkeys as $key ) {
$key = trim ( $key );
if ( strlen ( $key ) > 0 ) {
2012-02-13 08:31:01 +00:00
//$searchKey = (strlen($searchKey)==0 ? "" : $searchKey." ".$logicalmode." ").$concatFunction." LIKE ".$this->db->qstr('%'.$key.'%');
$searchKey = ( strlen ( $searchKey ) == 0 ? " " : $searchKey . " " . $logicalmode . " " ) . " ( " . implode ( " like " . $this -> db -> qstr ( " % " . $key . " % " ) . " OR " , $searchFields ) . " like " . $this -> db -> qstr ( " % " . $key . " % " ) . " ) " ;
2011-12-06 12:31:20 +00:00
}
2010-11-12 22:40:12 +00:00
}
}
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
// Check to see if the search has been restricted to a particular sub-tree in
// the folder hierarchy.
$searchFolder = " " ;
if ( $startFolder ) {
$searchFolder = " `tblDocuments`.`folderList` LIKE '%: " . $startFolder -> getID () . " :%' " ;
}
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
// Check to see if the search has been restricted to a particular
// document owner.
$searchOwner = " " ;
if ( $owner ) {
$searchOwner = " `tblDocuments`.`owner` = ' " . $owner -> getId () . " ' " ;
}
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
// Check to see if the search has been restricted to a particular
// document category.
$searchCategories = " " ;
if ( $categories ) {
$catids = array ();
foreach ( $categories as $category )
$catids [] = $category -> getId ();
$searchCategories = " `tblDocumentCategory`.`categoryID` in ( " . implode ( ',' , $catids ) . " ) " ;
}
2011-03-10 14:27:05 +00:00
2011-12-06 12:31:20 +00:00
// Is the search restricted to documents created between two specific dates?
$searchCreateDate = " " ;
if ( $creationstartdate ) {
$startdate = makeTimeStamp ( 0 , 0 , 0 , $creationstartdate [ 'year' ], $creationstartdate [ " month " ], $creationstartdate [ " day " ]);
if ( $startdate ) {
$searchCreateDate .= " `tblDocuments`.`date` >= " . $startdate ;
}
2010-11-12 22:40:12 +00:00
}
2011-12-06 12:31:20 +00:00
if ( $creationenddate ) {
$stopdate = makeTimeStamp ( 23 , 59 , 59 , $creationenddate [ " year " ], $creationenddate [ " month " ], $creationenddate [ " day " ]);
if ( $stopdate ) {
if ( $startdate )
$searchCreateDate .= " AND " ;
$searchCreateDate .= " `tblDocuments`.`date` <= " . $stopdate ;
}
2010-11-12 22:40:12 +00:00
}
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
// ---------------------- Suche starten ----------------------------------
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
//
// Construct the SQL query that will be used to search the database.
//
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
if ( ! $this -> db -> createTemporaryTable ( " ttcontentid " ) || ! $this -> db -> createTemporaryTable ( " ttstatid " )) {
return false ;
}
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
$searchQuery = " FROM `tblDocumentContent` " .
" LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` " .
" LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` " .
" LEFT JOIN `tblDocumentStatusLog` ON `tblDocumentStatusLog`.`statusID` = `tblDocumentStatus`.`statusID` " .
" LEFT JOIN `ttstatid` ON `ttstatid`.`maxLogID` = `tblDocumentStatusLog`.`statusLogID` " .
" LEFT JOIN `ttcontentid` ON `ttcontentid`.`maxVersion` = `tblDocumentStatus`.`version` AND `ttcontentid`.`document` = `tblDocumentStatus`.`documentID` " .
" LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` " .
" LEFT JOIN `tblDocumentCategory` ON `tblDocuments`.`id`=`tblDocumentCategory`.`documentID` " .
" WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` " .
" AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version` " ;
2010-12-01 13:36:33 +00:00
2011-12-06 12:31:20 +00:00
if ( strlen ( $searchKey ) > 0 ) {
$searchQuery .= " AND ( " . $searchKey . " ) " ;
}
if ( strlen ( $searchFolder ) > 0 ) {
$searchQuery .= " AND " . $searchFolder ;
}
if ( strlen ( $searchOwner ) > 0 ) {
$searchQuery .= " AND ( " . $searchOwner . " ) " ;
}
if ( strlen ( $searchCategories ) > 0 ) {
$searchQuery .= " AND ( " . $searchCategories . " ) " ;
}
if ( strlen ( $searchCreateDate ) > 0 ) {
$searchQuery .= " AND ( " . $searchCreateDate . " ) " ;
}
2010-11-12 22:40:12 +00:00
2011-12-06 12:31:20 +00:00
// status
if ( $status ) {
$searchQuery .= " AND `tblDocumentStatusLog`.`status` IN ( " . implode ( ',' , $status ) . " ) " ;
}
// Count the number of rows that the search will produce.
$resArr = $this -> db -> getResultArray ( " SELECT COUNT(*) AS num " . $searchQuery );
$totalDocs = 0 ;
if ( is_numeric ( $resArr [ 0 ][ " num " ]) && $resArr [ 0 ][ " num " ] > 0 ) {
$totalDocs = ( integer ) $resArr [ 0 ][ " num " ];
}
2010-11-12 22:40:12 +00:00
2011-12-06 12:31:20 +00:00
// If there are no results from the count query, then there is no real need
// to run the full query. TODO: re-structure code to by-pass additional
// queries when no initial results are found.
// Prepare the complete search query, including the LIMIT clause.
$searchQuery = " SELECT `tblDocuments`.*, " .
" `tblDocumentContent`.`version`, " .
" `tblDocumentStatusLog`.`status`, `tblDocumentLocks`.`userID` as `lockUser` " . $searchQuery ;
// calculate the remaining entrїes of the current page
// If page is not full yet, get remaining entries
$remain = $limit - count ( $folderresult [ 'folders' ]);
if ( $remain ) {
if ( $remain == $limit )
$offset -= $totalFolders ;
else
$offset = 0 ;
if ( $limit )
$searchQuery .= " LIMIT " . $offset . " , " . $remain ;
// Send the complete search query to the database.
$resArr = $this -> db -> getResultArray ( $searchQuery );
} else {
$resArr = array ();
}
// ------------------- Ausgabe der Ergebnisse ----------------------------
$numResults = count ( $resArr );
if ( $numResults == 0 ) {
$docresult = array ( 'totalDocs' => $totalDocs , 'docs' => array ());
} else {
foreach ( $resArr as $docArr ) {
$docs [] = $this -> getDocument ( $docArr [ 'id' ]);
}
$docresult = array ( 'totalDocs' => $totalDocs , 'docs' => $docs );
}
} else {
$docresult = array ( 'totalDocs' => 0 , 'docs' => array ());
2010-11-12 22:40:12 +00:00
}
2011-12-06 12:31:20 +00:00
2010-11-12 22:40:12 +00:00
if ( $limit ) {
2011-11-28 14:03:01 +00:00
$totalPages = ( integer )(( $totalDocs + $totalFolders ) / $limit );
if ((( $totalDocs + $totalFolders ) % $limit ) > 0 ) {
2010-11-12 22:40:12 +00:00
$totalPages ++ ;
}
} else {
$totalPages = 1 ;
}
2010-12-01 13:36:33 +00:00
2011-11-28 14:03:01 +00:00
return array_merge ( $docresult , $folderresult , array ( 'totalPages' => $totalPages ));
2010-11-12 22:40:12 +00:00
} /* }}} */
/**
* Return a folder by its id
*
* This function retrieves a folder from the database by its id .
*
* @ param integer $id internal id of folder
2011-01-20 08:18:37 +00:00
* @ return object instance of LetoDMS_Core_Folder or false
2010-11-12 22:40:12 +00:00
*/
function getFolder ( $id ) { /* {{{ */
if ( ! is_numeric ( $id )) return false ;
2010-12-01 13:36:33 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblFolders WHERE id = " . ( int ) $id ;
2010-11-12 22:40:12 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-12 22:40:12 +00:00
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
else if ( count ( $resArr ) != 1 )
return false ;
2010-12-01 13:36:33 +00:00
$resArr = $resArr [ 0 ];
2011-01-20 08:18:37 +00:00
$folder = new LetoDMS_Core_Folder ( $resArr [ " id " ], $resArr [ " name " ], $resArr [ " parent " ], $resArr [ " comment " ], $resArr [ " date " ], $resArr [ " owner " ], $resArr [ " inheritAccess " ], $resArr [ " defaultAccess " ], $resArr [ " sequence " ]);
2010-12-01 13:36:33 +00:00
$folder -> setDMS ( $this );
return $folder ;
} /* }}} */
/**
* Return a folder by its name
*
2010-12-22 19:48:08 +00:00
* This function retrieves a folder from the database by its name . The
* search covers the whole database . If
* the parameter $folder is not null , it will search for the name
* only within this parent folder . It will not be done recursively .
2010-12-01 13:36:33 +00:00
*
2010-12-22 19:48:08 +00:00
* @ param string $name name of the folder
* @ param object $folder parent folder
2010-12-01 13:36:33 +00:00
* @ return object / boolean found folder or false
*/
function getFolderByName ( $name , $folder = null ) { /* {{{ */
if ( ! $name ) return false ;
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblFolders WHERE name = " . $this -> db -> qstr ( $name );
2010-12-01 13:36:33 +00:00
if ( $folder )
$queryStr .= " AND `parent` = " . $folder -> getID ();
$queryStr .= " LIMIT 1 " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
if ( ! $resArr )
return false ;
2010-11-12 22:40:12 +00:00
$resArr = $resArr [ 0 ];
2011-01-20 08:18:37 +00:00
$folder = new LetoDMS_Core_Folder ( $resArr [ " id " ], $resArr [ " name " ], $resArr [ " parent " ], $resArr [ " comment " ], $resArr [ " date " ], $resArr [ " owner " ], $resArr [ " inheritAccess " ], $resArr [ " defaultAccess " ], $resArr [ " sequence " ]);
2010-11-12 22:40:12 +00:00
$folder -> setDMS ( $this );
return $folder ;
} /* }}} */
2010-11-15 12:01:21 +00:00
/**
* Return a user by its id
*
* This function retrieves a user from the database by its id .
*
* @ param integer $id internal id of user
2011-01-20 08:18:37 +00:00
* @ return object instance of LetoDMS_Core_User or false
2010-11-15 12:01:21 +00:00
*/
function getUser ( $id ) { /* {{{ */
if ( ! is_numeric ( $id ))
return false ;
2010-12-01 13:36:33 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblUsers WHERE id = " . ( int ) $id ;
2010-11-15 12:01:21 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
if ( is_bool ( $resArr ) && $resArr == false ) return false ;
if ( count ( $resArr ) != 1 ) return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
$resArr = $resArr [ 0 ];
2010-12-01 13:36:33 +00:00
2012-08-28 07:28:16 +00:00
$user = new LetoDMS_Core_User ( $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 " ]);
2010-11-15 21:08:07 +00:00
$user -> setDMS ( $this );
return $user ;
2010-11-15 12:01:21 +00:00
} /* }}} */
/**
* Return a user by its login
*
* This function retrieves a user from the database by its login .
2011-10-07 16:14:31 +00:00
* If the second optional parameter $email is not empty , the user must
2012-01-26 13:23:22 +00:00
* also have the given email .
2010-11-15 12:01:21 +00:00
*
2011-10-07 16:14:31 +00:00
* @ param string $login internal login of user
* @ param string $email email of user
2011-01-20 08:18:37 +00:00
* @ return object instance of LetoDMS_Core_User or false
2010-11-15 12:01:21 +00:00
*/
2011-10-07 16:14:31 +00:00
function getUserByLogin ( $login , $email = '' ) { /* {{{ */
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblUsers WHERE login = " . $this -> db -> qstr ( $login );
2011-10-07 16:14:31 +00:00
if ( $email )
2011-12-01 21:20:58 +00:00
$queryStr .= " AND email= " . $this -> db -> qstr ( $email );
2011-10-07 16:14:31 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && $resArr == false ) return false ;
if ( count ( $resArr ) != 1 ) return false ;
$resArr = $resArr [ 0 ];
2012-08-28 07:28:16 +00:00
$user = new LetoDMS_Core_User ( $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 " ]);
2011-10-07 16:14:31 +00:00
$user -> setDMS ( $this );
return $user ;
} /* }}} */
/**
* Return a user by its email
*
* This function retrieves a user from the database by its email .
* It is needed when the user requests a new password .
*
* @ param integer $email email address of user
* @ return object instance of LetoDMS_Core_User or false
*/
function getUserByEmail ( $email ) { /* {{{ */
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblUsers WHERE email = " . $this -> db -> qstr ( $email );
2010-11-15 12:01:21 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
if ( is_bool ( $resArr ) && $resArr == false ) return false ;
if ( count ( $resArr ) != 1 ) return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
$resArr = $resArr [ 0 ];
2010-12-01 13:36:33 +00:00
2012-08-28 07:28:16 +00:00
$user = new LetoDMS_Core_User ( $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 " ]);
2010-11-15 21:08:07 +00:00
$user -> setDMS ( $this );
return $user ;
2010-11-15 12:01:21 +00:00
} /* }}} */
2011-01-11 09:06:59 +00:00
/**
* Return list of all users
*
2011-01-20 08:18:37 +00:00
* @ return array of instances of LetoDMS_Core_User or false
2011-01-11 09:06:59 +00:00
*/
2012-08-28 07:28:16 +00:00
function getAllUsers ( $orderby = '' ) { /* {{{ */
if ( $orderby == 'fullname' )
$queryStr = " SELECT * FROM tblUsers ORDER BY fullname " ;
else
$queryStr = " SELECT * FROM tblUsers ORDER BY login " ;
2010-11-15 12:01:21 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
$users = array ();
2010-12-01 13:36:33 +00:00
2010-11-15 21:08:07 +00:00
for ( $i = 0 ; $i < count ( $resArr ); $i ++ ) {
2012-08-28 07:28:16 +00:00
$user = new LetoDMS_Core_User ( $resArr [ $i ][ " id " ], $resArr [ $i ][ " login " ], $resArr [ $i ][ " pwd " ], $resArr [ $i ][ " fullName " ], $resArr [ $i ][ " email " ], ( isset ( $resArr [ " language " ]) ? $resArr [ " language " ] : NULL ), ( isset ( $resArr [ " theme " ]) ? $resArr [ " theme " ] : NULL ), $resArr [ $i ][ " comment " ], $resArr [ $i ][ " role " ], $resArr [ $i ][ " hidden " ], $resArr [ $i ][ " disabled " ], $resArr [ $i ][ " pwdExpiration " ], $resArr [ $i ][ " loginfailures " ]);
2010-11-15 21:08:07 +00:00
$user -> setDMS ( $this );
$users [ $i ] = $user ;
}
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
return $users ;
} /* }}} */
2010-12-01 13:36:33 +00:00
2011-01-11 09:06:59 +00:00
/**
* Add a new user
*
* @ param string $login login name
* @ param string $pwd password of new user
* @ param string $email Email of new user
* @ param string $language language of new user
* @ param string $comment comment of new user
* @ param integer $role role of new user ( can be 0 = normal , 1 = admin , 2 = guest )
* @ param integer $isHidden hide user in all lists , if this is set login
* is still allowed
2012-08-28 07:28:16 +00:00
* @ param integer $isDisabled disable user and prevent login
2011-01-20 08:18:37 +00:00
* @ return object of LetoDMS_Core_User
2011-01-11 09:06:59 +00:00
*/
2012-08-28 07:28:16 +00:00
function addUser ( $login , $pwd , $fullName , $email , $language , $theme , $comment , $role = '0' , $isHidden = 0 , $isDisabled = 0 , $pwdexpiration = '' ) { /* {{{ */
2010-11-15 12:01:21 +00:00
if ( is_object ( $this -> getUserByLogin ( $login ))) {
return false ;
}
2011-12-01 21:20:58 +00:00
if ( $role == '' )
$role = '0' ;
2012-08-29 20:40:56 +00:00
$queryStr = " INSERT INTO tblUsers (login, pwd, fullName, email, language, theme, comment, role, hidden, disabled, pwdExpiration) VALUES (' " . $login . " ', ' " . $pwd . " ', ' " . $fullName . " ', ' " . $email . " ', ' " . $language . " ', ' " . $theme . " ', ' " . $comment . " ', ' " . $role . " ', ' " . $isHidden . " ', ' " . $isDisabled . " ', ' " . $pwdexpiration . " ') " ;
2010-11-15 12:01:21 +00:00
$res = $this -> db -> getResult ( $queryStr );
if ( ! $res )
return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
return $this -> getUser ( $this -> db -> getInsertID ());
} /* }}} */
2010-12-22 19:48:08 +00:00
/**
* Get a group by its id
*
* @ param integer $id id of group
* @ return object / boolean group or false if no group was found
*/
2010-11-15 12:01:21 +00:00
function getGroup ( $id ) { /* {{{ */
if ( ! is_numeric ( $id ))
2011-03-10 14:27:05 +00:00
return false ;
2010-12-01 13:36:33 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblGroups WHERE id = " . ( int ) $id ;
2010-11-15 12:01:21 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
else if ( count ( $resArr ) != 1 ) //wenn, dann wohl eher 0 als > 1 ;-)
return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
$resArr = $resArr [ 0 ];
2010-12-01 13:36:33 +00:00
2011-01-20 08:18:37 +00:00
$group = new LetoDMS_Core_Group ( $resArr [ " id " ], $resArr [ " name " ], $resArr [ " comment " ]);
2010-11-15 21:08:07 +00:00
$group -> setDMS ( $this );
return $group ;
2010-11-15 12:01:21 +00:00
} /* }}} */
2010-12-22 19:48:08 +00:00
/**
* Get a group by its name
*
* @ param string $name name of group
* @ return object / boolean group or false if no group was found
*/
2010-11-15 12:01:21 +00:00
function getGroupByName ( $name ) { /* {{{ */
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT `tblGroups`.* FROM `tblGroups` WHERE `tblGroups`.`name` = " . $this -> db -> qstr ( $name );
2010-11-15 12:01:21 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
else if ( count ( $resArr ) != 1 ) //wenn, dann wohl eher 0 als > 1 ;-)
return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
$resArr = $resArr [ 0 ];
2010-12-01 13:36:33 +00:00
2011-01-20 08:18:37 +00:00
$group = new LetoDMS_Core_Group ( $resArr [ " id " ], $resArr [ " name " ], $resArr [ " comment " ]);
2010-11-15 21:08:07 +00:00
$group -> setDMS ( $this );
return $group ;
} /* }}} */
2010-11-30 12:23:46 +00:00
/**
* Get a list of all groups
*
2011-01-20 08:18:37 +00:00
* @ return array array of instances of { @ link LetoDMS_Core_Group }
2010-11-30 12:23:46 +00:00
*/
2010-11-15 21:08:07 +00:00
function getAllGroups () { /* {{{ */
$queryStr = " SELECT * FROM tblGroups ORDER BY name " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
2010-12-01 13:36:33 +00:00
2010-11-15 21:08:07 +00:00
if ( is_bool ( $resArr ) && $resArr == false )
return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 21:08:07 +00:00
$groups = array ();
2010-12-01 13:36:33 +00:00
2010-11-15 21:08:07 +00:00
for ( $i = 0 ; $i < count ( $resArr ); $i ++ ) {
2010-12-01 13:36:33 +00:00
2011-01-20 08:18:37 +00:00
$group = new LetoDMS_Core_Group ( $resArr [ $i ][ " id " ], $resArr [ $i ][ " name " ], $resArr [ $i ][ " comment " ]);
2010-11-15 21:08:07 +00:00
$group -> setDMS ( $this );
$groups [ $i ] = $group ;
}
2010-12-01 13:36:33 +00:00
2010-11-15 21:08:07 +00:00
return $groups ;
2010-11-15 12:01:21 +00:00
} /* }}} */
2010-11-30 12:23:46 +00:00
/**
* Create a new user group
*
* @ param string $name name of group
* @ param string $comment comment of group
2011-01-20 08:18:37 +00:00
* @ return object / boolean instance of { @ link LetoDMS_Core_Group } or false in
2010-11-30 12:23:46 +00:00
* case of an error .
*/
2010-11-15 12:01:21 +00:00
function addGroup ( $name , $comment ) { /* {{{ */
if ( is_object ( $this -> getGroupByName ( $name ))) {
return false ;
}
$queryStr = " INSERT INTO tblGroups (name, comment) VALUES (' " . $name . " ', ' " . $comment . " ') " ;
if ( ! $this -> db -> getResult ( $queryStr ))
return false ;
2010-12-01 13:36:33 +00:00
2010-11-15 12:01:21 +00:00
return $this -> getGroup ( $this -> db -> getInsertID ());
} /* }}} */
2010-11-27 20:52:03 +00:00
function getKeywordCategory ( $id ) { /* {{{ */
if ( ! is_numeric ( $id ))
2011-03-10 14:27:05 +00:00
return false ;
2010-11-27 20:52:03 +00:00
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblKeywordCategories WHERE id = " . ( int ) $id ;
2010-11-27 20:52:03 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if (( is_bool ( $resArr ) && ! $resArr ) || ( count ( $resArr ) != 1 ))
return false ;
$resArr = $resArr [ 0 ];
2011-01-20 08:18:37 +00:00
$cat = new LetoDMS_Core_Keywordcategory ( $resArr [ " id " ], $resArr [ " owner " ], $resArr [ " name " ]);
2010-11-27 20:52:03 +00:00
$cat -> setDMS ( $this );
return $cat ;
} /* }}} */
2012-04-26 20:26:56 +00:00
function getKeywordCategoryByName ( $name , $userID ) { /* {{{ */
$queryStr = " SELECT * FROM tblKeywordCategories WHERE name = " . $this -> db -> qstr ( $name ) . " AND owner = " . ( int ) $userID ;
2010-11-27 20:52:03 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if (( is_bool ( $resArr ) && ! $resArr ) || ( count ( $resArr ) != 1 ))
return false ;
$resArr = $resArr [ 0 ];
2011-01-20 08:18:37 +00:00
$cat = new LetoDMS_Core_Keywordcategory ( $resArr [ " id " ], $resArr [ " owner " ], $resArr [ " name " ]);
2010-11-27 20:52:03 +00:00
$cat -> setDMS ( $this );
return $cat ;
} /* }}} */
function getAllKeywordCategories ( $userIDs = array ()) { /* {{{ */
$queryStr = " SELECT * FROM tblKeywordCategories " ;
if ( $userIDs )
$queryStr .= " WHERE owner in ( " . implode ( ',' , $userIDs ) . " ) " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$categories = array ();
foreach ( $resArr as $row ) {
2011-01-20 08:18:37 +00:00
$cat = new LetoDMS_Core_KeywordCategory ( $row [ " id " ], $row [ " owner " ], $row [ " name " ]);
2010-11-27 20:52:03 +00:00
$cat -> setDMS ( $this );
array_push ( $categories , $cat );
}
return $categories ;
} /* }}} */
2012-04-26 20:26:56 +00:00
/**
* This function should be replaced by getAllKeywordCategories ()
*/
2010-11-27 20:52:03 +00:00
function getAllUserKeywordCategories ( $userID ) { /* {{{ */
$queryStr = " SELECT * FROM tblKeywordCategories " ;
if ( $userID != - 1 )
2011-12-01 21:20:58 +00:00
$queryStr .= " WHERE owner = " . ( int ) $userID ;
2010-11-27 20:52:03 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$categories = array ();
foreach ( $resArr as $row ) {
2011-01-20 08:18:37 +00:00
$cat = new LetoDMS_Core_KeywordCategory ( $row [ " id " ], $row [ " owner " ], $row [ " name " ]);
2010-11-27 20:52:03 +00:00
$cat -> setDMS ( $this );
array_push ( $categories , $cat );
}
return $categories ;
} /* }}} */
2012-04-26 20:26:56 +00:00
function addKeywordCategory ( $userID , $name ) { /* {{{ */
if ( is_object ( $this -> getKeywordCategoryByName ( $name , $userID ))) {
2010-11-27 20:52:03 +00:00
return false ;
}
2012-04-26 20:26:56 +00:00
$queryStr = " INSERT INTO tblKeywordCategories (owner, name) VALUES ( " . ( int ) $userID . " , ' $name ') " ;
2010-11-27 20:52:03 +00:00
if ( ! $this -> db -> getResult ( $queryStr ))
return false ;
return $this -> getKeywordCategory ( $this -> db -> getInsertID ());
} /* }}} */
2011-03-10 14:27:05 +00:00
function getDocumentCategory ( $id ) { /* {{{ */
if ( ! is_numeric ( $id ))
return false ;
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblCategory WHERE id = " . ( int ) $id ;
2011-03-10 14:27:05 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if (( is_bool ( $resArr ) && ! $resArr ) || ( count ( $resArr ) != 1 ))
return false ;
$resArr = $resArr [ 0 ];
$cat = new LetoDMS_Core_DocumentCategory ( $resArr [ " id " ], $resArr [ " name " ]);
$cat -> setDMS ( $this );
return $cat ;
} /* }}} */
function getDocumentCategories () { /* {{{ */
$queryStr = " SELECT * FROM tblCategory " ;
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$categories = array ();
foreach ( $resArr as $row ) {
$cat = new LetoDMS_Core_DocumentCategory ( $row [ " id " ], $row [ " name " ]);
$cat -> setDMS ( $this );
array_push ( $categories , $cat );
}
return $categories ;
} /* }}} */
2011-07-20 16:47:09 +00:00
/**
* Get a category by its name
*
* The name of a category is by default unique .
*
* @ param string $name human readable name of category
* @ return object instance of LetoDMS_Core_DocumentCategory
*/
2011-03-10 14:27:05 +00:00
function getDocumentCategoryByName ( $name ) { /* {{{ */
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblCategory where name= " . $this -> db -> qstr ( $name );
2011-03-10 14:27:05 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
2011-07-22 20:48:31 +00:00
if ( ! $resArr )
2011-03-10 14:27:05 +00:00
return false ;
2011-07-20 16:47:09 +00:00
$row = $resArr [ 0 ];
$cat = new LetoDMS_Core_DocumentCategory ( $row [ " id " ], $row [ " name " ]);
$cat -> setDMS ( $this );
2011-03-10 14:27:05 +00:00
2011-07-20 16:47:09 +00:00
return $cat ;
2011-03-10 14:27:05 +00:00
} /* }}} */
function addDocumentCategory ( $name ) { /* {{{ */
if ( is_object ( $this -> getDocumentCategoryByName ( $name ))) {
return false ;
}
$queryStr = " INSERT INTO tblCategory (name) VALUES (' $name ') " ;
if ( ! $this -> db -> getResult ( $queryStr ))
return false ;
return $this -> getDocumentCategory ( $this -> db -> getInsertID ());
} /* }}} */
2010-12-21 17:41:05 +00:00
/**
* Get all notifications for a group
*
2010-12-22 19:48:08 +00:00
* @ param object $group group for which notifications are to be retrieved
* @ param integer $type type of item ( T_DOCUMENT or T_FOLDER )
* @ return array array of notifications
2010-12-21 17:41:05 +00:00
*/
function getNotificationsByGroup ( $group , $type = 0 ) { /* {{{ */
2010-12-22 19:48:08 +00:00
$queryStr = " SELECT `tblNotify`.* FROM `tblNotify` " .
2010-12-21 17:41:05 +00:00
" WHERE `tblNotify`.`groupID` = " . $group -> getID ();
if ( $type ) {
2011-12-01 21:20:58 +00:00
$queryStr .= " AND `tblNotify`.`targetType` = " . ( int ) $type ;
2010-12-21 17:41:05 +00:00
}
2010-12-22 19:48:08 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$notifications = array ();
foreach ( $resArr as $row ) {
2011-01-20 08:18:37 +00:00
$not = new LetoDMS_Core_Notification ( $row [ " target " ], $row [ " targetType " ], $row [ " userID " ], $row [ " groupID " ]);
2010-12-22 19:48:08 +00:00
$not -> setDMS ( $this );
array_push ( $notifications , $cat );
}
return $notifications ;
2010-12-21 17:41:05 +00:00
} /* }}} */
/**
* Get all notifications for a user
*
2010-12-22 19:48:08 +00:00
* @ param object $user user for which notifications are to be retrieved
* @ param integer $type type of item ( T_DOCUMENT or T_FOLDER )
* @ return array array of notifications
2010-12-21 17:41:05 +00:00
*/
2012-04-26 20:26:56 +00:00
function getNotificationsByUser ( $user , $type = 0 ) { /* {{{ */
2010-12-21 17:41:05 +00:00
$queryStr = " SELECT `tblNotify`.* FROM `tblNotify` " .
" WHERE `tblNotify`.`userID` = " . $user -> getID ();
2010-12-22 19:48:08 +00:00
if ( $type ) {
2011-12-01 21:20:58 +00:00
$queryStr .= " AND `tblNotify`.`targetType` = " . ( int ) $type ;
2010-12-22 19:48:08 +00:00
}
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
$notifications = array ();
foreach ( $resArr as $row ) {
2011-01-20 08:18:37 +00:00
$not = new LetoDMS_Core_Notification ( $row [ " target " ], $row [ " targetType " ], $row [ " userID " ], $row [ " groupID " ]);
2010-12-22 19:48:08 +00:00
$not -> setDMS ( $this );
array_push ( $notifications , $cat );
}
2010-12-21 17:41:05 +00:00
2010-12-22 19:48:08 +00:00
return $notifications ;
2010-12-21 17:41:05 +00:00
} /* }}} */
2011-10-10 14:08:24 +00:00
/**
* Create a token to request a new password .
* This function will not delete the password but just creates an entry
* in tblUserRequestPassword indicating a password request .
*
* @ return string hash value of false in case of an error
*/
function createPasswordRequest ( $user ) { /* {{{ */
$hash = md5 ( uniqid ( time ()));
$queryStr = " INSERT INTO tblUserPasswordRequest (userID, hash, `date`) VALUES ( " . $user -> getId () . " , ' " . $hash . " ', now()) " ;
$resArr = $this -> db -> getResult ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr ) return false ;
return $hash ;
} /* }}} */
/**
* Check if hash for a password request is valid .
* This function searches a previously create password request and
* returns the user .
*
* @ param string $hash
*/
function checkPasswordRequest ( $hash ) { /* {{{ */
/* Get the password request from the database */
2011-12-01 21:20:58 +00:00
$queryStr = " SELECT * FROM tblUserPasswordRequest where hash= " . $this -> db -> qstr ( $hash );
2011-10-10 14:08:24 +00:00
$resArr = $this -> db -> getResultArray ( $queryStr );
if ( is_bool ( $resArr ) && ! $resArr )
return false ;
if ( count ( $resArr ) != 1 )
return false ;
$resArr = $resArr [ 0 ];
return $this -> getUser ( $resArr [ 'userID' ]);
} /* }}} */
/**
* Delete a password request
*
* @ param string $hash
*/
function deletePasswordRequest ( $hash ) { /* {{{ */
/* Delete the request, so nobody can use it a second time */
2011-12-01 21:20:58 +00:00
$queryStr = " DELETE FROM tblUserPasswordRequest WHERE hash= " . $this -> db -> qstr ( $hash );
2011-10-10 14:08:24 +00:00
if ( ! $this -> db -> getResult ( $queryStr ))
return false ;
return true ;
}
2010-11-12 22:40:12 +00:00
}
?>