Exemplo n.º 1
0
 /**
  * Changes the document type of the document.
  *
  * @author KnowledgeTree Team
  * @access public
  * @param string $documenttype The new document type
  * @return void|PEAR_Error Returns nothing on success | a PEAR_Error on failure
  */
 function change_document_type($documenttype)
 {
     $user = $this->can_user_access_object_requiring_permission($this->document, KTAPI_PERMISSION_WRITE);
     if (PEAR::isError($user)) {
         return $user;
     }
     $doctypeid = KTAPI::get_documenttypeid($documenttype);
     if (PEAR::isError($doctypeid)) {
         return $doctypeid;
     }
     if ($this->document->getDocumentTypeId() != $doctypeid) {
         // Get the current document type, fieldsets and metadata
         $iOldDocTypeID = $this->document->getDocumentTypeID();
         $fieldsets = KTMetadataUtil::fieldsetsForDocument($this->document, $iOldDocTypeID);
         $mdlist = DocumentFieldLink::getByDocument($this->document);
         $field_values = array();
         foreach ($mdlist as $oFieldLink) {
             $field_values[$oFieldLink->getDocumentFieldID()] = $oFieldLink->getValue();
         }
         DBUtil::startTransaction();
         $this->document->startNewMetadataVersion($user);
         $this->document->setDocumentTypeId($doctypeid);
         $res = $this->document->update();
         if (PEAR::isError($res)) {
             DBUtil::rollback();
             return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $res);
         }
         // Ensure all values for fieldsets common to both document types are retained
         $fs_ids = array();
         $doctype_fieldsets = KTFieldSet::getForDocumentType($doctypeid);
         foreach ($doctype_fieldsets as $fieldset) {
             $fs_ids[] = $fieldset->getId();
         }
         $MDPack = array();
         foreach ($fieldsets as $oFieldset) {
             if ($oFieldset->getIsGeneric() || in_array($oFieldset->getId(), $fs_ids)) {
                 $fields = $oFieldset->getFields();
                 foreach ($fields as $oField) {
                     $val = isset($field_values[$oField->getId()]) ? $field_values[$oField->getId()] : '';
                     if (!empty($val)) {
                         $MDPack[] = array($oField, $val);
                     }
                 }
             }
         }
         $core_res = KTDocumentUtil::saveMetadata($this->document, $MDPack, array('novalidate' => true));
         if (PEAR::isError($core_res)) {
             DBUtil::rollback();
             return $core_res;
         }
         $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();
         }
         DBUtil::commit();
     }
 }
Exemplo n.º 2
0
 /**
  * This adds a document to the current folder.
  *
  * <code>
  * $kt = new KTAPI();
  * $kt->start_session("admin", "admin");
  * $folder = $kt->get_folder_by_name("My New folder");
  * $res = $folder->add_document("Test Document", "test.txt", "Default", $tmpfname);
  * </code>
  *
  * @author KnowledgeTree Team
  * @access public
  * @param string $title This is the title for the file in the repository.
  * @param string $filename This is the filename in the system for the file.
  * @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);
     if (PEAR::isError($user)) {
         return $user;
     }
     //KTS-4016: removed the replacing of special characters from the title as they should be allowed there
     //$title = KTUtil::replaceInvalidCharacters($title);
     $filename = basename($filename);
     $filename = KTUtil::replaceInvalidCharacters($filename);
     $documenttypeid = KTAPI::get_documenttypeid($documenttype);
     if (PEAR::isError($documenttypeid)) {
         $config = KTCache::getSingleton();
         $defaultToDefaultDocType = $config->get('webservice/useDefaultDocumentTypeIfInvalid', true);
         if ($defaultToDefaultDocType) {
             $documenttypeid = KTAPI::get_documenttypeid('Default');
         } else {
             return new KTAPI_DocumentTypeError('The document type could not be resolved or is disabled: ' . $documenttype);
         }
     }
     $options = array('contents' => new KTFSFileLike($tempfilename), 'temp_file' => $tempfilename, 'novalidate' => true, 'documenttype' => DocumentType::get($documenttypeid), 'description' => $title, 'metadata' => array(), 'cleanup_initial_file' => true);
     DBUtil::startTransaction();
     $document =& KTDocumentUtil::add($this->folder, $filename, $user, $options);
     if (PEAR::isError($document)) {
         DBUtil::rollback();
         return new PEAR_Error(KTAPI_ERROR_INTERNAL_ERROR . ' : ' . $document->getMessage());
     }
     DBUtil::commit();
     KTUploadManager::temporary_file_imported($tempfilename);
     return new KTAPI_Document($this->ktapi, $this, $document);
 }