Пример #1
0
 /**
  * This updates the system metadata on the document.
  *
  * @author KnowledgeTree Team
  * @access public
  * @param array $sysdata The system metadata to be applied
  * @return void|PEAR_Error Returns nothing on success | a PEAR_Error on failure
  */
 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='******'";
                     $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.");
         }
     }
 }
Пример #2
0
 /**
  * This renames the folder
  *
  * @author KnowledgeTree Team
  * @access public
  * @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;
     }
     $newname = KTUtil::replaceInvalidCharacters($newname);
     DBUtil::startTransaction();
     $result = KTFolderUtil::rename($this->folder, $newname, $user);
     if (PEAR::isError($result)) {
         DBUtil::rollback();
         return new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $result);
     }
     DBUtil::commit();
 }