Commit e18c26edcb647faf266ec8680f205ea8c62f7bef
1 parent
7d0062de
Merged in from DEV trunk...
"KTS-2121" "ldap plugin not validating username correctly" Fixed. Reviewed By: Kevin Fourie 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/STABLE/trunk@6824 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
6 changed files
with
247 additions
and
138 deletions
ktapi/KTAPIConstants.inc.php
| ... | ... | @@ -68,5 +68,6 @@ define('KTAPI_PERMISSION_RENAME_FOLDER', 'ktcore.permissions.folder_rename'); |
| 68 | 68 | define('KTAPI_PERMISSION_CHANGE_OWNERSHIP', 'ktcore.permissions.security'); |
| 69 | 69 | define('KTAPI_PERMISSION_DOCUMENT_MOVE', 'ktcore.permissions.write'); |
| 70 | 70 | define('KTAPI_PERMISSION_WORKFLOW', 'ktcore.permissions.workflow'); |
| 71 | +define('KTAPI_PERMISSION_VIEW_FOLDER', 'ktcore.permissions.folder_details'); | |
| 71 | 72 | |
| 72 | 73 | ?> |
| 73 | 74 | \ No newline at end of file | ... | ... |
ktapi/KTAPIDocument.inc.php
| ... | ... | @@ -237,7 +237,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 237 | 237 | if (PEAR::isError($user)) |
| 238 | 238 | { |
| 239 | 239 | return $user; |
| 240 | - } | |
| 240 | + } | |
| 241 | 241 | |
| 242 | 242 | if ($this->document->getIsCheckedOut()) |
| 243 | 243 | { |
| ... | ... | @@ -267,7 +267,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 267 | 267 | if (PEAR::isError($user)) |
| 268 | 268 | { |
| 269 | 269 | return $user; |
| 270 | - } | |
| 270 | + } | |
| 271 | 271 | |
| 272 | 272 | DBUtil::startTransaction(); |
| 273 | 273 | |
| ... | ... | @@ -346,25 +346,25 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 346 | 346 | } |
| 347 | 347 | |
| 348 | 348 | $name = $this->document->getName(); |
| 349 | - $clash = KTDocumentUtil::nameExists($target_folder, $name); | |
| 349 | + $clash = KTDocumentUtil::nameExists($target_folder, $name); | |
| 350 | 350 | if ($clash && !is_null($newname)) |
| 351 | 351 | { |
| 352 | 352 | $name = $newname; |
| 353 | 353 | $clash = KTDocumentUtil::nameExists($target_folder, $name); |
| 354 | - } | |
| 354 | + } | |
| 355 | 355 | if ($clash) |
| 356 | 356 | { |
| 357 | 357 | return new PEAR_Error('A document with this title already exists in your chosen folder. Please choose a different folder, or specify a new title for the copied document.'); |
| 358 | 358 | } |
| 359 | 359 | |
| 360 | 360 | $filename=$this->document->getFilename(); |
| 361 | - $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 361 | + $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 362 | 362 | |
| 363 | 363 | if ($clash && !is_null($newname)) |
| 364 | 364 | { |
| 365 | 365 | $filename = $newfilename; |
| 366 | - $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 367 | - } | |
| 366 | + $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 367 | + } | |
| 368 | 368 | if ($clash) |
| 369 | 369 | { |
| 370 | 370 | return new PEAR_Error('A document with this filename already exists in your chosen folder. Please choose a different folder, or specify a new filename for the copied document.'); |
| ... | ... | @@ -435,7 +435,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 435 | 435 | if (PEAR::isError($user)) |
| 436 | 436 | { |
| 437 | 437 | return $user; |
| 438 | - } | |
| 438 | + } | |
| 439 | 439 | |
| 440 | 440 | if ($this->document->getIsCheckedOut()) |
| 441 | 441 | { |
| ... | ... | @@ -457,25 +457,25 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 457 | 457 | } |
| 458 | 458 | |
| 459 | 459 | $name = $this->document->getName(); |
| 460 | - $clash = KTDocumentUtil::nameExists($target_folder, $name); | |
| 460 | + $clash = KTDocumentUtil::nameExists($target_folder, $name); | |
| 461 | 461 | if ($clash && !is_null($newname)) |
| 462 | 462 | { |
| 463 | 463 | $name = $newname; |
| 464 | 464 | $clash = KTDocumentUtil::nameExists($target_folder, $name); |
| 465 | - } | |
| 465 | + } | |
| 466 | 466 | if ($clash) |
| 467 | 467 | { |
| 468 | 468 | return new PEAR_Error('A document with this title already exists in your chosen folder. Please choose a different folder, or specify a new title for the moved document.'); |
| 469 | 469 | } |
| 470 | 470 | |
| 471 | 471 | $filename=$this->document->getFilename(); |
| 472 | - $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 472 | + $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 473 | 473 | |
| 474 | 474 | if ($clash && !is_null($newname)) |
| 475 | 475 | { |
| 476 | 476 | $filename = $newfilename; |
| 477 | - $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 478 | - } | |
| 477 | + $clash = KTDocumentUtil::fileExists($target_folder, $filename); | |
| 478 | + } | |
| 479 | 479 | if ($clash) |
| 480 | 480 | { |
| 481 | 481 | return new PEAR_Error('A document with this filename already exists in your chosen folder. Please choose a different folder, or specify a new filename for the moved document.'); |
| ... | ... | @@ -516,7 +516,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 516 | 516 | if (PEAR::isError($user)) |
| 517 | 517 | { |
| 518 | 518 | return $user; |
| 519 | - } | |
| 519 | + } | |
| 520 | 520 | |
| 521 | 521 | DBUtil::startTransaction(); |
| 522 | 522 | $res = KTDocumentUtil::rename($this->document, $newname, $user); |
| ... | ... | @@ -525,7 +525,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 525 | 525 | DBUtil::rollback(); |
| 526 | 526 | return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); |
| 527 | 527 | } |
| 528 | - DBUtil::commit(); | |
| 528 | + DBUtil::commit(); | |
| 529 | 529 | } |
| 530 | 530 | |
| 531 | 531 | /** |
| ... | ... | @@ -540,7 +540,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 540 | 540 | if (PEAR::isError($user)) |
| 541 | 541 | { |
| 542 | 542 | return $user; |
| 543 | - } | |
| 543 | + } | |
| 544 | 544 | |
| 545 | 545 | $doctypeid = KTAPI::get_documenttypeid($documenttype); |
| 546 | 546 | |
| ... | ... | @@ -571,7 +571,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 571 | 571 | if (PEAR::isError($user)) |
| 572 | 572 | { |
| 573 | 573 | return $user; |
| 574 | - } | |
| 574 | + } | |
| 575 | 575 | |
| 576 | 576 | if ($this->document->getName() != $newname) |
| 577 | 577 | { |
| ... | ... | @@ -753,7 +753,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 753 | 753 | { |
| 754 | 754 | if ($fieldset->getIsConditional()) { /* this is not implemented...*/ continue; } |
| 755 | 755 | |
| 756 | - $fields = $fieldset->getFields(); | |
| 756 | + $fields = $fieldset->getFields(); | |
| 757 | 757 | $result = array('fieldset' => $fieldset->getName(), |
| 758 | 758 | 'description' => $fieldset->getDescription()); |
| 759 | 759 | |
| ... | ... | @@ -761,7 +761,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 761 | 761 | |
| 762 | 762 | foreach ($fields as $field) |
| 763 | 763 | { |
| 764 | - $value = 'n/a'; | |
| 764 | + $value = 'n/a'; | |
| 765 | 765 | |
| 766 | 766 | $fieldvalue = DocumentFieldLink::getByDocumentAndField($this->document, $field); |
| 767 | 767 | if (!is_null($fieldvalue) && (!PEAR::isError($fieldvalue))) |
| ... | ... | @@ -777,12 +777,12 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 777 | 777 | { |
| 778 | 778 | $controltype = 'tree'; |
| 779 | 779 | } |
| 780 | - } | |
| 780 | + } | |
| 781 | 781 | |
| 782 | 782 | switch ($controltype) |
| 783 | 783 | { |
| 784 | 784 | case 'lookup': |
| 785 | - $selection = KTAPI::get_metadata_lookup($field->getId()); | |
| 785 | + $selection = KTAPI::get_metadata_lookup($field->getId()); | |
| 786 | 786 | break; |
| 787 | 787 | case 'tree': |
| 788 | 788 | $selection = KTAPI::get_metadata_tree($field->getId()); |
| ... | ... | @@ -807,7 +807,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 807 | 807 | $results [] = $result; |
| 808 | 808 | } |
| 809 | 809 | |
| 810 | - return $results; | |
| 810 | + return $results; | |
| 811 | 811 | } |
| 812 | 812 | |
| 813 | 813 | /** |
| ... | ... | @@ -817,28 +817,60 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 817 | 817 | */ |
| 818 | 818 | function update_metadata($metadata) |
| 819 | 819 | { |
| 820 | + global $default; | |
| 820 | 821 | $packed = array(); |
| 821 | 822 | |
| 822 | 823 | foreach($metadata as $fieldset_metadata) |
| 823 | 824 | { |
| 824 | - $fieldsetname=$fieldset_metadata['fieldset']; | |
| 825 | + if (is_array($fieldset_metadata)) | |
| 826 | + { | |
| 827 | + $fieldsetname=$fieldset_metadata['fieldset']; | |
| 828 | + $fields=$fieldset_metadata['fields']; | |
| 829 | + } | |
| 830 | + elseif (is_a($fieldset_metadata, 'stdClass')) | |
| 831 | + { | |
| 832 | + $fieldsetname=$fieldset_metadata->fieldset; | |
| 833 | + $fields=$fieldset_metadata->fields; | |
| 834 | + } | |
| 835 | + else | |
| 836 | + { | |
| 837 | + $default->log->debug("unexpected fieldset type"); | |
| 838 | + continue; | |
| 839 | + } | |
| 840 | + | |
| 825 | 841 | $fieldset = KTFieldset::getByName($fieldsetname); |
| 826 | 842 | if (is_null($fieldset) || PEAR::isError($fieldset)) |
| 827 | 843 | { |
| 844 | + $default->log->debug("could not resolve fieldset: $fieldsetname"); | |
| 828 | 845 | // exit graciously |
| 829 | 846 | continue; |
| 830 | 847 | } |
| 831 | 848 | |
| 832 | - foreach($fieldset_metadata['fields'] as $fieldinfo) | |
| 849 | + foreach($fields as $fieldinfo) | |
| 833 | 850 | { |
| 834 | - $fieldname = $fieldinfo['name']; | |
| 851 | + if (is_array($fieldinfo)) | |
| 852 | + { | |
| 853 | + $fieldname = $fieldinfo['name']; | |
| 854 | + $value = $fieldinfo['value']; | |
| 855 | + } | |
| 856 | + elseif (is_a($fieldinfo, 'stdClass')) | |
| 857 | + { | |
| 858 | + $fieldname = $fieldinfo->name; | |
| 859 | + $value = $fieldinfo->value; | |
| 860 | + } | |
| 861 | + else | |
| 862 | + { | |
| 863 | + $default->log->debug("unexpected fieldinfo type"); | |
| 864 | + continue; | |
| 865 | + } | |
| 866 | + | |
| 835 | 867 | $field = DocumentField::getByFieldsetAndName($fieldset, $fieldname); |
| 836 | 868 | if (is_null($field) || PEAR::isError($fieldset)) |
| 837 | 869 | { |
| 870 | + $default->log->debug("could not resolve field: $fieldname"); | |
| 838 | 871 | // exit graciously |
| 839 | 872 | continue; |
| 840 | - } | |
| 841 | - $value = $fieldinfo['value']; | |
| 873 | + } | |
| 842 | 874 | |
| 843 | 875 | $packed[] = array($field, $value); |
| 844 | 876 | } |
| ... | ... | @@ -890,7 +922,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 890 | 922 | } |
| 891 | 923 | foreach($transitions as $transition) |
| 892 | 924 | { |
| 893 | - $result[] = $transition->getName(); | |
| 925 | + $result[] = $transition->getName(); | |
| 894 | 926 | } |
| 895 | 927 | |
| 896 | 928 | return $result; |
| ... | ... | @@ -1042,7 +1074,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1042 | 1074 | function download($version=null) |
| 1043 | 1075 | { |
| 1044 | 1076 | $storage =& KTStorageManagerUtil::getSingleton(); |
| 1045 | - $options = array(); | |
| 1077 | + $options = array(); | |
| 1046 | 1078 | |
| 1047 | 1079 | |
| 1048 | 1080 | $oDocumentTransaction = & new DocumentTransaction($this->document, 'Document downloaded', 'ktcore.transactions.download', $aOptions); |
| ... | ... | @@ -1091,7 +1123,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1091 | 1123 | $user = User::get($userid); |
| 1092 | 1124 | |
| 1093 | 1125 | $version['user'] = $user->getName(); |
| 1094 | - $version['metadata_version'] = $document->getMetadataVersion(); | |
| 1126 | + $version['metadata_version'] = $document->getMetadataVersion(); | |
| 1095 | 1127 | $version['content_version'] = $document->getVersion(); |
| 1096 | 1128 | |
| 1097 | 1129 | $versions[] = $version; |
| ... | ... | @@ -1143,7 +1175,7 @@ class KTAPI_Document extends KTAPI_FolderItem |
| 1143 | 1175 | { |
| 1144 | 1176 | $this->document->setFolderId(1); |
| 1145 | 1177 | $folder = Folder::get(1); |
| 1146 | - } | |
| 1178 | + } | |
| 1147 | 1179 | else |
| 1148 | 1180 | { |
| 1149 | 1181 | $this->document->setFolderId($this->document->getRestoreFolderId()); | ... | ... |
ktapi/KTAPIFolder.inc.php
| ... | ... | @@ -232,127 +232,161 @@ class KTAPI_Folder extends KTAPI_FolderItem |
| 232 | 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 | 253 | if ($depth < 1) |
| 238 | 254 | { |
| 239 | 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 | 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 | 390 | return $contents; |
| 357 | 391 | } |
| 358 | 392 | ... | ... |
ktapi/KTAPISession.inc.php
| ... | ... | @@ -266,7 +266,11 @@ class KTAPI_UserSession extends KTAPI_Session |
| 266 | 266 | $sql = "UPDATE active_sessions SET last_used='$now' WHERE id=$sessionid"; |
| 267 | 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 | 274 | return $session; |
| 271 | 275 | } |
| 272 | 276 | ... | ... |
ktwebservice/webservice.php
| ... | ... | @@ -126,6 +126,8 @@ class KTWebService |
| 126 | 126 | 'mime_type' => 'string', |
| 127 | 127 | 'mime_icon_path' => 'string', |
| 128 | 128 | 'mime_display' => 'string', |
| 129 | + 'workflow'=>'string', | |
| 130 | + 'workflow_state'=>'string', | |
| 129 | 131 | 'items' =>"{urn:$this->namespace}kt_folder_items" |
| 130 | 132 | ); |
| 131 | 133 | |
| ... | ... | @@ -303,6 +305,13 @@ class KTWebService |
| 303 | 305 | array('in' => array('username' => 'string', 'password' => 'string', 'ip' => 'string'), |
| 304 | 306 | 'out' => array('return' => "{urn:$this->namespace}kt_response" ), |
| 305 | 307 | ); |
| 308 | + | |
| 309 | + // anonymous_login | |
| 310 | + $this->__dispatch_map['anonymous_login'] = | |
| 311 | + array('in' => array('ip' => 'string'), | |
| 312 | + 'out' => array('return' => "{urn:$this->namespace}kt_response" ), | |
| 313 | + ); | |
| 314 | + | |
| 306 | 315 | |
| 307 | 316 | // logout |
| 308 | 317 | $this->__dispatch_map['logout'] = |
| ... | ... | @@ -586,7 +595,36 @@ class KTWebService |
| 586 | 595 | } |
| 587 | 596 | return $kt; |
| 588 | 597 | } |
| 589 | - | |
| 598 | + | |
| 599 | + /** | |
| 600 | + * Creates a new anonymous session. | |
| 601 | + * | |
| 602 | + * @param string $ip | |
| 603 | + * @return kt_response | |
| 604 | + */ | |
| 605 | + function anonymous_login($ip=null) | |
| 606 | + { | |
| 607 | + $response = array( | |
| 608 | + 'status_code'=>KTWS_ERR_AUTHENTICATION_ERROR, | |
| 609 | + 'message'=>'', | |
| 610 | + ); | |
| 611 | + | |
| 612 | + $kt = &new KTAPI(); | |
| 613 | + | |
| 614 | + $session = $kt->start_anonymous_session($ip); | |
| 615 | + | |
| 616 | + if (PEAR::isError($session)) | |
| 617 | + { | |
| 618 | + $response['message'] = $session->getMessage(); | |
| 619 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $response); | |
| 620 | + } | |
| 621 | + | |
| 622 | + $response['status_code'] = KTWS_SUCCESS; | |
| 623 | + $response['message'] = $session->get_session(); | |
| 624 | + | |
| 625 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_response", $response); | |
| 626 | + } | |
| 627 | + | |
| 590 | 628 | /** |
| 591 | 629 | * Creates a new session for the user. |
| 592 | 630 | * |
| ... | ... | @@ -672,7 +710,7 @@ class KTWebService |
| 672 | 710 | 'status_code'=>KTWS_ERR_INVALID_FOLDER, |
| 673 | 711 | 'message'=>$folder->getMessage() |
| 674 | 712 | ); |
| 675 | - return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $kt); | |
| 713 | + return new SOAP_Value('return',"{urn:$this->namespace}kt_folder_detail", $response); | |
| 676 | 714 | } |
| 677 | 715 | |
| 678 | 716 | $detail = $folder->get_detail(); |
| ... | ... | @@ -810,7 +848,7 @@ class KTWebService |
| 810 | 848 | } |
| 811 | 849 | |
| 812 | 850 | $listing = $folder->get_listing($depth, $what); |
| 813 | - | |
| 851 | + | |
| 814 | 852 | $contents = array( |
| 815 | 853 | 'status_code'=>KTWS_SUCCESS, |
| 816 | 854 | 'message'=>'', | ... | ... |
plugins/ktstandard/ldap/ldapbaseauthenticationprovider.inc.php
| ... | ... | @@ -264,7 +264,7 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider { |
| 264 | 264 | $name = KTUtil::arrayGet($_REQUEST, 'name'); |
| 265 | 265 | if (empty($name)) { $this->errorRedirectToMain(_kt('You must specify a name for the user.')); } |
| 266 | 266 | $username = KTUtil::arrayGet($_REQUEST, 'ldap_username'); |
| 267 | - if (empty($name)) { $this->errorRedirectToMain(_kt('You must specify a new username.')); } | |
| 267 | + if (empty($username)) { $this->errorRedirectToMain(_kt('You must specify a new username.')); } | |
| 268 | 268 | // FIXME check for non-clashing usernames. |
| 269 | 269 | |
| 270 | 270 | $email_address = KTUtil::arrayGet($_REQUEST, 'email_address'); | ... | ... |