Commit c041d149c7bb28ee7683414315849ea9b70cb667

Authored by Conrad Vermeulen
1 parent 6060dbba

WSA-3

"Error occurs in >>ktws_eg_folder_listing.php<<"
Fixed. Rewrote get_listing() to accomodate anonymous.

Reviewed By: Kevin Fourie

git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@6822 c91229c3-7414-0410-bfa2-8a42b809f60b
ktapi/KTAPIConstants.inc.php
@@ -68,5 +68,6 @@ define(&#39;KTAPI_PERMISSION_RENAME_FOLDER&#39;, &#39;ktcore.permissions.folder_rename&#39;); @@ -68,5 +68,6 @@ define(&#39;KTAPI_PERMISSION_RENAME_FOLDER&#39;, &#39;ktcore.permissions.folder_rename&#39;);
68 define('KTAPI_PERMISSION_CHANGE_OWNERSHIP', 'ktcore.permissions.security'); 68 define('KTAPI_PERMISSION_CHANGE_OWNERSHIP', 'ktcore.permissions.security');
69 define('KTAPI_PERMISSION_DOCUMENT_MOVE', 'ktcore.permissions.write'); 69 define('KTAPI_PERMISSION_DOCUMENT_MOVE', 'ktcore.permissions.write');
70 define('KTAPI_PERMISSION_WORKFLOW', 'ktcore.permissions.workflow'); 70 define('KTAPI_PERMISSION_WORKFLOW', 'ktcore.permissions.workflow');
  71 +define('KTAPI_PERMISSION_VIEW_FOLDER', 'ktcore.permissions.folder_details');
71 72
72 ?> 73 ?>
73 \ No newline at end of file 74 \ No newline at end of file
ktapi/KTAPIFolder.inc.php
@@ -232,127 +232,161 @@ class KTAPI_Folder extends KTAPI_FolderItem @@ -232,127 +232,161 @@ class KTAPI_Folder extends KTAPI_FolderItem
232 return $this->_get_document_by_name($documentname,'getByFilenameAndFolder'); 232 return $this->_get_document_by_name($documentname,'getByFilenameAndFolder');
233 } 233 }
234 234
235 - function get_listing($depth=1, $what='DF') 235 + function _resolve_user($userid)
236 { 236 {
  237 + $user=null;
  238 +
  239 + if (!is_null($userid))
  240 + {
  241 + $user=User::get($userid);
  242 + if (is_null($user) || PEAR::isError($user))
  243 + {
  244 + $user=null;
  245 + }
  246 + }
  247 + return $user;
  248 + }
  249 +
  250 +
  251 + function get_listing($depth=1, $what='DF')
  252 + {
237 if ($depth < 1) 253 if ($depth < 1)
238 { 254 {
239 return array(); 255 return array();
240 } 256 }
241 - $permission = &KTPermission::getByName(KTAPI_PERMISSION_READ);  
242 - $permissionid= $permission->getId();  
243 257
244 - $user = $this->ktapi->get_user();  
245 - $descriptors=KTPermissionUtil::getPermissionDescriptorsForUser($user);  
246 - if (is_null($descriptors) || PEAR::isError($descriptors))  
247 - {  
248 - return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR . ': problem with descriptors for user', $descriptors);  
249 - }  
250 - if (count($descriptors == 0))  
251 - {  
252 - $descriptors=array(0);  
253 - } 258 + $what = strtoupper($what);
  259 + $read_permission = &KTPermission::getByName(KTAPI_PERMISSION_READ);
  260 + $folder_permission = &KTPermission::getByName(KTAPI_PERMISSION_VIEW_FOLDER);
  261 +
254 262
255 - $aPermissionDescriptors = implode(',',$descriptors); 263 + $user = $this->ktapi->get_user();
  264 +
  265 + $contents = array();
256 266
257 - $sql = '';  
258 - if (strpos($what,'D') !== false)  
259 - {  
260 - $sql .= "SELECT  
261 - d.id,  
262 - 'D' as item_type,  
263 - dmv.name as title,  
264 - ifnull(uc.name, 'n/a') AS creator,  
265 - ifnull(cou.name, 'n/a') AS checkedoutby,  
266 - ifnull(mu.name, 'n/a') AS modifiedby,  
267 - dcv.filename,  
268 - dcv.size,  
269 - dcv.major_version,  
270 - dcv.minor_version,  
271 - dcv.storage_path,  
272 - ifnull(mt.mimetypes, 'unknown') as mime_type,  
273 - ifnull(mt.icon_path, 'unknown') as mime_icon_path,  
274 - ifnull(mt.friendly_name, 'unknown') as mime_display  
275 - FROM  
276 - documents d  
277 - INNER JOIN permission_lookups AS PL ON d.permission_lookup_id = PL.id  
278 - INNER JOIN permission_lookup_assignments AS PLA ON PL.id = PLA.permission_lookup_id AND PLA.permission_id = $permissionid  
279 - INNER JOIN document_metadata_version AS dmv ON d.metadata_version_id=dmv.id  
280 - INNER JOIN document_content_version AS dcv ON dmv.content_version_id=dcv.id  
281 - LEFT OUTER JOIN mime_types mt ON dcv.mime_id = mt.id  
282 - LEFT OUTER JOIN users AS uc ON d.creator_id=uc.id  
283 - LEFT OUTER JOIN users AS cou ON d.checked_out_user_id=cou.id  
284 - LEFT OUTER JOIN users AS mu ON d.modified_user_id=mu.id  
285 - WHERE  
286 - d.folder_id=$this->folderid  
287 - AND d.status_id = 1  
288 - AND PLA.permission_descriptor_id IN ($aPermissionDescriptors)";  
289 - }  
290 -  
291 if (strpos($what,'F') !== false) 267 if (strpos($what,'F') !== false)
292 { 268 {
293 - if (strpos($what,'D') !== false) 269 + $folder_children = Folder::getList(array('parent_id = ?', $this->folderid));
  270 +
  271 +
  272 + foreach ($folder_children as $folder)
294 { 273 {
295 - $sql .= ' UNION '; 274 + if(KTPermissionUtil::userHasPermissionOnItem($user, $folder_permission, $folder))
  275 + {
  276 + $creator=$this->_resolve_user($folder->getCreatorID());
  277 +
  278 + if ($depth-1 > 0)
  279 + {
  280 + $sub_folder = &$this->ktapi->get_folder_by_id($folder->getId());
  281 + $items = $folder->get_listing($depth-1);
  282 + }
  283 + else
  284 + {
  285 + $items=array();
  286 + }
  287 +
  288 +
  289 + $contents[] = array(
  290 + 'id' => (int) $folder->getId(),
  291 + 'item_type'=>'F',
  292 + 'title'=>$folder->getName(),
  293 + 'creator'=>is_null($creator)?'n/a':$creator->getName(),
  294 + 'checkedoutby'=>'n/a',
  295 + 'modifiedby'=>'n/a',
  296 + 'filename'=>$folder->getName(),
  297 + 'size'=>'n/a',
  298 + 'major_version'=>'n/a',
  299 + 'minor_version'=>'n/a',
  300 + 'storage_path'=>'n/a',
  301 + 'mime_type'=>'folder',
  302 + 'mime_icon_path'=>'folder',
  303 + 'mime_display'=>'Folder',
  304 + 'items'=>$items,
  305 + 'workflow'=>'n/a',
  306 + 'workflow_state'=>'n/a'
  307 +
  308 + );
  309 + }
296 } 310 }
297 -  
298 - $sql .= "  
299 - SELECT  
300 - f.id,  
301 - 'F' as item_type,  
302 - f.name as title,  
303 - ifnull(uc.name, 'n/a') AS creator,  
304 - 'n/a' checkedoutby,  
305 - 'n/a' AS modifiedby,  
306 - f.name as filename,  
307 - 'n/a' as size,  
308 - 'n/a' as major_version,  
309 - 'n/a' as minor_version,  
310 - 'n/a' as storage_path,  
311 - 'folder' as mime_type,  
312 - 'folder' as mime_icon_path,  
313 - 'Folder' as mime_display  
314 - FROM  
315 - folders f  
316 - INNER JOIN permission_lookups AS PL ON f.permission_lookup_id = PL.id  
317 - INNER JOIN permission_lookup_assignments AS PLA ON PL.id = PLA.permission_lookup_id AND PLA.permission_id = $permissionid  
318 - LEFT OUTER JOIN users AS uc ON f.creator_id=uc.id  
319 -  
320 - WHERE  
321 - f.parent_id=$this->folderid  
322 -  
323 - AND PLA.permission_descriptor_id IN ($aPermissionDescriptors)  
324 - ORDER BY item_type DESC, title, filename  
325 - ";  
326 - }  
327 -  
328 - $contents = DBUtil::getResultArray($sql);  
329 - if (is_null($contents) || PEAR::isError($contents))  
330 - {  
331 - return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR , $contents);  
332 } 311 }
333 -  
334 - $num_items = count($contents);  
335 - for($i=0;$i<$num_items;$i++) 312 + if (strpos($what,'D') !== false)
336 { 313 {
337 - $contents[$i]['id'] = (int) $contents[$i]['id'];  
338 - if ($contents[$i]['item_type'] == 'D')  
339 - {  
340 - $contents[$i]['items'] = array();  
341 - }  
342 - else 314 + $document_children = Document::getList(array('folder_id = ? AND status_id = 1', $this->folderid));
  315 +
  316 + // I hate that KT doesn't cache things nicely...
  317 + $mime_cache=array();
  318 +
  319 + foreach ($document_children as $document)
343 { 320 {
344 - if ($depth-1 > 0) 321 + if (KTPermissionUtil::userHasPermissionOnItem($user, $read_permission, $document))
345 { 322 {
346 - $folder = &$this->ktapi->get_folder_by_id($item['id']);  
347 - $contents[$i]['items'] = $folder->get_listing($depth-1);  
348 - }  
349 - else  
350 - {  
351 - $contents[$i]['items'] = array(); 323 + $creator=$this->_resolve_user($document->getCreatorID());
  324 + $checkedoutby=$this->_resolve_user($document->getCheckedOutUserID());
  325 + $modifiedby=$this->_resolve_user($document->getCreatorID());
  326 +
  327 + $mimetypeid=$document->getMimeTypeID();
  328 + if (!array_key_exists($mimetypeid, $mime_cache))
  329 + {
  330 +
  331 + $type=KTMime::getMimeTypeName($mimetypeid);
  332 + $icon=KTMime::getIconPath($mimetypeid);
  333 + $display=KTMime::getFriendlyNameForString($type);
  334 + $mime_cache[$mimetypeid] = array(
  335 + 'type'=>$type,
  336 + 'icon'=>$icon,
  337 + 'display'=>$display
  338 +
  339 + );
  340 + }
  341 + $mimeinfo=$mime_cache[$mimetypeid];
  342 +
  343 + $workflow = KTWorkflowUtil::getWorkflowForDocument($document);
  344 +
  345 + if (!is_null($workflow) && !PEAR::isError($workflow))
  346 + {
  347 + $workflow=$workflow->getHumanName();
  348 +
  349 + $state=KTWorkflowUtil::getWorkflowStateForDocument($document);
  350 + if (!is_null($state) && !PEAR::isError($state))
  351 + {
  352 + $state=$state->getHumanName();
  353 + }
  354 + else
  355 + {
  356 + $state='n/a';
  357 + }
  358 + }
  359 + else
  360 + {
  361 + $workflow='n/a';
  362 + $state='n/a';
  363 + }
  364 +
  365 +
  366 + $contents[] = array(
  367 + 'id' => (int) $document->getId(),
  368 + 'item_type'=>'D',
  369 + 'title'=>$document->getName(),
  370 + 'creator'=>is_null($creator)?'n/a':$creator->getName(),
  371 + 'checkedoutby'=>is_null($checkedoutby)?'n/a':$checkedoutby->getName(),
  372 + 'modifiedby'=>is_null($modifiedby)?'n/a':$modifiedby->getName(),
  373 + 'filename'=>$document->getName(),
  374 + 'size'=>$document->getFileSize(),
  375 + 'major_version'=>$document->getMajorVersionNumber(),
  376 + 'minor_version'=>$document->getMinorVersionNumber(),
  377 + 'storage_path'=>$document->getStoragePath(),
  378 + 'mime_type'=>$mime_cache[$mimetypeid]['type'],
  379 + 'mime_icon_path'=>$mime_cache[$mimetypeid]['icon'],
  380 + 'mime_display'=>$mime_cache[$mimetypeid]['display'],
  381 + 'items'=>array(),
  382 + 'workflow'=>$workflow,
  383 + 'workflow_state'=>$state
  384 + );
352 } 385 }
353 } 386 }
  387 +
354 } 388 }
355 - 389 +
356 return $contents; 390 return $contents;
357 } 391 }
358 392
ktapi/KTAPISession.inc.php
@@ -266,7 +266,11 @@ class KTAPI_UserSession extends KTAPI_Session @@ -266,7 +266,11 @@ class KTAPI_UserSession extends KTAPI_Session
266 $sql = "UPDATE active_sessions SET last_used='$now' WHERE id=$sessionid"; 266 $sql = "UPDATE active_sessions SET last_used='$now' WHERE id=$sessionid";
267 DBUtil::runQuery($sql); 267 DBUtil::runQuery($sql);
268 268
269 - $session = &new KTAPI_UserSession($ktapi, $user, $session, $sessionid, $ip); 269 +
  270 + if ($user->isAnonymous())
  271 + $session = &new KTAPI_AnonymousSession($ktapi, $user, $session, $sessionid, $ip);
  272 + else
  273 + $session = &new KTAPI_UserSession($ktapi, $user, $session, $sessionid, $ip);
270 return $session; 274 return $session;
271 } 275 }
272 276