Commit afb92edc33040038b7515c89dcb6e3372a066146

Authored by Michael Joseph
1 parent d80e91e2

changed document browsing methods to use Document and Folder objects


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@421 c91229c3-7414-0410-bfa2-8a42b809f60b
lib/documentmanagement/DocumentBrowser.inc
... ... @@ -29,12 +29,15 @@ class DocumentBrowser {
29 29 global $default;
30 30  
31 31 // instantiate and initialise
32   - $folders = array();
  32 + $results = array();
33 33 $sql = new Owl_DB();
34 34  
  35 + // no folder specified, so depending on the users groups, resolve to the right folderID
35 36 if ($folderID == -1) {
36 37 // no folder specified, so start at the root for this users organisation
37 38  
  39 + // TODO: check that all these lookup calls succeed?
  40 +
38 41 // lookup this users groups
39 42 $groupIDs = lookupGroupIDs($_SESSION["userID"]);
40 43 $default->log->debug("DocumentBrowser::browseByFolder: groupIDs=" . arrayToString($groupIDs));
... ... @@ -55,13 +58,15 @@ class DocumentBrowser {
55 58 $rootFolderName = $organisationName . " Document Root";
56 59  
57 60 // lookup the id of the root folder
58   - $folderID = lookupID($default->owl_folders_table, "name", "$rootFolderName");
59   - $default->log->debug("DocumentBrowser::browseByFolder: folderID=$folderID");
  61 + $folderID = lookupID($default->owl_folders_table, "name", $rootFolderName);
  62 + $default->log->debug("DocumentBrowser::browseByFolder: root folderID=$folderID, root folder name=$rootFolderName");
60 63  
61   - // if this is a system administrator, start her at the ROOT
  64 + // if this is a system administrator, start her at the root folder
62 65 // TODO: add to default->sysadmin_group
63 66 if ($this->checkGroup("System Administrators", $groupIDs)) {
64   - $folderQuery = "SELECT * FROM $default->owl_folders_table WHERE name='$rootFolderName'";
  67 + //$folderQuery = "SELECT * FROM $default->owl_folders_table WHERE name='$rootFolderName'";
  68 + //$results["folders"][] = & Folder::get($folderID);
  69 + $default->log->info("DocumentBrowser::browseByFolder looked up org root folderID=$folderID; org root foldername=$rootFolderName");
65 70 } else {
66 71 // otherwise start everyone relative to their unit
67 72  
... ... @@ -70,42 +75,45 @@ class DocumentBrowser {
70 75  
71 76 $default->log->debug("DocumentBrowser::browseByFolder: unitName=$unitName");
72 77  
73   - $unitRootFolder = $unitName . " Document Root";
  78 + $unitRootFolderName = $unitName . " Document Root";
74 79  
75 80 // lookup descendant folders with the appropriate unit set
76   - $folderQuery = "SELECT * from $default->owl_folders_table " .
77   - "WHERE name='$unitRootFolder'";
  81 + //$folderQuery = "SELECT from $default->owl_folders_table " .
  82 + // "WHERE parent_id=$folderID and name='$unitRootFolder' and unit_id=$unitID";
  83 + $folderID = lookupID($default->owl_folders_table, "name", $unitRootFolderName);
  84 + //$results["folders"][] = & Folder::get($folderID);
  85 + $default->log->info("DocumentBrowser::browseByFolder looked up unit root folderID=$folderID; unit root foldername=$unitRootFolderName");
78 86 }
79 87 } else {
  88 + $default->log->info("DocumentBrowser::browseByFolder starting at passed in folderID=$folderID");
80 89 // start from the specified folder
81 90 //$folderQuery = "SELECT * FROM $default->owl_folders_table WHERE id=$folderID";
82   - $folder = Folder::get($folderID);
83   - // TODO: error check
84 91 }
85 92  
  93 + $default->log->debug("DocumentBrowser::browseByFolder: folderID=$folderID");
86 94 // retrieve folder details
87   - $folders = $this->retrieveFolderDetails($folderQuery);
  95 + //$folders = $this->retrieveFolderDetails($folderQuery);
88 96  
89 97 // check if the user has access to this folder
90 98 if (Permission::userHasFolderReadPermission($folderID)) {
  99 + // get the folder
  100 + $results["folders"][] = & Folder::get($folderID);
  101 + $default->log->debug("DocumentBrowser::browseByFolder: results=" . arrayToString($results));
91 102  
92   - // lookup the name of the root folder
93   - $folderName = lookupField($default->owl_folders_table, "name", "id", $folderID);
94   -
95   - $default->log->debug("DocumentBrowser::browseByFolder folderID=$folderID; folderName=$folderName");
96   - $default->log->debug("DocumentBrowser::browseByFolder folders=" . arrayToString($folders));
97   -
98   - // now find all the child folders relative to this one
99   - $folderQuery = "SELECT * from $default->owl_folders_table WHERE parent_id=" . $folderID;
  103 + // now find all the child folders relative to this one
  104 + // FIXME: in the same unit?
  105 + $folderQuery = "SELECT id from $default->owl_folders_table WHERE parent_id=" . $folderID;
100 106 $default->log->debug("DocumentBrowser::browseByFolder child folder query=$folderQuery");
101   - $childFolders = $this->retrieveFolderDetails($folderQuery);
102   - $default->log->debug("DocumentBrowser::browseByFolder childFolders=" . arrayToString($childFolders));
103   -
104   - // add children to array
105   - $folders[$folderName]["folders"] = $childFolders;
  107 + if ($sql->query($folderQuery)) {
  108 + while ($sql->next_record()) {
  109 + // add the child folders to the array
  110 + $results["folders"][] = & Folder::get($sql->f("id"));
  111 + }
  112 + }
  113 + $default->log->debug("DocumentBrowser::browseByFolder: after child folders added; results=" . arrayToString($results));
106 114  
107 115 // create query to retrieve documents in this folder
108   - $documentQuery = "SELECT * FROM $default->owl_documents_table WHERE folder_id=$folderID";
  116 + $documentQuery = "SELECT id FROM $default->owl_documents_table WHERE folder_id=$folderID";
109 117 $default->log->debug("DocumentBrowser::browseByFolder about to execute $documentQuery");
110 118 if ($sql->query($documentQuery)) {
111 119 while ($sql->next_record()) {
... ... @@ -113,27 +121,16 @@ class DocumentBrowser {
113 121 if (Permission::userHasDocumentReadPermission($sql->f("id"))) {
114 122 // add documents to array
115 123 // set file attributes
116   - $folders[$folderName]["documents"][$sql->f("name")] =
117   - array("id" => $sql->f("id"),
118   - "document_type_id" => $documentID,
119   - "name" => $documentName,
120   - "filename" => $sql->f("filename"),
121   - "size" => $sql->f("size"),
122   - "creator_id" => $sql->f("creator_id"),
123   - "modified" => $sql->f("modified"),
124   - "description" => $sql->f("description"),
125   - "mime_id" => $sql->f("mime_id"),
126   - "folder_id" => $sql->f("folder_id"),
127   - "major_version" => $sql->f("major_version"),
128   - "minor_version" => $sql->f("minor_version"),
129   - "is_checked_out" => $sql->f("is_checked_out"));
  124 + $results["documents"][] = & Document::get($sql->f("id"));
  125 + } else {
  126 + $default->log->debug("DocumentBrowser::browseByFolder: read permission denied for document id=" . $sql->f("id"));
130 127 }
131 128 }
132 129 } else {
133 130 $_SESSION["errorMessage"] = "documents table select failed";
134 131 }
135 132  
136   - return $folders;
  133 + return $results;
137 134  
138 135 } else {
139 136 // permission to view this folder denied
... ... @@ -152,7 +149,7 @@ class DocumentBrowser {
152 149  
153 150 // TODO: add this to default inserts
154 151 $categoryField = "Category";
155   - $categories = array();
  152 + $results = array();
156 153 $sql = new Owl_DB();
157 154  
158 155 // lookup document_fields id for category
... ... @@ -162,42 +159,38 @@ class DocumentBrowser {
162 159 if ($category == "") {
163 160 $default->log->debug("DocumentBrowser::browseByCategory no category supplied, returning list");
164 161 // no category value supplied, so return a list of categories
165   - $categories = array();
166   -
167   - // now get a list of category values
  162 +
  163 + // get a list of category values
168 164 $query = "select value from $default->owl_document_fields_table where document_field_id=$categoryFieldID";
169 165 $default->log->debug("DocumentBrowser::browseByCategory category listing query=$query");
170 166 $sql->query($query);
171 167 // loop through resultset, build array and return
172 168 while ($sql->next_record()) {
173   - $categories[] = $sql->f("value");
  169 + $results["categories"][] = $sql->f("value");
174 170 }
175 171 // its ok if we return an empty array- the UI's responsibility to check and print an error
176   - return $categories;
  172 + return $results;
177 173 } else {
178 174 $default->log->debug("DocumentBrowser::browseByCategory get documents for category $category");
179 175 // we have a category to use, so find all the documents
180 176 // with this category value
181   -
182   - // first lookup the document_field_id of this
  177 +
183 178 $query = "select document_id from $default->owl_document_fields_table where document_field_id = $categoryFieldID " .
184 179 "and value='$category'";
185 180 $default->log->debug("DocumentBrowser::browseByCategory documents in category query=$query");
186 181 $sql->query($query);
187   - // loop through resultset and build comma separated list of documentIDs
188   - $documentIDs = array();
  182 + // loop through resultset and add to array
189 183 while ($sql->next_record()) {
190 184 // check permissions
191 185 if (Permission::userHasDocumentReadPermission($sql->f("document_id"))) {
192   - $documentIDs[] = $sql->f("document_id");
  186 + $results["documents"][] = & Document::get($sql->f("document_id"));
  187 + } else {
  188 + $default->log->debug("DocumentBrowser::browseByCategory permission denied for documentID=" . $sql->f("document_id"));
193 189 }
194   - }
195   - $default->log->debug("DocumentBrowser::browseByCategory documentIDs=" . arrayToString($documentIDs));
196   - // use lookup function to retrieve details
197   - $documents = $this->lookupDocumentDetails($documentIDs);
198   - // add to array and return
199   - $categories[$category]["documents"] = $documents;
200   - return $categories;
  190 + }
  191 + $default->log->debug("DocumentBrowser::browseByCategory results=" . arrayToString($results));
  192 +
  193 + return $results;
201 194 }
202 195 }
203 196  
... ... @@ -209,7 +202,7 @@ class DocumentBrowser {
209 202 function browseByDocumentType($documentTypeID = -1) {
210 203 global $default;
211 204  
212   - $documentTypes = array();
  205 + $results = array();
213 206 $sql = new Owl_DB();
214 207  
215 208 if ($documentTypeID == -1) {
... ... @@ -217,31 +210,29 @@ class DocumentBrowser {
217 210 $query = "select * from $default->owl_document_types_table";
218 211 $sql->query($query);
219 212 while ($sql->next_record()) {
220   - $documentTypes[$sql->f("id")] = $sql->f("name");
  213 + $results["documentTypes"][] = array ("id" => $sql->f("id"), "name" => $sql->f("name"));
221 214 }
222   - return $documentTypes;
  215 + return $results;
223 216 } else {
224   - // lookup document type name
  217 + // lookup document type name from the passed in id
225 218 $documentTypeName = lookupField($default->owl_document_types_table, "name", "id", $documentTypeID);
226 219  
227 220 // find all documents with this document type
228 221 $query = "select id from $default->owl_documents_table where document_type_id=$documentTypeID";
229   - $default->log->debug("DocumentBrowser::browseByCategory documents from doc type query=$query");
  222 + $default->log->debug("DocumentBrowser::browseByDocumentType: documents from doc type query=$query");
230 223 // loop through resultset and build array of documentIDs
231   - $documentIDs = array();
232 224 $sql->query($query);
233 225 while ($sql->next_record()) {
234 226 // check permission
235 227 if (Permission::userHasDocumentReadPermission($sql->f("id"))) {
236   - $documentIDs[] = $sql->f("id");
  228 + $results["documents"][] = & Document::get($sql->f("id"));
  229 + } else {
  230 + $default->log->debug("DocumentBrowser::browseByDocumentType: permission denied for documentID=" . $sql->f("document_id"));
237 231 }
238 232 }
239   - $default->log->debug("DocumentBrowser::browseByCategory documentIDs=" . arrayToString($documentIDs));
240   - // use lookup function to retrieve details
241   - $documents = $this->lookupDocumentDetails($documentIDs);
242   - // add to array and return
243   - $documentTypes[$documentTypeName]["documents"]= $documents;
244   - return $documentTypes;
  233 + $default->log->debug("DocumentBrowser::browseByDocumentType: results=" . arrayToString($results));
  234 +
  235 + return $results;
245 236 }
246 237 }
247 238  
... ...