From a1e23ec9f0690b4e0552822d0caf89b241a63eb1 Mon Sep 17 00:00:00 2001 From: Conrad Vermeulen Date: Mon, 25 Jun 2007 12:26:01 +0000 Subject: [PATCH] KTS-2129 "Add get_document_type_metadata() to webservice" Fixed. Also added links as KTS-2130. --- ktapi/KTAPIConstants.inc.php | 15 ++++++++------- ktapi/KTAPIDocument.inc.php | 533 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ktapi/KTAPIFolder.inc.php | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------------------------------------------------ ktapi/KTAPISession.inc.php | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------- ktapi/ktapi.inc.php | 256 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------------------------------- 5 files changed, 685 insertions(+), 472 deletions(-) diff --git a/ktapi/KTAPIConstants.inc.php b/ktapi/KTAPIConstants.inc.php index 1275eb7..066304f 100644 --- a/ktapi/KTAPIConstants.inc.php +++ b/ktapi/KTAPIConstants.inc.php @@ -1,12 +1,12 @@ documentid; - } - + } + /** * This is used to get a document based on document id. * - * @static + * @static * @access public * @param KTAPI $ktapi * @param int $documentid @@ -69,42 +69,42 @@ class KTAPI_Document extends KTAPI_FolderItem assert(!is_null($ktapi)); assert(is_a($ktapi, 'KTAPI')); assert(is_numeric($documentid)); - + $documentid += 0; - + $document = &Document::get($documentid); if (is_null($document) || PEAR::isError($document)) { return new KTAPI_Error(KTAPI_ERROR_DOCUMENT_INVALID,$document ); } - + $user = $ktapi->can_user_access_object_requiring_permission($document, KTAPI_PERMISSION_READ); - + if (is_null($user) || PEAR::isError($user)) { return $user; - } - + } + $folderid = $document->getParentID(); if (!is_null($folderid)) { $ktapi_folder = &KTAPI_Folder::get($ktapi, $folderid); } - else + else { $ktapi_folder = null; } // We don't do any checks on this folder as it could possibly be deleted, and is not required right now. return new KTAPI_Document($ktapi, $ktapi_folder, $document); - } - + } + function is_deleted() { return ($this->document->getStatusID() == 3); } - + /** * This is the constructor for the KTAPI_Folder. * @@ -112,18 +112,18 @@ class KTAPI_Document extends KTAPI_FolderItem * @param KTAPI $ktapi * @param Document $document * @return KTAPI_Document - */ + */ function KTAPI_Document(&$ktapi, &$ktapi_folder, &$document) { assert(is_a($ktapi,'KTAPI')); assert(is_null($ktapi_folder) || is_a($ktapi_folder,'KTAPI_Folder')); - + $this->ktapi = &$ktapi; $this->ktapi_folder = &$ktapi_folder; $this->document = &$document; $this->documentid = $document->getId(); } - + /** * This checks a document into the repository * @@ -131,21 +131,21 @@ class KTAPI_Document extends KTAPI_FolderItem * @param string $reason * @param string $tempfilename * @param bool $major_update - */ + */ function checkin($filename, $reason, $tempfilename, $major_update=false) - { + { if (!is_file($tempfilename)) { return new PEAR_Error('File does not exist.'); } - + $user = $this->can_user_access_object_requiring_permission($this->document, KTAPI_PERMISSION_WRITE); - + if (PEAR::isError($user)) { return $user; } - + if (!$this->document->getIsCheckedOut()) { return new PEAR_Error(KTAPI_ERROR_DOCUMENT_NOT_CHECKED_OUT); @@ -168,23 +168,63 @@ class KTAPI_Document extends KTAPI_FolderItem return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$result); } DBUtil::commit(); - + $tempfilename=addslashes($tempfilename); $sql = "DELETE FROM uploaded_files WHERE tempfilename='$tempfilename'"; - $result = DBUtil::runQuery($sql); + $result = DBUtil::runQuery($sql); if (PEAR::isError($result)) { return $result; - } - + } + + } + + /** + * Link a document to another + * + * @param KTAPI_Document $document + */ + function link_document($document, $type) + { + $typeid = $this->ktapi->get_link_type_id($type); + if (PEAR::isError($typeid)) + { + return $result; + } + + $link = new DocumentLink($this->get_documentid(), $document->get_documentid(), $typeid ); + $created = $link->create(); + if ($created === false || PEAR::isError($created)) + { + return new PEAR_Error(_kt('Could not create link')); + } + } + + /** + * Unlink a document to another + * + * @param KTAPI_Document $document + */ + function unlink_document($document) + { + $sql = "DELETE FROM document_link WHERE parent_document_id=$this->documentid AND child_document_id=$document->documentid"; + $result = DBUtil::runQuery($sql); + if (empty($result) || PEAR::isError($created)) + { + return new PEAR_Error(_kt('Could not remove link')); + } } - - + + + /** + * + * @return boolean + */ function is_checked_out() { - return ($this->document->getIsCheckedOut()); + return ($this->document->getIsCheckedOut()); } - + /** * This reverses the checkout process. * @@ -193,7 +233,7 @@ class KTAPI_Document extends KTAPI_FolderItem function undo_checkout($reason) { $user = $this->can_user_access_object_requiring_permission($this->document, KTAPI_PERMISSION_WRITE); - + if (PEAR::isError($user)) { return $user; @@ -214,9 +254,9 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res); } - + $oDocumentTransaction = & new DocumentTransaction($this->document, $reason, 'ktcore.transactions.force_checkin'); - + $res = $oDocumentTransaction->create(); if (($res === false) || PEAR::isError($res)) { DBUtil::rollback(); @@ -225,6 +265,63 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::commit(); } + function get_linked_documents() + { + $sql = " + SELECT + dl.child_document_id as document_id, + dmv.name as title, + dcv.size, + w.name as workflow, + ws.name as workflow_state, + dlt.name as link_type + FROM + document_link dl + INNER JOIN document_link_types dlt ON dl.link_type_id=dlt.id + INNER JOIN documents d ON dl.child_document_id=d.id + INNER JOIN document_metadata_version dmv ON d.metadata_version_id=dmv.id + INNER JOIN document_content_version dcv ON dmv.content_version_id=dcv.id + LEFT OUTER JOIN workflow_documents wd ON d.id=wd.document_id + LEFT OUTER JOIN workflows w ON w.id=wd.workflow_id + LEFT OUTER JOIN workflow_states ws ON wd.state_id=ws.id + WHERE + dl.parent_document_id=$this->documentid + + "; + $rows = DBUtil::getResultArray($sql); + if (PEAR::isError($rows)) + { + return $rows; + } + $result=array(); + $read_permission = &KTPermission::getByName(KTAPI_PERMISSION_READ); + $user = $this->ktapi->get_user(); + + foreach($rows as $row) + { + $document = Document::get($row['document_id']); + if (PEAR::isError($document) || is_null($document)) + { + continue; + } + if(!KTPermissionUtil::userHasPermissionOnItem($user, $read_permission, $document)) + { + continue; + } + $result[] = array( + 'document_id'=>(int)$row['document_id'], + 'title'=> $row['title'], + 'size'=>(int)$row['size'], + 'workflow'=>$row['workflow'], + 'workflow_state'=>$row['workflow_state'], + 'link_type'=>$row['link_type'], + ); + } + + return $result; + } + + /** * This returns a URL to the file that can be downloaded. * @@ -238,7 +335,7 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - + if ($this->document->getIsCheckedOut()) { return new PEAR_Error(KTAPI_ERROR_DOCUMENT_CHECKED_OUT); @@ -254,7 +351,7 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::commit(); } - + /** * This deletes a document from the folder. * @@ -284,12 +381,12 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::commit(); } - + /** * This changes the owner of the file. * * @param string $ktapi_newuser - */ + */ function change_owner($newusername, $reason='Changing of owner.') { $user = $this->can_user_access_object_requiring_permission( $this->document, KTAPI_PERMISSION_CHANGE_OWNERSHIP); @@ -297,46 +394,46 @@ class KTAPI_Document extends KTAPI_FolderItem if (PEAR::isError($user)) { return $user; - } - + } + DBUtil::startTransaction(); - + $user = &User::getByUserName($newusername); if (is_null($user) || PEAR::isError($user)) { return new KTAPI_Error('User could not be found',$user); } - + $newuserid = $user->getId(); - + $this->document->setOwnerID($newuserid); - + $res = $this->document->update(); - - if (PEAR::isError($res)) + + if (PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR ,$res ); } - + $res = KTPermissionUtil::updatePermissionLookup($this->document); - if (PEAR::isError($res)) + if (PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); } - + $oDocumentTransaction = & new DocumentTransaction($this->document, $reason, 'ktcore.transactions.permissions_change'); - + $res = $oDocumentTransaction->create(); if (($res === false) || PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); } - + DBUtil::commit(); - } - + } + /** * This copies the document to another folder. * @@ -349,7 +446,7 @@ class KTAPI_Document extends KTAPI_FolderItem { assert(!is_null($ktapi_target_folder)); assert(is_a($ktapi_target_folder,'KTAPI_Folder')); - + if (empty($newname)) { $newname=null; @@ -358,7 +455,7 @@ class KTAPI_Document extends KTAPI_FolderItem { $newfilename=null; } - + $user = $this->ktapi->get_user(); if ($this->document->getIsCheckedOut()) @@ -367,7 +464,7 @@ class KTAPI_Document extends KTAPI_FolderItem } $target_folder = &$ktapi_target_folder->get_folder(); - + $result = $this->can_user_access_object_requiring_permission( $target_folder, KTAPI_PERMISSION_WRITE); if (PEAR::isError($result)) @@ -377,51 +474,51 @@ class KTAPI_Document extends KTAPI_FolderItem $name = $this->document->getName(); $clash = KTDocumentUtil::nameExists($target_folder, $name); - if ($clash && !is_null($newname)) - { + if ($clash && !is_null($newname)) + { $name = $newname; $clash = KTDocumentUtil::nameExists($target_folder, $name); } - if ($clash) + if ($clash) { 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.'); } - + $filename=$this->document->getFilename(); $clash = KTDocumentUtil::fileExists($target_folder, $filename); - if ($clash && !is_null($newname)) + if ($clash && !is_null($newname)) { $filename = $newfilename; $clash = KTDocumentUtil::fileExists($target_folder, $filename); } - if ($clash) + if ($clash) { 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.'); } - + DBUtil::startTransaction(); - + $new_document = KTDocumentUtil::copy($this->document, $target_folder, $reason); - if (PEAR::isError($new_document)) + if (PEAR::isError($new_document)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$new_document ); } - + $new_document->setName($name); $new_document->setFilename($filename); - + $res = $new_document->update(); - - if (PEAR::isError($res)) + + if (PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); } DBUtil::commit(); - + // FIXME do we need to refactor all trigger usage into the util function? $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); $aTriggers = $oKTTriggerRegistry->getTriggers('copyDocument', 'postValidate'); @@ -437,7 +534,7 @@ class KTAPI_Document extends KTAPI_FolderItem $ret = $oTrigger->postValidate(); } } - + /** * This moves the document to another folder. * @@ -450,7 +547,7 @@ class KTAPI_Document extends KTAPI_FolderItem { assert(!is_null($ktapi_target_folder)); assert(is_a($ktapi_target_folder,'KTAPI_Folder')); - + if (empty($newname)) { $newname=null; @@ -458,8 +555,8 @@ class KTAPI_Document extends KTAPI_FolderItem if (empty($newfilename)) { $newfilename=null; - } - + } + $user = $this->can_user_access_object_requiring_permission( $this->document, KTAPI_PERMISSION_DOCUMENT_MOVE); if (PEAR::isError($user)) @@ -473,14 +570,14 @@ class KTAPI_Document extends KTAPI_FolderItem } $target_folder = $ktapi_target_folder->get_folder(); - + $result= $this->can_user_access_object_requiring_permission( $target_folder, KTAPI_PERMISSION_WRITE); if (PEAR::isError($result)) { return $result; } - + if (!KTDocumentUtil::canBeMoved($this->document)) { return new PEAR_Error('Document cannot be moved.'); @@ -488,52 +585,52 @@ class KTAPI_Document extends KTAPI_FolderItem $name = $this->document->getName(); $clash = KTDocumentUtil::nameExists($target_folder, $name); - if ($clash && !is_null($newname)) - { + if ($clash && !is_null($newname)) + { $name = $newname; $clash = KTDocumentUtil::nameExists($target_folder, $name); } - if ($clash) + if ($clash) { 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.'); } - + $filename=$this->document->getFilename(); $clash = KTDocumentUtil::fileExists($target_folder, $filename); - if ($clash && !is_null($newname)) + if ($clash && !is_null($newname)) { $filename = $newfilename; $clash = KTDocumentUtil::fileExists($target_folder, $filename); } - if ($clash) + if ($clash) { 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.'); } - + DBUtil::startTransaction(); - + $res = KTDocumentUtil::move($this->document, $target_folder, $user, $reason); - if (PEAR::isError($res)) + if (PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $res ); } - + $this->document->setName($name); $this->document->setFilename($filename); - + $res = $this->document->update(); - - if (PEAR::isError($res)) + + if (PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); } DBUtil::commit(); - } - + } + /** * This changes the filename of the document. * @@ -547,17 +644,17 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - + DBUtil::startTransaction(); $res = KTDocumentUtil::rename($this->document, $newname, $user); - if (PEAR::isError($res)) + if (PEAR::isError($res)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR,$res ); } DBUtil::commit(); } - + /** * This changes the document type of the document. * @@ -571,9 +668,9 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - - $doctypeid = KTAPI::get_documenttypeid($documenttype); - + + $doctypeid = KTAPI::get_documenttypeid($documenttype); + if ($this->document->getDocumentTypeId() != $doctypeid) { DBUtil::startTransaction(); @@ -587,8 +684,8 @@ class KTAPI_Document extends KTAPI_FolderItem } DBUtil::commit(); } - } - + } + /** * This changes the title of the document. * @@ -602,7 +699,7 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - + if ($this->document->getName() != $newname) { @@ -618,7 +715,7 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::commit(); } } - + /** * This flags the document as 'archived'. * @@ -633,8 +730,8 @@ class KTAPI_Document extends KTAPI_FolderItem return $user; } - list($permission, $user) = $perm_and_user; - + list($permission, $user) = $perm_and_user; + DBUtil::startTransaction(); $this->document->setStatusID(ARCHIVED); $res = $this->document->update(); @@ -642,15 +739,15 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $res); } - + $oDocumentTransaction = & new DocumentTransaction($this->document, sprintf(_kt('Document archived: %s'), $reason), 'ktcore.transactions.update'); $oDocumentTransaction->create(); - + DBUtil::commit(); $oKTTriggerRegistry = KTTriggerRegistry::getSingleton(); $aTriggers = $oKTTriggerRegistry->getTriggers('archive', 'postValidate'); - foreach ($aTriggers as $aTrigger) + foreach ($aTriggers as $aTrigger) { $sTrigger = $aTrigger[0]; $oTrigger = new $sTrigger; @@ -659,9 +756,9 @@ class KTAPI_Document extends KTAPI_FolderItem ); $oTrigger->setInfo($aInfo); $ret = $oTrigger->postValidate(); - } - } - + } + } + /** * This starts a workflow on a document. * @@ -675,20 +772,20 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - + $workflowid = $this->document->getWorkflowId(); - + if (!empty($workflowid)) { return new PEAR_Error('A workflow is already defined.'); } - + $workflow = KTWorkflow::getByName($workflow); if (is_null($workflow) || PEAR::isError($workflow)) { return new KTAPI_Error(KTAPI_ERROR_WORKFLOW_INVALID, $workflow); } - + DBUtil::startTransaction(); $result = KTWorkflowUtil::startWorkflowOnDocument($workflow, $this->document); if (is_null($result) || PEAR::isError($result)) @@ -698,7 +795,7 @@ class KTAPI_Document extends KTAPI_FolderItem } DBUtil::commit(); } - + /** * This deletes the workflow on the document. * @@ -711,13 +808,13 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - + $workflowid=$this->document->getWorkflowId(); if (!empty($workflowid)) { return new PEAR_Error(KTAPI_ERROR_WORKFLOW_NOT_IN_PROGRESS); } - + DBUtil::startTransaction(); $result = KTWorkflowUtil::startWorkflowOnDocument(null, $this->document); if (is_null($result) || PEAR::isError($result)) @@ -727,7 +824,7 @@ class KTAPI_Document extends KTAPI_FolderItem } DBUtil::commit(); } - + /** * This performs a transition on the workflow * @@ -742,19 +839,19 @@ class KTAPI_Document extends KTAPI_FolderItem { return $user; } - + $workflowid=$this->document->getWorkflowId(); if (empty($workflowid)) { return new PEAR_Error(KTAPI_ERROR_WORKFLOW_NOT_IN_PROGRESS); - } - + } + $transition = &KTWorkflowTransition::getByName($transition); if (is_null($transition) || PEAR::isError($transition)) { return new KTAPI_Error(KTAPI_ERROR_WORKFLOW_INVALID, $transition); } - + DBUtil::startTransaction(); $result = KTWorkflowUtil::performTransitionOnDocument($transition, $this->document, $user, $reason); if (is_null($result) || PEAR::isError($result)) @@ -762,11 +859,11 @@ class KTAPI_Document extends KTAPI_FolderItem DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_WORKFLOW_INVALID, $transition); } - DBUtil::commit(); - } - - - + DBUtil::commit(); + } + + + /** * This returns all metadata for the document. * @@ -776,31 +873,31 @@ class KTAPI_Document extends KTAPI_FolderItem { $doctypeid = $this->document->getDocumentTypeID(); $fieldsets = (array) KTMetadataUtil::fieldsetsForDocument($this->document, $doctypeid); - + $results = array(); - - foreach ($fieldsets as $fieldset) + + foreach ($fieldsets as $fieldset) { if ($fieldset->getIsConditional()) { /* this is not implemented...*/ continue; } - + $fields = $fieldset->getFields(); $result = array('fieldset' => $fieldset->getName(), 'description' => $fieldset->getDescription()); - + $fieldsresult = array(); - - foreach ($fields as $field) - { + + foreach ($fields as $field) + { $value = 'n/a'; - + $fieldvalue = DocumentFieldLink::getByDocumentAndField($this->document, $field); - if (!is_null($fieldvalue) && (!PEAR::isError($fieldvalue))) + if (!is_null($fieldvalue) && (!PEAR::isError($fieldvalue))) { $value = $fieldvalue->getValue(); } - + $controltype = 'string'; - if ($field->getHasLookup()) + if ($field->getHasLookup()) { $controltype = 'lookup'; if ($field->getHasLookupTree()) @@ -808,11 +905,11 @@ class KTAPI_Document extends KTAPI_FolderItem $controltype = 'tree'; } } - + switch ($controltype) { case 'lookup': - $selection = KTAPI::get_metadata_lookup($field->getId()); + $selection = KTAPI::get_metadata_lookup($field->getId()); break; case 'tree': $selection = KTAPI::get_metadata_tree($field->getId()); @@ -821,7 +918,7 @@ class KTAPI_Document extends KTAPI_FolderItem $selection= array(); } - + $fieldsresult[] = array( 'name' => $field->getName(), 'required' => $field->getIsMandatory(), @@ -829,27 +926,27 @@ class KTAPI_Document extends KTAPI_FolderItem 'description' => $field->getDescription(), 'control_type' => $controltype, 'selection' => $selection - + ); - + } $result['fields'] = $fieldsresult; - $results [] = $result; - } - + $results [] = $result; + } + return $results; } - + /** * This updates the metadata on the file. This includes the 'title'. * * @param array This is an array containing the metadata to be associated with the file. */ function update_metadata($metadata) - { + { global $default; $packed = array(); - + foreach($metadata as $fieldset_metadata) { if (is_array($fieldset_metadata)) @@ -875,7 +972,7 @@ class KTAPI_Document extends KTAPI_FolderItem // exit graciously continue; } - + foreach($fields as $fieldinfo) { if (is_array($fieldinfo)) @@ -901,27 +998,27 @@ class KTAPI_Document extends KTAPI_FolderItem // exit graciously continue; } - + $packed[] = array($field, $value); - } + } } - + DBUtil::startTransaction(); $result = KTDocumentUtil::saveMetadata($this->document, $packed); - + if (is_null($result)) { DBUtil::rollback(); return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR); } - if (PEAR::isError($result)) + if (PEAR::isError($result)) { DBUtil::rollback(); - return new KTAPI_Error(sprintf(_kt("Unexpected validation failure: %s."), $result->getMessage())); + return new KTAPI_Error(sprintf(_kt("Unexpected validation failure: %s."), $result->getMessage())); } DBUtil::commit(); } - + /** * This returns a workflow transition @@ -941,10 +1038,10 @@ class KTAPI_Document extends KTAPI_FolderItem if (empty($workflowid)) { return new PEAR_Error(KTAPI_ERROR_WORKFLOW_NOT_IN_PROGRESS); - } - + } + $result = array(); - + $transitions = KTWorkflowUtil::getTransitionsForDocumentUser($this->document, $user); if (is_null($transitions) || PEAR::isError($transitions)) { @@ -954,10 +1051,10 @@ class KTAPI_Document extends KTAPI_FolderItem { $result[] = $transition->getName(); } - - return $result; + + return $result; } - + /** * This returns the current workflow state * @@ -976,27 +1073,27 @@ class KTAPI_Document extends KTAPI_FolderItem if (empty($workflowid)) { return new PEAR_Error(KTAPI_ERROR_WORKFLOW_NOT_IN_PROGRESS); - } - + } + $result = array(); - + $state = KTWorkflowUtil::getWorkflowStateForDocument($this->document); if (is_null($state) || PEAR::isError($state)) { return new PEAR_Error(KTAPI_ERROR_WORKFLOW_INVALID); } - + $statename = $state->getName(); - - return $statename; - + + return $statename; + } - + /** * This returns detailed information on the document. * * @return array - */ + */ function get_detail() { $detail = array(); @@ -1011,12 +1108,12 @@ class KTAPI_Document extends KTAPI_FolderItem $documenttype=$documenttype->getName(); } - else + else { $documenttype = '* unknown *'; } $detail['document_type'] = $documenttype; - + $detail['version'] = $document->getVersion(); $detail['filename'] = $document->getFilename(); @@ -1028,7 +1125,7 @@ class KTAPI_Document extends KTAPI_FolderItem $user = User::get($userid); $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); } - else + else { $username='n/a'; } @@ -1039,9 +1136,9 @@ class KTAPI_Document extends KTAPI_FolderItem if (is_numeric($userid)) { $user = User::get($userid); - $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); + $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); } - else + else { $username='n/a'; } @@ -1055,7 +1152,7 @@ class KTAPI_Document extends KTAPI_FolderItem $workflow = KTWorkflow::get($workflowid); $workflowname=(is_null($workflow) || PEAR::isError($workflow))?'* unknown *':$workflow->getName(); } - else + else { $workflowname='n/a'; } @@ -1067,57 +1164,57 @@ class KTAPI_Document extends KTAPI_FolderItem $state = KTWorkflowState::get($stateid); $workflowstate=(is_null($state) || PEAR::isError($state))?'* unknown *':$state->getName(); } - else + else { $workflowstate = 'n/a'; } $detail['workflow_state']=$workflowstate; $userid = $document->getCheckedOutUserID(); - + if (is_numeric($userid)) { $user = User::get($userid); $username=(is_null($user) || PEAR::isError($user))?'* unknown *':$user->getName(); } - else + else { $username = 'n/a'; } $detail['checkout_by'] = $username; - + $detail['full_path'] = $this->ktapi_folder->get_full_path() . '/' . $this->get_title(); - + return $detail; } - + function get_title() { return $this->document->getDescription(); } - + /** * This does a download of a version of the document. * * @param string $version */ function download($version=null) - { + { $storage =& KTStorageManagerUtil::getSingleton(); $options = array(); - - + + $oDocumentTransaction = & new DocumentTransaction($this->document, 'Document downloaded', 'ktcore.transactions.download', $aOptions); $oDocumentTransaction->create(); } - + /** * This returns the transaction history for the document. * * @return array */ function get_transaction_history() - { + { $sQuery = 'SELECT DTT.name AS transaction_name, U.name AS username, DT.version AS version, DT.comment AS comment, DT.datetime AS datetime ' . 'FROM ' . KTUtil::getTableName('document_transactions') . ' AS DT INNER JOIN ' . KTUtil::getTableName('users') . ' AS U ON DT.user_id = U.id ' . 'INNER JOIN ' . KTUtil::getTableName('transaction_types') . ' AS DTT ON DTT.namespace = DT.transaction_namespace ' . @@ -1125,14 +1222,14 @@ class KTAPI_Document extends KTAPI_FolderItem $aParams = array($this->documentid); $transactions = DBUtil::getResultArray(array($sQuery, $aParams)); - if (is_null($transactions) || PEAR::isError($transactions)) + if (is_null($transactions) || PEAR::isError($transactions)) { return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $transactions ); } return $transactions; } - + /** * This returns the version history on the document. * @@ -1141,21 +1238,21 @@ class KTAPI_Document extends KTAPI_FolderItem function get_version_history() { $metadata_versions = KTDocumentMetadataVersion::getByDocument($this->document); - + $versions = array(); - foreach ($metadata_versions as $version) + foreach ($metadata_versions as $version) { $document = &Document::get($this->documentid, $version->getId()); - + $version = array(); - - $userid = $document->getModifiedUserId(); - $user = User::get($userid); - + + $userid = $document->getModifiedUserId(); + $user = User::get($userid); + $version['user'] = $user->getName(); $version['metadata_version'] = $document->getMetadataVersion(); $version['content_version'] = $document->getVersion(); - + $versions[] = $version; } return $versions; @@ -1173,22 +1270,22 @@ class KTAPI_Document extends KTAPI_FolderItem return new PEAR_Error('You should not purge this'); } DBUtil::startTransaction(); - + $transaction = & new DocumentTransaction($this->document, "Document expunged", 'ktcore.transactions.expunge'); - + $transaction->create(); - + $this->document->delete(); - - $this->document->cleanupDocumentData($this->documentid); - + + $this->document->cleanupDocumentData($this->documentid); + $storage =& KTStorageManagerUtil::getSingleton(); - + $result= $storage->expunge($this->document); DBUtil::commit(); } - + /** * This expunges a document from the system. * @@ -1197,28 +1294,28 @@ class KTAPI_Document extends KTAPI_FolderItem function restore() { DBUtil::startTransaction(); - + $storage =& KTStorageManagerUtil::getSingleton(); - + $folder = Folder::get($this->document->getRestoreFolderId()); - if (PEAR::isError($folder)) + if (PEAR::isError($folder)) { $this->document->setFolderId(1); $folder = Folder::get(1); } - else + else { $this->document->setFolderId($this->document->getRestoreFolderId()); } $storage->restore($this->document); - + $this->document->setStatusId(LIVE); $this->document->setPermissionObjectId($folder->getPermissionObjectId()); $res = $this->document->update(); $res = KTPermissionUtil::updatePermissionLookup($this->document); - + $user = $this->ktapi->get_user(); $oTransaction = new DocumentTransaction($this->document, 'Restored from deleted state by ' . $user->getName(), 'ktcore.transactions.update'); diff --git a/ktapi/KTAPIFolder.inc.php b/ktapi/KTAPIFolder.inc.php index 37dd00e..4a669b9 100644 --- a/ktapi/KTAPIFolder.inc.php +++ b/ktapi/KTAPIFolder.inc.php @@ -6,7 +6,7 @@ * License Version 1.1.2 ("License"); You may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.knowledgetree.com/KPL - * + * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. * See the License for the specific language governing rights and @@ -17,9 +17,9 @@ * (ii) the KnowledgeTree copyright notice * in the same form as they appear in the distribution. See the License for * requirements. - * + * * The Original Code is: KnowledgeTree Open Source - * + * * The Initial Developer of the Original Code is The Jam Warehouse Software * (Pty) Ltd, trading as KnowledgeTree. * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright @@ -30,7 +30,7 @@ */ class KTAPI_Folder extends KTAPI_FolderItem -{ +{ /** * This is a reference to a base Folder object. * @@ -38,7 +38,7 @@ class KTAPI_Folder extends KTAPI_FolderItem * @var Folder */ var $folder; - + /** * This is the id of the folder on the database. * @@ -60,25 +60,25 @@ class KTAPI_Folder extends KTAPI_FolderItem assert(!is_null($ktapi)); assert(is_a($ktapi, 'KTAPI')); assert(is_numeric($folderid)); - + $folderid += 0; - + $folder = &Folder::get($folderid); if (is_null($folder) || PEAR::isError($folder)) { return new KTAPI_Error(KTAPI_ERROR_FOLDER_INVALID,$folder); } - + $user = $ktapi->can_user_access_object_requiring_permission($folder, KTAPI_PERMISSION_READ); - + if (is_null($user) || PEAR::isError($user)) { return $user; } - return new KTAPI_Folder($ktapi, $folder); - } - + return new KTAPI_Folder($ktapi, $folder); + } + /** * This is the constructor for the KTAPI_Folder. * @@ -90,27 +90,27 @@ class KTAPI_Folder extends KTAPI_FolderItem function KTAPI_Folder(&$ktapi, &$folder) { $this->ktapi = &$ktapi; - $this->folder = &$folder; + $this->folder = &$folder; $this->folderid = $folder->getId(); } - + /** * This returns a reference to the internal folder object. * * @access protected * @return Folder - */ + */ function &get_folder() { return $this->folder; } - - + + /** * This returns detailed information on the document. * * @return array - */ + */ function get_detail() { $detail = array( @@ -119,21 +119,21 @@ class KTAPI_Folder extends KTAPI_FolderItem 'parent_id'=>(int) $this->get_parent_folder_id(), 'full_path'=>$this->get_full_path(), ); - + return $detail; } - + function get_parent_folder_id() { return (int) $this->folder->getParentID(); } - + function get_folder_name() { return $this->folder->getFolderName($this->folderid); } - - + + /** * This returns the folderid. * @@ -143,14 +143,14 @@ class KTAPI_Folder extends KTAPI_FolderItem { return (int) $this->folderid; } - + /** * This can resolve a folder relative to the current directy by name * * @access public * @param string $foldername * @return KTAPI_Folder - */ + */ function &get_folder_by_name($foldername) { $foldername=trim($foldername); @@ -158,9 +158,9 @@ class KTAPI_Folder extends KTAPI_FolderItem { return new PEAR_Error('A valid folder name must be specified.'); } - + $split = explode('/', $foldername); - + $folderid=$this->folderid; foreach($split as $foldername) { @@ -174,19 +174,19 @@ class KTAPI_Folder extends KTAPI_FolderItem { return new KTAPI_Error(KTAPI_ERROR_FOLDER_INVALID,$row); } - $folderid = $row['id']; + $folderid = $row['id']; } - - return KTAPI_Folder::get($this->ktapi, $folderid); + + return KTAPI_Folder::get($this->ktapi, $folderid); } - + function get_full_path() { $path = $this->folder->getFullPath() . '/' . $this->folder->getName(); - + return $path; } - + /** * This gets a document by filename or name. * @@ -194,7 +194,7 @@ class KTAPI_Folder extends KTAPI_FolderItem * @param string $documentname * @param string $function * @return KTAPI_Document - */ + */ function &_get_document_by_name($documentname, $function='getByNameAndFolder') { $documentname=trim($documentname); @@ -202,68 +202,68 @@ class KTAPI_Folder extends KTAPI_FolderItem { return new PEAR_Error('A valid document name must be specified.'); } - + $foldername = dirname($documentname); $documentname = basename($documentname); - + $ktapi_folder = $this; - + if (!empty($foldername) && ($foldername != '.')) { $ktapi_folder = $this->get_folder_by_name($foldername); } - + if (is_null($ktapi_folder) || PEAR::isError($ktapi_folder)) { return new KTAPI_Error(KTAPI_ERROR_FOLDER_INVALID, $ktapi_folder); } - + //$folder = $ktapi_folder->get_folder(); $folderid = $ktapi_folder->folderid; - - $document = Document::$function($documentname, $folderid); + + $document = Document::$function($documentname, $folderid); if (is_null($document) || PEAR::isError($document)) { return new KTAPI_Error(KTAPI_ERROR_DOCUMENT_INVALID, $document); } - - $user = $this->can_user_access_object_requiring_permission($document, KTAPI_PERMISSION_READ); + + $user = $this->can_user_access_object_requiring_permission($document, KTAPI_PERMISSION_READ); if (PEAR::isError($user)) { return $user; } - + return new KTAPI_Document($this->ktapi, $ktapi_folder, $document); } - + /** * This can resolve a document relative to the current directy by name. * * @access public * @param string $documentname * @return KTAPI_Document - */ + */ function &get_document_by_name($documentname) { return $this->_get_document_by_name($documentname,'getByNameAndFolder'); } - + /** * This can resolve a document relative to the current directy by filename . * * @access public * @param string $documentname * @return KTAPI_Document - */ + */ function &get_document_by_filename($documentname) { return $this->_get_document_by_name($documentname,'getByFilenameAndFolder'); - } - + } + function _resolve_user($userid) { $user=null; - + if (!is_null($userid)) { $user=User::get($userid); @@ -274,24 +274,24 @@ class KTAPI_Folder extends KTAPI_FolderItem } return $user; } - - + + function get_listing($depth=1, $what='DF') - { - if ($depth < 1) + { + if ($depth < 1) { return array(); } - + $what = strtoupper($what); - $read_permission = &KTPermission::getByName(KTAPI_PERMISSION_READ); + $read_permission = &KTPermission::getByName(KTAPI_PERMISSION_READ); $folder_permission = &KTPermission::getByName(KTAPI_PERMISSION_VIEW_FOLDER); - - + + $user = $this->ktapi->get_user(); $contents = array(); - + if (strpos($what,'F') !== false) { $folder_children = Folder::getList(array('parent_id = ?', $this->folderid)); @@ -369,7 +369,7 @@ class KTAPI_Folder extends KTAPI_FolderItem $mimeinfo=$mime_cache[$mimetypeid]; $workflow = KTWorkflowUtil::getWorkflowForDocument($document); - + if (!is_null($workflow) && !PEAR::isError($workflow)) { $workflow=$workflow->getHumanName(); @@ -384,13 +384,13 @@ class KTAPI_Folder extends KTAPI_FolderItem $state='n/a'; } } - else + else { $workflow='n/a'; $state='n/a'; } - - + + $contents[] = array( 'id' => (int) $document->getId(), 'item_type'=>'D', @@ -414,10 +414,10 @@ class KTAPI_Folder extends KTAPI_FolderItem } } - - return $contents; + + return $contents; } - + /** * This adds a document to the current folder. * @@ -427,20 +427,20 @@ class KTAPI_Folder extends KTAPI_FolderItem * @param string $documenttype This is the name or id of the document type. It first looks by name, then by id. * @param string $tempfilename This is a reference to the file that is accessible locally on the file system. * @return KTAPI_Document - */ + */ function &add_document($title, $filename, $documenttype, $tempfilename) { if (!is_file($tempfilename)) { return new PEAR_Error('File does not exist.'); } - - $user = $this->can_user_access_object_requiring_permission($this->folder, KTAPI_PERMISSION_WRITE); + + $user = $this->can_user_access_object_requiring_permission($this->folder, KTAPI_PERMISSION_WRITE); if (PEAR::isError($user)) { return $user; } - + $filename = basename($filename); $documenttypeid = KTAPI::get_documenttypeid($documenttype); @@ -449,7 +449,7 @@ class KTAPI_Folder extends KTAPI_FolderItem 'novalidate' => true, 'documenttype' => DocumentType::get($documenttypeid), 'description' => $title, - 'metadata'=>array(), + 'metadata'=>array(), 'cleanup_initial_file' => true ); @@ -462,10 +462,10 @@ class KTAPI_Folder extends KTAPI_FolderItem return new PEAR_Error(KTAPI_ERROR_INTERNAL_ERROR . ' : ' . $document->getMessage()); } DBUtil::commit(); - + $tempfilename=addslashes($tempfilename); $sql = "DELETE FROM uploaded_files WHERE tempfilename='$tempfilename'"; - $result = DBUtil::runQuery($sql); + $result = DBUtil::runQuery($sql); if (PEAR::isError($result)) { return $result; @@ -473,26 +473,26 @@ class KTAPI_Folder extends KTAPI_FolderItem return new KTAPI_Document($this->ktapi, $this, $document); } - + /** * This adds a subfolder folder to the current folder. * * @access public * @param string $foldername * @return KTAPI_Folder - */ + */ function &add_folder($foldername) { $user = $this->can_user_access_object_requiring_permission($this->folder, KTAPI_PERMISSION_ADD_FOLDER); - + if (PEAR::isError($user)) { return $user; - } - + } + DBUtil::startTransaction(); $result = KTFolderUtil::add($this->folder, $foldername, $user); - + if (PEAR::isError($result)) { DBUtil::rollback(); @@ -500,10 +500,10 @@ class KTAPI_Folder extends KTAPI_FolderItem } DBUtil::commit(); $folderid = $result->getId(); - + return $this->ktapi->get_folder_by_id($folderid); } - + /** * This deletes the current folder. * @@ -515,13 +515,13 @@ class KTAPI_Folder extends KTAPI_FolderItem if (PEAR::isError($user)) { return $user; - } - + } + if ($this->folderid == 1) { return new PEAR_Error('Cannot delete root folder!'); - } - + } + DBUtil::startTransaction(); $result = KTFolderUtil::delete($this->folder, $user, $reason); @@ -539,13 +539,13 @@ class KTAPI_Folder extends KTAPI_FolderItem * @param string $newname */ function rename($newname) - { + { $user = $this->can_user_access_object_requiring_permission($this->folder, KTAPI_PERMISSION_RENAME_FOLDER); if (PEAR::isError($user)) { return $user; - } - + } + DBUtil::startTransaction(); $result = KTFolderUtil::rename($this->folder, $newname, $user); @@ -556,7 +556,7 @@ class KTAPI_Folder extends KTAPI_FolderItem } DBUtil::commit(); } - + /** * This moves the folder to another location. * @@ -567,12 +567,12 @@ class KTAPI_Folder extends KTAPI_FolderItem { assert(!is_null($ktapi_target_folder)); assert(is_a($ktapi_target_folder,'KTAPI_Folder')); - + $user = $this->ktapi->get_user(); - + $target_folder = $ktapi_target_folder->get_folder(); - $result = $this->can_user_access_object_requiring_permission($target_folder, KTAPI_PERMISSION_WRITE); + $result = $this->can_user_access_object_requiring_permission($target_folder, KTAPI_PERMISSION_WRITE); if (PEAR::isError($result)) { return $result; @@ -588,7 +588,7 @@ class KTAPI_Folder extends KTAPI_FolderItem } DBUtil::commit(); } - + /** * This copies a folder to another location. * @@ -599,18 +599,18 @@ class KTAPI_Folder extends KTAPI_FolderItem { assert(!is_null($ktapi_target_folder)); assert(is_a($ktapi_target_folder,'KTAPI_Folder')); - + $user = $this->ktapi->get_user(); - + $target_folder = $ktapi_target_folder->get_folder(); $result =$this->can_user_access_object_requiring_permission($target_folder, KTAPI_PERMISSION_WRITE); - + if (PEAR::isError($result)) { return $result; - } - + } + DBUtil::startTransaction(); $result = KTFolderUtil::copy($this->folder, $target_folder, $user, $reason); @@ -621,7 +621,7 @@ class KTAPI_Folder extends KTAPI_FolderItem } DBUtil::commit(); } - + /** * This returns all permissions linked to the folder. * @@ -630,7 +630,7 @@ class KTAPI_Folder extends KTAPI_FolderItem */ function get_permissions() { - return new PEAR_Error('TODO'); + return new PEAR_Error('TODO'); } /** @@ -641,7 +641,7 @@ class KTAPI_Folder extends KTAPI_FolderItem */ function get_transaction_history() { - return new PEAR_Error('TODO'); + return new PEAR_Error('TODO'); } } diff --git a/ktapi/KTAPISession.inc.php b/ktapi/KTAPISession.inc.php index abf44e4..644c79e 100644 --- a/ktapi/KTAPISession.inc.php +++ b/ktapi/KTAPISession.inc.php @@ -1,12 +1,12 @@ ktapi=&$ktapi; $this->user=&$user; $this->active = false; } - + /** * return the session string * @@ -58,17 +58,17 @@ class KTAPI_Session { die('get_session() should be overloaded!'); } - + /** - * Return the session id - * + * Return the session id + * * @return int */ function get_sessionid() { die('get_sessionid() should be overloaded!'); } - + /** * Return the user * @@ -78,29 +78,28 @@ class KTAPI_Session { return $this->user; } - + function logout() { $this->active=false; // don't need to do anything really } - + function is_active() { return $this->active; } - -} +} -class KTAPI_UserSession extends KTAPI_Session +class KTAPI_UserSession extends KTAPI_Session { var $ip = null; - + function KTAPI_UserSession(&$ktapi, &$user, $session, $sessionid, $ip) { parent::KTAPI_Session($ktapi, $user); - + $this->ktapi = &$ktapi; $this->user = &$user; $this->session = $session; @@ -109,10 +108,10 @@ class KTAPI_UserSession extends KTAPI_Session // TODO: get documenttransaction to not look at the session variable! $_SESSION["userID"] = $user->getId(); - $_SESSION["sessionID"] = $this->sessionid; - $this->active = true; + $_SESSION["sessionID"] = $this->sessionid; + $this->active = true; } - + /** * This returns the session string * @@ -122,7 +121,7 @@ class KTAPI_UserSession extends KTAPI_Session { return $this->session; } - + /** * This returns the sessionid in the database. * @@ -132,7 +131,7 @@ class KTAPI_UserSession extends KTAPI_Session { return $this->sessionid; } - + /** * This resolves the user's ip * @@ -141,38 +140,38 @@ class KTAPI_UserSession extends KTAPI_Session */ function resolveIP() { - if (getenv("REMOTE_ADDR")) + if (getenv("REMOTE_ADDR")) { $ip = getenv("REMOTE_ADDR"); - } - elseif (getenv("HTTP_X_FORWARDED_FOR")) + } + elseif (getenv("HTTP_X_FORWARDED_FOR")) { $forwardedip = getenv("HTTP_X_FORWARDED_FOR"); list($ip,$ip2,$ip3,$ip4)= split (",", $forwardedip); - } - elseif (getenv("HTTP_CLIENT_IP")) + } + elseif (getenv("HTTP_CLIENT_IP")) { $ip = getenv("HTTP_CLIENT_IP"); } - + if ($ip == '') { $ip = '127.0.0.1'; } - + return $ip; } - + /** * * @access protected - * @static + * @static * @param User $user */ function _check_session(&$user) - { + { $user_id = $user->getId(); - + $sql = "SELECT count(*) >= u.max_sessions as over_limit FROM active_sessions ass INNER JOIN users u ON ass.user_id=u.id WHERE ass.user_id = $user_id"; $row = DBUtil::getOneResult($sql); if (PEAR::isError($row)) @@ -182,14 +181,14 @@ class KTAPI_UserSession extends KTAPI_Session if (is_null($row)) { return new PEAR_Error('No record found for user?'); - } + } if ($row['over_limit'] == 1) { return new PEAR_Error('Session limit exceeded. Logout of any active sessions.'); } - + $session = session_id(); - + $sessionid = DBUtil::autoInsert('active_sessions', array( 'user_id' => $user_id, @@ -201,32 +200,32 @@ class KTAPI_UserSession extends KTAPI_Session { return $sessionid; } - + return array($session,$sessionid); } - - + + /** * This returns a session object based on authentication credentials. * * @access public - * @static + * @static * @param string $username * @param string $password * @return KTAPI_Session */ function &start_session(&$ktapi, $username, $password, $ip=null) - { + { $this->active=false; - if ( empty($username) ) + if ( empty($username) ) { return new PEAR_Error(_kt('The username is empty.')); } $user =& User::getByUsername($username); - if (PEAR::isError($user) || ($user === false)) + if (PEAR::isError($user) || ($user === false)) { - return new KTAPI_Error(_kt("The user '$username' cound not be found."),$user); + return new KTAPI_Error(_kt("The user '$username' cound not be found."),$user); } if ( empty($password) ) @@ -240,24 +239,24 @@ class KTAPI_UserSession extends KTAPI_Session { return new KTAPI_Error(_kt("The password is invalid."),$authenticated); } - + if (is_null($ip)) { $ip = '127.0.0.1'; //$ip = KTAPI_Session::resolveIP(); } - + list($session,$sessionid) = KTAPI_UserSession::_check_session($user); if (PEAR::isError($sessionid)) { return $sessionid; } - - $session = &new KTAPI_UserSession($ktapi, $user, $session, $sessionid, $ip); - + + $session = &new KTAPI_UserSession($ktapi, $user, $session, $sessionid, $ip); + return $session; - } - + } + /** * This returns an active session. * @@ -267,42 +266,42 @@ class KTAPI_UserSession extends KTAPI_Session * @return KTAPI_Session */ function &get_active_session(&$ktapi, $session, $ip) - { + { $sql = "SELECT id, user_id FROM active_sessions WHERE session_id='$session'"; if (!empty($ip)) { $sql .= " AND ip='$ip'"; - } - + } + $row = DBUtil::getOneResult($sql); if (is_null($row) || PEAR::isError($row)) { return new KTAPI_Error(KTAPI_ERROR_SESSION_INVALID, $row); } - + $sessionid = $row['id']; $userid = $row['user_id']; - + $user = &User::get($userid); if (is_null($user) || PEAR::isError($user)) { return new KTAPI_Error(KTAPI_ERROR_USER_INVALID, $user); } - - + + $now=date('Y-m-d H:i:s'); $sql = "UPDATE active_sessions SET last_used='$now' WHERE id=$sessionid"; DBUtil::runQuery($sql); - - + + if ($user->isAnonymous()) - $session = &new KTAPI_AnonymousSession($ktapi, $user, $session, $sessionid, $ip); + $session = &new KTAPI_AnonymousSession($ktapi, $user, $session, $sessionid, $ip); else - $session = &new KTAPI_UserSession($ktapi, $user, $session, $sessionid, $ip); + $session = &new KTAPI_UserSession($ktapi, $user, $session, $sessionid, $ip); return $session; } - + /** * This closes the current session. * @@ -315,19 +314,19 @@ class KTAPI_UserSession extends KTAPI_Session { return $result; } - + $this->user = null; $this->session = ''; $this->sessionid = -1; $this->active=false; } - + } -class KTAPI_AnonymousSession extends KTAPI_UserSession +class KTAPI_AnonymousSession extends KTAPI_UserSession { function &start_session(&$ktapi, $ip=null) - { + { $user =& User::get(-2); if (is_null($user) || PEAR::isError($user) || ($user === false) || !$user->isAnonymous()) { @@ -355,16 +354,14 @@ class KTAPI_AnonymousSession extends KTAPI_UserSession { return $sessionid; } - - $session = &new KTAPI_AnonymousSession($ktapi, $user, $session, $sessionid, $ip); - + + $session = &new KTAPI_AnonymousSession($ktapi, $user, $session, $sessionid, $ip); + return $session; } } - - -class KTAPI_SystemSession extends KTAPI_Session +class KTAPI_SystemSession extends KTAPI_Session { function KTAPI_SystemSession(&$ktapi, &$user) { diff --git a/ktapi/ktapi.inc.php b/ktapi/ktapi.inc.php index 36a3b07..ca78c47 100644 --- a/ktapi/ktapi.inc.php +++ b/ktapi/ktapi.inc.php @@ -1,14 +1,14 @@ ktapi->can_user_access_object_requiring_permission($object, $permission); } } @@ -67,7 +67,7 @@ class KTAPI_Error extends PEAR_Error { parent::PEAR_Error($msg . ' - ' . $obj->getMessage()); } - else + else { parent::PEAR_Error($msg); } @@ -83,18 +83,18 @@ class KTAPI * @var KTAPI_Session */ var $session = null; - + /** * This returns the current session. * * @access public * @return KTAPI_Session - */ + */ function &get_session() { return $this->session; } - + /** * This returns the session user. * @@ -102,22 +102,22 @@ class KTAPI * @return User */ function & get_user() - { + { $ktapi_session = $this->get_session(); if (is_null($ktapi_session) || PEAR::isError($ktapi_session)) { return new PEAR_Error(KTAPI_ERROR_SESSION_INVALID); } - + $user = $ktapi_session->get_user(); if (is_null($user) || PEAR::isError($user)) { return new PEAR_Error(KTAPI_ERROR_USER_INVALID); - } - + } + return $user; } - + /** * This returns a permission. * @@ -127,16 +127,16 @@ class KTAPI * @return KTPermission */ function &get_permission($permission) - { + { $permission = & KTPermission::getByName($permission); if (is_null($permission) || PEAR::isError($permission)) { return new PEAR_Error(KTAPI_ERROR_PERMISSION_INVALID); } - - return $permission; + + return $permission; } - + /** * This checks if a user can access an object with a certain permission. * @@ -148,34 +148,34 @@ class KTAPI function can_user_access_object_requiring_permission(&$object, $permission) { assert(!is_null($object)); - assert(is_a($object,'DocumentProxy') || is_a($object,'FolderProxy') || is_a($object,'Document') || is_a($object,'Folder')); - + assert(is_a($object,'DocumentProxy') || is_a($object,'FolderProxy') || is_a($object,'Document') || is_a($object,'Folder')); + $permission = &KTAPI::get_permission($permission); if (is_null($permission) || PEAR::isError($permission)) { return $permission; } - + $user = &KTAPI::get_user(); if (is_null($user) || PEAR::isError($user)) { return $user; - } + } - if (!KTPermissionUtil::userHasPermissionOnItem($user, $permission, $object)) + if (!KTPermissionUtil::userHasPermissionOnItem($user, $permission, $object)) { return new PEAR_Error(KTAPI_ERROR_INSUFFICIENT_PERMISSIONS); } - - return $user; + + return $user; } - + /** * This returns a session object based on a session string. * * @access public * @param string $session - * @return KTAPI_Session + * @return KTAPI_Session */ function & get_active_session($session, $ip=null) { @@ -183,33 +183,33 @@ class KTAPI { return new PEAR_Error('A session is currently active.'); } - + $session = &KTAPI_UserSession::get_active_session($this, $session, $ip); - + if (is_null($session) || PEAR::isError($session)) { return new PEAR_Error('Session is invalid'); } - + $this->session = &$session; return $session; } - + /** * This returns a session object based on authentication credentials. * * @access public * @param string $username * @param string $password - * @return KTAPI_Session + * @return KTAPI_Session */ function & start_session($username, $password, $ip=null) - { + { if (!is_null($this->session)) { return new PEAR_Error('A session is currently active.'); } - + $session = &KTAPI_UserSession::start_session($this, $username, $password, $ip); if (is_null($session)) { @@ -220,23 +220,23 @@ class KTAPI return new PEAR_Error('Session is invalid. ' . $session->getMessage()); } $this->session = &$session; - + return $session; } - - + + function & start_system_session() { $user = User::get(1); - + $session = & new KTAPI_SystemSession($this, $user); $this->session = &$session; - + return $session; } - - - + + + /** * Starts an anonymous session. * @@ -249,7 +249,7 @@ class KTAPI { return new PEAR_Error('A session is currently active.'); } - + $session = &KTAPI_AnonymousSession::start_session($this, $ip); if (is_null($session)) { @@ -260,11 +260,11 @@ class KTAPI return new PEAR_Error('Session is invalid. ' . $session->getMessage()); } $this->session = &$session; - + return $session; } - - + + /** * Obtains the root folder. * @@ -275,7 +275,7 @@ class KTAPI { return $this->get_folder_by_id(1); } - + /** * Obtains the folder using a folder id. * @@ -287,12 +287,12 @@ class KTAPI { if (is_null($this->session)) { - return new PEAR_Error('A session is not active'); + return new PEAR_Error('A session is not active'); } - + return KTAPI_Folder::get($this, $folderid); } - + /** * This returns a refererence to a document based on document id. * @@ -301,10 +301,10 @@ class KTAPI * @return KTAPI_Document */ function &get_document_by_id($documentid) - { + { return KTAPI_Document::get($this, $documentid); } - + /** * This returns a document type id based on the name. * @@ -324,7 +324,19 @@ class KTAPI list($documenttypeid) = $row['id']; return $documenttypeid; } - + + function get_link_type_id($linktype) + { + $sql = "SELECT id FROM document_link_types WHERE name='$linktype'"; + $row = DBUtil::getOneResult($sql); + if (is_null($row) || PEAR::isError($row)) + { + return new PEAR_Error(KTAPI_ERROR_DOCUMENT_LINK_TYPE_INVALID); + } + list($typeid) = $row['id']; + return $typeid; + } + /** * Returns an array of document types. * @@ -340,16 +352,122 @@ class KTAPI { return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $rows); } - + $result = array(); foreach($rows as $row) { $result[] = $row['name']; } - return $result; + return $result; + } + + function get_document_link_types() + { + $sql = "SELECT name FROM document_link_types order by name"; + $rows = DBUtil::getResultArray($sql); + if (is_null($rows) || PEAR::isError($rows)) + { + return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $rows); + } + + $result = array(); + foreach($rows as $row) + { + $result[] = $row['name']; + } + + return $result; + } + + function get_document_type_metadata($document_type='Default') + { + // now get document type specifc ids + $typeid =$this->get_documenttypeid($document_type); + if (PEAR::isError($typeid)) + { + $response['message'] = $typeid->getMessage(); + return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $response); + } + + $doctype_ids = KTFieldset::getForDocumentType($typeid, array('ids' => false)); + if (PEAR::isError($doctype_ids)) + { + $response['message'] = $generic_ids->getMessage(); + return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $response); + } + + // first get generic ids + $generic_ids = KTFieldset::getGenericFieldsets(array('ids' => false)); + if (PEAR::isError($generic_ids)) + { + $response['message'] = $generic_ids->getMessage(); + return new SOAP_Value('return',"{urn:$this->namespace}kt_metadata_response", $response); + } + + // lets merge the results + $fieldsets = kt_array_merge($generic_ids, $doctype_ids); + + $results = array(); + + foreach ($fieldsets as $fieldset) + { + if ($fieldset->getIsConditional()) { /* this is not implemented...*/ continue; } + + $fields = $fieldset->getFields(); + $result = array( + 'fieldset' => $fieldset->getName(), + 'description' => $fieldset->getDescription() + ); + + $fieldsresult = array(); + + foreach ($fields as $field) + { + $value = 'n/a'; + + + $controltype = 'string'; + if ($field->getHasLookup()) + { + $controltype = 'lookup'; + if ($field->getHasLookupTree()) + { + $controltype = 'tree'; + } + } + + switch ($controltype) + { + case 'lookup': + $selection = KTAPI::get_metadata_lookup($field->getId()); + break; + case 'tree': + $selection = KTAPI::get_metadata_tree($field->getId()); + break; + default: + $selection= array(); + } + + + $fieldsresult[] = array( + 'name' => $field->getName(), + 'required' => $field->getIsMandatory(), + 'value' => $value, + 'description' => $field->getDescription(), + 'control_type' => $controltype, + 'selection' => $selection + ); + } + $result['fields'] = $fieldsresult; + $results [] = $result; + } + + return $results; } - + + + /** * Returns an array of username/name combinations. * @@ -366,8 +484,8 @@ class KTAPI return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $rows); } return $rows; - } - + } + /** * This returns an array for a lookup. * @@ -388,10 +506,10 @@ class KTAPI foreach($rows as $row) { $results[] = $row['name']; - } + } return $results; } - + /** * This returns a metadata tree. * @@ -421,7 +539,7 @@ class KTAPI } return $results;*/ } - + /** * This returns a metadata tree. * @@ -432,13 +550,13 @@ class KTAPI */ function get_metadata_tree($fieldid) { - return KTAPI::_load_metadata_tree($fieldid); - } - + return KTAPI::_load_metadata_tree($fieldid); + } + /** * Returns a list of workflows that are active. * - * @static + * @static * @access public * @return array */ @@ -457,7 +575,7 @@ class KTAPI } return $results; } - + } ?> \ No newline at end of file -- libgit2 0.21.4