. * * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, * California 94120-7775, or email info@knowledgetree.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * * @copyright 2008-2009, KnowledgeTree Inc. * @license GNU General Public License version 3 * @author KnowledgeTree Team * @package KTCMIS * @version Version 0.1 */ require_once(CMIS_DIR . '/classes/CMISBaseObject.inc.php'); require_once(CMIS_DIR . '/classes/CMISDocumentPropertyCollection.inc.php'); require_once(CMIS_DIR . '/util/CMISUtil.inc.php'); // TODO Property Type Definitions (only done Attributes up to now) class CMISDocumentObject extends CMISBaseObject { private $versionable; private $contentStreamAllowed; private $ktapi; private $uri; // TODO some of this should probably come from configuration files as it is repository specific function CMISDocumentObject(&$ktapi = null, $uri = null) { $this->ktapi = $ktapi; // uri to use for document links $this->uri = $uri; // attributes $this->typeId = 'Document'; // $this->queryName = 'Document'; $this->displayName = ''; // $this->baseType = 'document'; $this->baseTypeQueryName = 'Document'; $this->parentId = null; // MUST NOT be set $this->description = ''; // $this->creatable = ''; // /* * fileable SHOULD be set as follows: * If the repository does NOT support the “un-filing” capability: * TRUE * If the repository does support the “un-filing” capability: * , but SHOULD be TRUE */ $this->fileable = true; // TODO implement check for whether un-filing is supported $this->queryable = true; // SHOULD be true $this->includedInSupertypeQuery = true; // // TODO determine what these next 3 should be $this->controllable = false; // $this->versionable = false; // $this->contentStreamAllowed = false; // // properties $this->properties = new CMISDocumentPropertyCollection(); // set base object property definitions // parent::__construct(); // set document specific property definitions } function get($objectId) { $object = $this->ktapi->get_document_by_id($objectId); // error? if (PEAR::isError($object)) { // throw an exception? return $object; } $objectProperties = $object->get_detail(); $this->_setPropertyInternal('objectId', CMISUtil::encodeObjectId($this->typeId, $objectProperties['document_id'])); // prevent doubled '/' chars $uri = preg_replace_callback('/([^:]\/)\//', create_function('$matches', 'return $matches[1];'), $this->uri . 'action.php?kt_path_info=ktnetwork.inlineview.actions.view&fDocumentId=' . $objectProperties['document_id']); // NOTE what about instead creating a downloadable version with appropriate link? see ktapi::download_document // also ktapidocument::get_download_url $this->_setPropertyInternal('Uri', $uri); // TODO what is this? Assuming it is the object type id, and not OUR document type? $this->_setPropertyInternal('typeId', $this->getAttribute('typeId')); $this->_setPropertyInternal('createdBy', $objectProperties['created_by']); $this->_setPropertyInternal('creationDate', $objectProperties['created_date']); $this->_setPropertyInternal('lastModifiedBy', $objectProperties['modified_by']); $this->_setPropertyInternal('lastModificationDate', $objectProperties['modified_date']); $this->_setPropertyInternal('changeToken', null); $this->_setPropertyInternal('name', $objectProperties['title']); $this->_setPropertyInternal('isImmutable', $objectProperties['is_immutable']); // NOTE if access to older versions is allowed, this will need to be checked, else just set to yes // see ktapi::get_document_version_history // NOTE see ktapi::is_latest_version $this->_setPropertyInternal('isLatestVersion', true); $this->_setPropertyInternal('isMajorVersion', (strstr($objectProperties['version'], '.') ? false : true)); // NOTE if access to older versions is allowed, this will need to be checked, else just set to yes // see ktapi::get_document_version_history // NOTE see ktapi::is_latest_version $this->_setPropertyInternal('isLatestMajorVersion', true); $this->_setPropertyInternal('versionLabel', $objectProperties['version']); // TODO what determines this, do we have anything? $this->_setPropertyInternal('versionSeriesId', null); if ($objectProperties['checked_out_by'] != 'n/a') { $checkedOut = true; $checkedOutBy = $objectProperties['checked_out_by']; // TODO this is not what it will actually be, just a convenient placeholder $checkedOutId = $objectProperties['version']; } else { $checkedOut = false; $checkedOutBy = null; $checkedOutId = null; } $this->_setPropertyInternal('isVersionSeriesCheckedOut', $checkedOut); $this->_setPropertyInternal('versionSeriesCheckedOutBy', $checkedOutBy); // TODO presumably this is the ID of the Private Working Copy created on checkout? // will find out more when we do checkout/checkin $this->_setPropertyInternal('versionSeriesCheckedOutId', $checkedOutId); // TODO currently not returned by KnowledgeTree? $this->_setPropertyInternal('checkinComment', null); // TODO if we implement content streams $this->_setPropertyInternal('contentStreamLength', null); $this->_setPropertyInternal('contentStreamMimeType', null); $this->_setPropertyInternal('contentStreamFilename', null); $this->_setPropertyInternal('contentStreamUri', null); } } ?>