- added methods getRootFolder(), getFolderByName(), getDocumentByName()

This commit is contained in:
steinm 2010-12-01 13:36:33 +00:00
parent 73ca9f3a40
commit a90e190140

View File

@ -147,6 +147,10 @@ class LetoDMS_DMS {
$this->rootFolderID = $id; $this->rootFolderID = $id;
} /* }}} */ } /* }}} */
function getRootFolder() { /* {{{ */
return $this->getFolder($this->rootFolderID);
} /* }}} */
function setEnableAdminRevApp($enable) { /* {{{ */ function setEnableAdminRevApp($enable) { /* {{{ */
$this->enableAdminRevApp = $enable; $this->enableAdminRevApp = $enable;
} /* }}} */ } /* }}} */
@ -201,7 +205,7 @@ class LetoDMS_DMS {
*/ */
function getDocument($id) { /* {{{ */ function getDocument($id) { /* {{{ */
if (!is_numeric($id)) return false; if (!is_numeric($id)) return false;
$queryStr = "SELECT * FROM tblDocuments WHERE id = " . $id; $queryStr = "SELECT * FROM tblDocuments WHERE id = " . $id;
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) if (is_bool($resArr) && $resArr == false)
@ -209,7 +213,7 @@ class LetoDMS_DMS {
if (count($resArr) != 1) if (count($resArr) != 1)
return false; return false;
$resArr = $resArr[0]; $resArr = $resArr[0];
// New Locking mechanism uses a separate table to track the lock. // New Locking mechanism uses a separate table to track the lock.
$queryStr = "SELECT * FROM tblDocumentLocks WHERE document = " . $id; $queryStr = "SELECT * FROM tblDocumentLocks WHERE document = " . $id;
$lockArr = $this->db->getResultArray($queryStr); $lockArr = $this->db->getResultArray($queryStr);
@ -221,7 +225,7 @@ class LetoDMS_DMS {
// A lock has been identified for this document. // A lock has been identified for this document.
$lock = $lockArr[0]["userID"]; $lock = $lockArr[0]["userID"];
} }
$document = new LetoDMS_Document($resArr["id"], $resArr["name"], $resArr["comment"], $resArr["date"], $resArr["expires"], $resArr["owner"], $resArr["folder"], $resArr["inheritAccess"], $resArr["defaultAccess"], $lock, $resArr["keywords"], $resArr["sequence"]); $document = new LetoDMS_Document($resArr["id"], $resArr["name"], $resArr["comment"], $resArr["date"], $resArr["expires"], $resArr["owner"], $resArr["folder"], $resArr["inheritAccess"], $resArr["defaultAccess"], $lock, $resArr["keywords"], $resArr["sequence"]);
$document->setDMS($this); $document->setDMS($this);
return $document; return $document;
@ -245,11 +249,47 @@ class LetoDMS_DMS {
$documents = array(); $documents = array();
foreach ($resArr as $row) { foreach ($resArr as $row) {
array_push($documents, new LetoDMS_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 = new LetoDMS_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; return $documents;
} /* }}} */ } /* }}} */
/**
* 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` ".
"WHERE `tblDocuments`.`name` = '" . $name . "'";
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];
$document = new LetoDMS_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);
return $document;
} /* }}} */
/* /*
* Search the database for documents * Search the database for documents
* *
@ -271,7 +311,7 @@ class LetoDMS_DMS {
if (strlen($query)>0) { if (strlen($query)>0) {
$tkeys = split("[\t\r\n ,]+", $query); $tkeys = split("[\t\r\n ,]+", $query);
} }
// if none is checkd search all // if none is checkd search all
if (count($searchin)==0) if (count($searchin)==0)
$searchin=array( 0, 1, 2, 3); $searchin=array( 0, 1, 2, 3);
@ -289,7 +329,7 @@ class LetoDMS_DMS {
if (in_array(3, $searchin)) { if (in_array(3, $searchin)) {
$concatFunction = (strlen($concatFunction) == 0 ? "" : $concatFunction.", ")."`tblDocuments`.`comment`"; $concatFunction = (strlen($concatFunction) == 0 ? "" : $concatFunction.", ")."`tblDocuments`.`comment`";
} }
if (strlen($concatFunction)>0 && count($tkeys)>0) { if (strlen($concatFunction)>0 && count($tkeys)>0) {
$concatFunction = "CONCAT_WS(' ', ".$concatFunction.")"; $concatFunction = "CONCAT_WS(' ', ".$concatFunction.")";
foreach ($tkeys as $key) { foreach ($tkeys as $key) {
@ -299,21 +339,21 @@ class LetoDMS_DMS {
} }
} }
} }
// Check to see if the search has been restricted to a particular sub-tree in // Check to see if the search has been restricted to a particular sub-tree in
// the folder hierarchy. // the folder hierarchy.
$searchFolder = ""; $searchFolder = "";
if ($startFolder) { if ($startFolder) {
$searchFolder = "`tblDocuments`.`folderList` LIKE '%:".$startFolder->getID().":%'"; $searchFolder = "`tblDocuments`.`folderList` LIKE '%:".$startFolder->getID().":%'";
} }
// Check to see if the search has been restricted to a particular // Check to see if the search has been restricted to a particular
// document owner. // document owner.
$searchOwner = ""; $searchOwner = "";
if ($owner) { if ($owner) {
$searchOwner = "`tblDocuments`.`owner` = '".$owner->getId()."'"; $searchOwner = "`tblDocuments`.`owner` = '".$owner->getId()."'";
} }
// Is the search restricted to documents created between two specific dates? // Is the search restricted to documents created between two specific dates?
$searchCreateDate = ""; $searchCreateDate = "";
if ($creationstartdate) { if ($creationstartdate) {
@ -330,17 +370,17 @@ class LetoDMS_DMS {
$searchCreateDate = "`tblDocuments`.`date` <= ".$stopdate; $searchCreateDate = "`tblDocuments`.`date` <= ".$stopdate;
} }
} }
// ---------------------- Suche starten ---------------------------------- // ---------------------- Suche starten ----------------------------------
// //
// Construct the SQL query that will be used to search the database. // Construct the SQL query that will be used to search the database.
// //
if (!$this->db->createTemporaryTable("ttcontentid") || !$this->db->createTemporaryTable("ttstatid")) { if (!$this->db->createTemporaryTable("ttcontentid") || !$this->db->createTemporaryTable("ttstatid")) {
return false; return false;
} }
$searchQuery = "FROM `tblDocumentContent` ". $searchQuery = "FROM `tblDocumentContent` ".
"LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocuments` ON `tblDocuments`.`id` = `tblDocumentContent`.`document` ".
"LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ". "LEFT JOIN `tblDocumentStatus` ON `tblDocumentStatus`.`documentID` = `tblDocumentContent`.`document` ".
@ -350,7 +390,7 @@ class LetoDMS_DMS {
"LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ". "LEFT JOIN `tblDocumentLocks` ON `tblDocuments`.`id`=`tblDocumentLocks`.`document` ".
"WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ". "WHERE `ttstatid`.`maxLogID`=`tblDocumentStatusLog`.`statusLogID` ".
"AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version`"; "AND `ttcontentid`.`maxVersion` = `tblDocumentContent`.`version`";
if (strlen($searchKey)>0) { if (strlen($searchKey)>0) {
$searchQuery .= " AND (".$searchKey.")"; $searchQuery .= " AND (".$searchKey.")";
} }
@ -383,7 +423,7 @@ class LetoDMS_DMS {
} else { } else {
$totalPages = 1; $totalPages = 1;
} }
// If there are no results from the count query, then there is no real need // 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 // to run the full query. TODO: re-structure code to by-pass additional
// queries when no initial results are found. // queries when no initial results are found.
@ -392,22 +432,22 @@ class LetoDMS_DMS {
$searchQuery = "SELECT `tblDocuments`.*, ". $searchQuery = "SELECT `tblDocuments`.*, ".
"`tblDocumentContent`.`version`, ". "`tblDocumentContent`.`version`, ".
"`tblDocumentStatusLog`.`status`, `tblDocumentLocks`.`userID` as `lockUser` ".$searchQuery; "`tblDocumentStatusLog`.`status`, `tblDocumentLocks`.`userID` as `lockUser` ".$searchQuery;
if($limit) { if($limit) {
$searchQuery .= " LIMIT ".$offset.",".$limit; $searchQuery .= " LIMIT ".$offset.",".$limit;
} }
// Send the complete search query to the database. // Send the complete search query to the database.
$resArr = $this->db->getResultArray($searchQuery); $resArr = $this->db->getResultArray($searchQuery);
// ------------------- Ausgabe der Ergebnisse ---------------------------- // ------------------- Ausgabe der Ergebnisse ----------------------------
$numResults = count($resArr); $numResults = count($resArr);
if ($numResults == 0) { if ($numResults == 0) {
return array('totalDocs'=>$totalDocs, 'totalPages'=>$totalPages, 'docs'=>array()); return array('totalDocs'=>$totalDocs, 'totalPages'=>$totalPages, 'docs'=>array());
} }
foreach ($resArr as $docArr) { foreach ($resArr as $docArr) {
$document = new LetoDMS_Document( $document = new LetoDMS_Document(
$docArr["id"], $docArr["name"], $docArr["id"], $docArr["name"],
$docArr["comment"], $docArr["date"], $docArr["comment"], $docArr["date"],
@ -431,15 +471,45 @@ class LetoDMS_DMS {
*/ */
function getFolder($id) { /* {{{ */ function getFolder($id) { /* {{{ */
if (!is_numeric($id)) return false; if (!is_numeric($id)) return false;
$queryStr = "SELECT * FROM tblFolders WHERE id = " . $id; $queryStr = "SELECT * FROM tblFolders WHERE id = " . $id;
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) if (is_bool($resArr) && $resArr == false)
return false; return false;
else if (count($resArr) != 1) else if (count($resArr) != 1)
return false; return false;
$resArr = $resArr[0];
$folder = new LetoDMS_Folder($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]);
$folder->setDMS($this);
return $folder;
} /* }}} */
/**
* Return a folder by its name
*
* This function retrieves a folder from the database by its id.
*
* @param string $name
* @param object $folder
* @return object/boolean found folder or false
*/
function getFolderByName($name, $folder=null) { /* {{{ */
if (!$name) return false;
$queryStr = "SELECT * FROM tblFolders WHERE name = '" . $name . "'";
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;
$resArr = $resArr[0]; $resArr = $resArr[0];
$folder = new LetoDMS_Folder($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]); $folder = new LetoDMS_Folder($resArr["id"], $resArr["name"], $resArr["parent"], $resArr["comment"], $resArr["owner"], $resArr["inheritAccess"], $resArr["defaultAccess"], $resArr["sequence"]);
$folder->setDMS($this); $folder->setDMS($this);
@ -457,15 +527,15 @@ class LetoDMS_DMS {
function getUser($id) { /* {{{ */ function getUser($id) { /* {{{ */
if (!is_numeric($id)) if (!is_numeric($id))
return false; return false;
$queryStr = "SELECT * FROM tblUsers WHERE id = " . $id; $queryStr = "SELECT * FROM tblUsers WHERE id = " . $id;
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) return false; if (is_bool($resArr) && $resArr == false) return false;
if (count($resArr) != 1) return false; if (count($resArr) != 1) return false;
$resArr = $resArr[0]; $resArr = $resArr[0];
$user = new LetoDMS_User($resArr["id"], $resArr["login"], $resArr["pwd"], $resArr["fullName"], $resArr["email"], $resArr["language"], $resArr["theme"], $resArr["comment"], $resArr["isAdmin"], $resArr["hidden"]); $user = new LetoDMS_User($resArr["id"], $resArr["login"], $resArr["pwd"], $resArr["fullName"], $resArr["email"], $resArr["language"], $resArr["theme"], $resArr["comment"], $resArr["isAdmin"], $resArr["hidden"]);
$user->setDMS($this); $user->setDMS($this);
return $user; return $user;
@ -482,12 +552,12 @@ class LetoDMS_DMS {
function getUserByLogin($login) { /* {{{ */ function getUserByLogin($login) { /* {{{ */
$queryStr = "SELECT * FROM tblUsers WHERE login = '".$login."'"; $queryStr = "SELECT * FROM tblUsers WHERE login = '".$login."'";
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) return false; if (is_bool($resArr) && $resArr == false) return false;
if (count($resArr) != 1) return false; if (count($resArr) != 1) return false;
$resArr = $resArr[0]; $resArr = $resArr[0];
$user = new LetoDMS_User($resArr["id"], $resArr["login"], $resArr["pwd"], $resArr["fullName"], $resArr["email"], $resArr["language"], $resArr["theme"], $resArr["comment"], $resArr["isAdmin"], $resArr["hidden"]); $user = new LetoDMS_User($resArr["id"], $resArr["login"], $resArr["pwd"], $resArr["fullName"], $resArr["email"], $resArr["language"], $resArr["theme"], $resArr["comment"], $resArr["isAdmin"], $resArr["hidden"]);
$user->setDMS($this); $user->setDMS($this);
return $user; return $user;
@ -496,21 +566,21 @@ class LetoDMS_DMS {
function getAllUsers() { /* {{{ */ function getAllUsers() { /* {{{ */
$queryStr = "SELECT * FROM tblUsers ORDER BY login"; $queryStr = "SELECT * FROM tblUsers ORDER BY login";
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) if (is_bool($resArr) && $resArr == false)
return false; return false;
$users = array(); $users = array();
for ($i = 0; $i < count($resArr); $i++) { for ($i = 0; $i < count($resArr); $i++) {
$user = new LetoDMS_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]["isAdmin"], $resArr[$i]["hidden"]); $user = new LetoDMS_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]["isAdmin"], $resArr[$i]["hidden"]);
$user->setDMS($this); $user->setDMS($this);
$users[$i] = $user; $users[$i] = $user;
} }
return $users; return $users;
} /* }}} */ } /* }}} */
function addUser($login, $pwd, $fullName, $email, $language, $theme, $comment, $isAdmin=0, $isHidden=0) { /* {{{ */ function addUser($login, $pwd, $fullName, $email, $language, $theme, $comment, $isAdmin=0, $isHidden=0) { /* {{{ */
if (is_object($this->getUserByLogin($login))) { if (is_object($this->getUserByLogin($login))) {
return false; return false;
@ -519,24 +589,24 @@ class LetoDMS_DMS {
$res = $this->db->getResult($queryStr); $res = $this->db->getResult($queryStr);
if (!$res) if (!$res)
return false; return false;
return $this->getUser($this->db->getInsertID()); return $this->getUser($this->db->getInsertID());
} /* }}} */ } /* }}} */
function getGroup($id) { /* {{{ */ function getGroup($id) { /* {{{ */
if (!is_numeric($id)) if (!is_numeric($id))
die ("invalid groupid"); die ("invalid groupid");
$queryStr = "SELECT * FROM tblGroups WHERE id = " . $id; $queryStr = "SELECT * FROM tblGroups WHERE id = " . $id;
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) if (is_bool($resArr) && $resArr == false)
return false; return false;
else if (count($resArr) != 1) //wenn, dann wohl eher 0 als > 1 ;-) else if (count($resArr) != 1) //wenn, dann wohl eher 0 als > 1 ;-)
return false; return false;
$resArr = $resArr[0]; $resArr = $resArr[0];
$group = new LetoDMS_Group($resArr["id"], $resArr["name"], $resArr["comment"]); $group = new LetoDMS_Group($resArr["id"], $resArr["name"], $resArr["comment"]);
$group->setDMS($this); $group->setDMS($this);
return $group; return $group;
@ -545,14 +615,14 @@ class LetoDMS_DMS {
function getGroupByName($name) { /* {{{ */ function getGroupByName($name) { /* {{{ */
$queryStr = "SELECT `tblGroups`.* FROM `tblGroups` WHERE `tblGroups`.`name` = '".$name."'"; $queryStr = "SELECT `tblGroups`.* FROM `tblGroups` WHERE `tblGroups`.`name` = '".$name."'";
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) if (is_bool($resArr) && $resArr == false)
return false; return false;
else if (count($resArr) != 1) //wenn, dann wohl eher 0 als > 1 ;-) else if (count($resArr) != 1) //wenn, dann wohl eher 0 als > 1 ;-)
return false; return false;
$resArr = $resArr[0]; $resArr = $resArr[0];
$group = new LetoDMS_Group($resArr["id"], $resArr["name"], $resArr["comment"]); $group = new LetoDMS_Group($resArr["id"], $resArr["name"], $resArr["comment"]);
$group->setDMS($this); $group->setDMS($this);
return $group; return $group;
@ -566,19 +636,19 @@ class LetoDMS_DMS {
function getAllGroups() { /* {{{ */ function getAllGroups() { /* {{{ */
$queryStr = "SELECT * FROM tblGroups ORDER BY name"; $queryStr = "SELECT * FROM tblGroups ORDER BY name";
$resArr = $this->db->getResultArray($queryStr); $resArr = $this->db->getResultArray($queryStr);
if (is_bool($resArr) && $resArr == false) if (is_bool($resArr) && $resArr == false)
return false; return false;
$groups = array(); $groups = array();
for ($i = 0; $i < count($resArr); $i++) { for ($i = 0; $i < count($resArr); $i++) {
$group = new LetoDMS_Group($resArr[$i]["id"], $resArr[$i]["name"], $resArr[$i]["comment"]); $group = new LetoDMS_Group($resArr[$i]["id"], $resArr[$i]["name"], $resArr[$i]["comment"]);
$group->setDMS($this); $group->setDMS($this);
$groups[$i] = $group; $groups[$i] = $group;
} }
return $groups; return $groups;
} /* }}} */ } /* }}} */
@ -598,7 +668,7 @@ class LetoDMS_DMS {
$queryStr = "INSERT INTO tblGroups (name, comment) VALUES ('".$name."', '" . $comment . "')"; $queryStr = "INSERT INTO tblGroups (name, comment) VALUES ('".$name."', '" . $comment . "')";
if (!$this->db->getResult($queryStr)) if (!$this->db->getResult($queryStr))
return false; return false;
return $this->getGroup($this->db->getInsertID()); return $this->getGroup($this->db->getInsertID());
} /* }}} */ } /* }}} */