⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ktapidocument.inc.php.tmp

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 TMP
📖 第 1 页 / 共 4 页
字号:
		DBUtil::startTransaction();		$result = KTWorkflowUtil::performTransitionOnDocument($transition, $this->document, $user, $reason);		if (is_null($result) || PEAR::isError($result))		{			DBUtil::rollback();			return new KTAPI_Error(KTAPI_ERROR_WORKFLOW_INVALID, $transition);		}		DBUtil::commit();	}	/**	 * This returns all metadata for the document.	 *	 * @return array	 */	function get_metadata()	{		 $doctypeid = $this->document->getDocumentTypeID();		 $fieldsets = (array) KTMetadataUtil::fieldsetsForDocument($this->document, $doctypeid);		 if (is_null($fieldsets) || PEAR::isError($fieldsets))		 {		     return array();		 }		 $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';				$fieldvalue = DocumentFieldLink::getByDocumentAndField($this->document, $field);                if (!is_null($fieldvalue) && (!PEAR::isError($fieldvalue)))                {                	$value = $fieldvalue->getValue();                }                $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;	}	function get_packed_metadata($metadata=null)	{		global $default;		if (is_null($metadata))		{		    $metadata = $this->get_metadata();		}		 $packed = array();		 foreach($metadata as $fieldset_metadata)		 {		 	if (is_array($fieldset_metadata))		 	{		 		$fieldsetname=$fieldset_metadata['fieldset'];		 		$fields=$fieldset_metadata['fields'];		 	}		 	elseif (is_a($fieldset_metadata, 'stdClass'))		 	{		 		$fieldsetname=$fieldset_metadata->fieldset;		 		$fields=$fieldset_metadata->fields;		 	}		 	else		 	{		 		$default->log->debug("unexpected fieldset type");		 		continue;		 	}		 	$fieldset = KTFieldset::getByName($fieldsetname);		 	if (is_null($fieldset) || PEAR::isError($fieldset) || is_a($fieldset, 'KTEntityNoObjects'))		 	{		 		$default->log->debug("could not resolve fieldset: $fieldsetname for document id: $this->documentid");		 		// exit graciously		 		continue;		 	}		 	foreach($fields as $fieldinfo)		 	{		 		if (is_array($fieldinfo))		 		{		 			$fieldname = $fieldinfo['name'];		 			$value = $fieldinfo['value'];		 		}		 		elseif (is_a($fieldinfo, 'stdClass'))		 		{		 			$fieldname = $fieldinfo->name;		 			$value = $fieldinfo->value;		 		}		 		else		 		{		 			$default->log->debug("unexpected fieldinfo type");		 			continue;		 		}		 		$field = DocumentField::getByFieldsetAndName($fieldset, $fieldname);		 		if (is_null($field) || PEAR::isError($field) || is_a($field, 'KTEntityNoObjects'))		 		{		 			$default->log->debug("Could not resolve field: $fieldname on fieldset $fieldsetname for document id: $this->documentid");		 			// exit graciously		 			continue;		 		}		 		$packed[] = array($field, $value);		 	}		 }		 return $packed;	}	/**	 * 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;		if (empty($metadata))		{			return;		}		 $packed = $this->get_packed_metadata($metadata);		 DBUtil::startTransaction();		 $result = KTDocumentUtil::saveMetadata($this->document, $packed, array('novalidate'=>true));		 if (is_null($result))		 {		 	DBUtil::rollback();		 	return new PEAR_Error(KTAPI_ERROR_INTERNAL_ERROR . ': Null result returned but not expected.');		 }		 if (PEAR::isError($result))		 {		 	DBUtil::rollback();		 	return new KTAPI_Error('Unexpected validation failure', $result);		 }		 DBUtil::commit();        $oKTTriggerRegistry = KTTriggerRegistry::getSingleton();        $aTriggers = $oKTTriggerRegistry->getTriggers('edit', 'postValidate');        foreach ($aTriggers as $aTrigger) {            $sTrigger = $aTrigger[0];            $oTrigger = new $sTrigger;            $aInfo = array(                "document" => $this->document,                "aOptions" => $packed,            );            $oTrigger->setInfo($aInfo);            $ret = $oTrigger->postValidate();        }	}	/**	 * This updates the system metadata on the document.	 *	 * @param array $sysdata	 */	function update_sysdata($sysdata)	{		global $default;		if (empty($sysdata))		{			return;		}		$owner_mapping = array(						'created_by'=>'creator_id',						'modified_by'=>'modified_user_id',						'owner'=>'owner_id'						);		$documents = array();		$document_content = array();		$indexContent = null;		$uniqueOemNo = false;		foreach($sysdata as $rec)		{			if (is_object($rec))			{				$name = $rec->name;				$value = sanitizeForSQL($rec->value);			}			elseif(is_array($rec))			{				$name = $rec['name'];				$value = sanitizeForSQL($rec['value']);			}			else			{				// just ignore				continue;			}			switch(strtolower($name))			{				case 'unique_oem_document_no':					$documents['oem_no'] = $value;					$uniqueOemNo = true;					break;				case 'oem_document_no':					$documents['oem_no'] = $value;					break;				case 'index_content':					$indexContent = $value;					break;				case 'created_date':					if (!empty($value)) $documents['created'] = $value;					break;				case 'modified_date':					if (!empty($value)) $documents['modified'] = $value;					break;				case 'is_immutable':					$documents['immutable'] = in_array(strtolower($value), array('1','true','on','yes'))?'1':'0';					break;				case 'filename':					$value = KTUtil::replaceInvalidCharacters($value);					$document_content['filename'] = $value;					break;				case 'major_version':					$document_content['major_version'] = $value;					break;				case 'minor_version':					$document_content['minor_version'] = $value;					break;				case 'version':					$version = number_format($value + 0,5);					list($major_version, $minor_version) = explode('.', $version);					$document_content['major_version'] = $major_version;					$document_content['minor_version'] = $minor_version;					break;				case 'mime_type':					$sql = "select id from mime_types where mimetypes='$value'";					$value = DBUtil::getResultArray($sql);					if (PEAR::isError($value))					{						$default->log->error("Problem resolving mime type '$value' for document id $this->documentid. Reason: " . $value->getMessage());						return $value;					}					if (count($value) == 0)					{						$default->log->error("Problem resolving mime type '$value' for document id $this->documentid. None found.");						break;					}					$value = $value[0]['id'];					$document_content['mime_id'] = $value;					break;				case 'owner':				case 'created_by':				case 'modified_by':					$sql = "select id from users where name='$value'";					$userId = DBUtil::getResultArray($sql);					if (PEAR::isError($userId))					{						$default->log->error("Problem resolving user '$value' for document id $this->documentid. Reason: " . $userId->getMessage());						return $userId;					}					if (empty($userId))					{						$sql = "select id from users where username='$value'";						$userId = DBUtil::getResultArray($sql);						if (PEAR::isError($userId))						{							$default->log->error("Problem resolving username '$value' for document id $this->documentid. Reason: " . $userId->getMessage());							return $userId;						}					}					if (empty($userId))					{						$default->log->error("Problem resolving user based on '$value' for document id $this->documentid. No user found");						// if not found, not much we can do						break;					}					$userId=$userId[0];					$userId=$userId['id'];					$name = $owner_mapping[$name];					$documents[$name] = $userId;					break;				default:					$default->log->error("Problem updating field '$name' with value '$value' for document id $this->documentid. Field is unknown.");					// TODO: we should do some logging					//return new PEAR_Error('Unexpected field: ' . $name);			}		}		if (count($documents) > 0)		{			$sql = "UPDATE documents SET ";			$i=0;			foreach($documents as $name=>$value)			{				if ($i++ > 0) $sql .= ",";				$value = sanitizeForSQL($value);				$sql .= "$name='$value'";			}			$sql .= " WHERE id=$this->documentid";			$result = DBUtil::runQuery($sql);			if (PEAR::isError($result))			{				return $result;			}			if ($uniqueOemNo)			{				$oem_no = sanitizeForSQL($documents['oem_no']);				$sql = "UPDATE documents SET oem_no=null WHERE oem_no = '$oem_no' AND id != $this->documentid";				$result = DBUtil::runQuery($sql);			}		}		if (count($document_content) > 0)		{			$content_id = $this->document->getContentVersionId();			$sql = "UPDATE document_content_version SET ";			$i=0;			foreach($document_content as $name=>$value)			{				if ($i++ > 0) $sql .= ",";				$value = sanitizeForSQL($value);				$sql .= "$name='$value'";			}			$sql .= " WHERE id=$content_id";			$result = DBUtil::runQuery($sql);			if (PEAR::isError($result))			{				return $result;			}		}		if (!is_null($indexContent))		{			$indexer = Indexer::get();			$result = $indexer->diagnose();			if (empty($result))			{				$indexer->updateDocumentIndex($this->documentid, $indexContent);			}			else			{				$default->log->error("Problem updating index with value '$value' for document id $this->documentid. Problem with indexer.");			}		}	}	function clearCache()	{		// TODO: we should only clear the cache for the document we are working on		// this is a quick fix but not optimal!!		$metadataid = $this->document->getMetadataVersionId();		$contentid = $this->document->getContentVersionId();		$cache = KTCache::getSingleton();		$cache->remove('KTDocumentMetadataVersion/id', $metadataid);		$cache->remove('KTDocumentContentVersion/id', $contentid);		$cache->remove('KTDocumentCore/id', $this->documentid);		$cache->remove('Document/id', $this->documentid);		unset($GLOBALS['_OBJECTCACHE']['KTDocumentMetadataVersion'][$metadataid]);		unset($GLOBALS['_OBJECTCACHE']['KTDocumentContentVersion'][$contentid]);		unset($GLOBALS['_OBJECTCACHE']['KTDocumentCore'][$this->documentid]);		$this->document = &Document::get($this->documentid);	}	function mergeWithLastMetadataVersion()	{		// keep latest metadata version		$metadata_version = $this->document->getMetadataVersion();		if ($metadata_version == 0)		{			// this could theoretically happen in the case we are updating metadata and sysdata, but no metadata fields are specified.			return;		}		$metadata_id = $this->document->getMetadataVersionId();		// get previous version		$sql = "SELECT id, metadata_version FROM document_metadata_version WHERE id<$metadata_id AND document_id=$this->documentid order by id desc";		$old = DBUtil::getResultArray($sql);		if (is_null($old) || PEAR::isError($old))		{			return new PEAR_Error('Previous version could not be resolved');		}		// only interested in the first one		$old=$old[0];		$old_metadata_id = $old['id'];		$old_metadata_version = $old['metadata_version'];		DBUtil::startTransaction();		// delete previous metadata version		$sql = "DELETE FROM document_metadata_version WHERE id=$old_metadata_id";		$rs = DBUtil::runQuery($sql);		if (PEAR::isError($rs))		{			DBUtil::rollback();			return $rs;		}		// make latest equal to previous		$sql = "UPDATE document_metadata_version SET metadata_version=$old_metadata_version WHERE id=$metadata_id";		$rs = DBUtil::runQuery($sql);		if (PEAR::isError($rs))		{			DBUtil::rollback();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -