/**
  * update a File with id.
  *
  * @param string $session_id    current session
  * @param int $ref_id   refid id of File in repository
  * @param string $file_xml   qti xml description of test
  *
  * @return boolean true, if update successful, false otherwise
  */
 function updateFile($sid, $ref_id, $file_xml)
 {
     $this->initAuth($sid);
     $this->initIlias();
     if (!$this->__checkSession($sid)) {
         return $this->__raiseError($this->__getMessage(), $this->__getMessageCode());
     }
     global $rbacsystem, $tree, $ilLog, $ilAccess;
     if (ilObject::_isInTrash($ref_id)) {
         return $this->__raiseError('Cannot perform update since file has been deleted.', 'CLIENT_OBJECT_DELETED');
     }
     // get obj_id
     if (!($obj_id = ilObject::_lookupObjectId($ref_id))) {
         return $this->__raiseError('No File found for id: ' . $ref_id, 'Client');
     }
     // Check access
     $permission_ok = false;
     foreach ($ref_ids = ilObject::_getAllReferences($obj_id) as $ref_id) {
         if ($ilAccess->checkAccess('write', '', $ref_id)) {
             $permission_ok = true;
             break;
         }
     }
     if (!$permission_ok) {
         return $this->__raiseError('No permission to edit the File with id: ' . $ref_id, 'Server');
     }
     $file = ilObjectFactory::getInstanceByObjId($obj_id, false);
     if (!is_object($file) || $file->getType() != "file") {
         return $this->__raiseError('Wrong obj id or type for File with id ' . $ref_id, 'Server');
     }
     include_once './Modules/File/classes/class.ilFileXMLParser.php';
     include_once './Modules/File/classes/class.ilFileException.php';
     $fileXMLParser = new ilFileXMLParser($file, $file_xml, $obj_id);
     try {
         if ($fileXMLParser->start()) {
             $fileXMLParser->updateFileContents();
             return $file->update();
         }
     } catch (ilFileException $exception) {
         return $this->__raiseError($exception->getMessage(), $exception->getCode() == ilFileException::$ID_MISMATCH ? "Client" : "Server");
     }
     return false;
 }