add method setDocumentContentAttribute()

This commit is contained in:
Uwe Steinmann 2022-11-07 12:19:07 +01:00
parent 6d13883e8f
commit 196fa91a27

View File

@ -1631,9 +1631,119 @@ class RestapiController { /* {{{ */
return $response->withJson(array('success'=>false, 'message'=>'No such attr definition', 'data'=>''), 404);
return $response->withJson(array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''), 500);
}
} /* }}} */
$data = $this->__getDocumentData($doc);
return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>$data), 200);
function setDocumentContentAttribute($request, $response, $args) { /* {{{ */
$dms = $this->container->dms;
$userobj = $this->container->userobj;
$logger = $this->container->logger;
if(!$userobj) {
return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
return;
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
return $response->withJson(array('success'=>false, 'message'=>'No document given', 'data'=>''), 400);
return;
}
if(!ctype_digit($args['version']) || $args['version'] == 0) {
return $response->withJson(array('success'=>false, 'message'=>'No version number given', 'data'=>''), 400);
return;
}
if(!ctype_digit($args['attrdefid']) || $args['attrdefid'] == 0) {
return $response->withJson(array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''), 400);
return;
}
$attrdef = $dms->getAttributeDefinition($args['attrdefid']);
if($doc = $dms->getDocument($args['id']))
$version = $doc->getContentByVersion($args['version']);
if($doc && $attrdef && $version) {
if($attrdef->getObjType() !== SeedDMS_Core_AttributeDefinition::objtype_documentcontent) {
return $response->withJson(array('success'=>false, 'message'=>'Attribute definition not suitable for document versions', 'data'=>''), 409);
}
$params = $request->getParsedBody();
if(!isset($params['value'])) {
return $response->withJson(array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''), 400);
}
$new = $version->getAttributeValue($attrdef) ? true : false;
if(!$attrdef->validate($params['value'], $version, $new)) {
return $response->withJson(array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''), 400);
}
if($doc->getAccessMode($userobj, 'setDocumentContentAttribute') > M_READ) {
if ($version->setAttributeValue($attrdef, $params['value'])) {
$logger->log("Setting attribute '".$attrdef->getName()."' (".$attrdef->getId().") to '".$params['value']."' successful", PEAR_LOG_INFO);
return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
} else {
return $response->withJson(array('success'=>false, 'message'=>'Could not set attribute value of document content', 'data'=>''), 500);
}
} else {
return $response->withJson(array('success'=>false, 'message'=>'No access on document', 'data'=>''), 403);
}
} else {
if(!$doc)
return $response->withJson(array('success'=>false, 'message'=>'No such document', 'data'=>''), 404);
if(!$version)
return $response->withJson(array('success'=>false, 'message'=>'No such version', 'data'=>''), 404);
if(!$attrdef)
return $response->withJson(array('success'=>false, 'message'=>'No such attr definition', 'data'=>''), 404);
return $response->withJson(array('success'=>false, 'message'=>'Could not find user or document', 'data'=>''), 500);
}
} /* }}} */
function setFolderAttribute($request, $response, $args) { /* {{{ */
$dms = $this->container->dms;
$userobj = $this->container->userobj;
$logger = $this->container->logger;
if(!$userobj) {
return $response->withJson(array('success'=>false, 'message'=>'Not logged in', 'data'=>''), 403);
return;
}
if(!ctype_digit($args['id']) || $args['id'] == 0) {
return $response->withJson(array('success'=>false, 'message'=>'No folder given', 'data'=>''), 400);
return;
}
if(!ctype_digit($args['attrdefid']) || $args['attrdefid'] == 0) {
return $response->withJson(array('success'=>false, 'message'=>'No attribute definition id given', 'data'=>''), 400);
return;
}
$attrdef = $dms->getAttributeDefinition($args['attrdefid']);
$obj = $dms->getFolder($args['id']);
if($obj && $attrdef) {
if($attrdef->getObjType() !== SeedDMS_Core_AttributeDefinition::objtype_folder) {
return $response->withJson(array('success'=>false, 'message'=>'Attribute definition not suitable for folders', 'data'=>''), 409);
}
$params = $request->getParsedBody();
if(!isset($params['value'])) {
return $response->withJson(array('success'=>false, 'message'=>'Attribute value not set', 'data'=>''.$request->getHeader('Content-Type')[0]), 400);
}
if(strlen($params['value'])) {
$new = $obj->getAttributeValue($attrdef) ? true : false;
if(!$attrdef->validate($params['value'], $obj, $new)) {
return $response->withJson(array('success'=>false, 'message'=>'Validation of attribute value failed: '.$attrdef->getValidationError(), 'data'=>''), 400);
}
}
if($obj->getAccessMode($userobj, 'setFolderAttribute') > M_READ) {
if ($obj->setAttributeValue($attrdef, $params['value'])) {
$logger->log("Setting attribute '".$attrdef->getName()."' (".$attrdef->getId().") to '".$params['value']."' successful", PEAR_LOG_INFO);
return $response->withJson(array('success'=>true, 'message'=>'', 'data'=>''), 201);
} else {
return $response->withJson(array('success'=>false, 'message'=>'Could not set attribute value of folder', 'data'=>''), 500);
}
} else {
return $response->withJson(array('success'=>false, 'message'=>'No access on folder', 'data'=>''), 403);
}
} else {
if(!$obj)
return $response->withJson(array('success'=>false, 'message'=>'No such folder', 'data'=>''), 404);
if(!$attrdef)
return $response->withJson(array('success'=>false, 'message'=>'No such attr definition', 'data'=>''), 404);
return $response->withJson(array('success'=>false, 'message'=>'Could not find user or folder', 'data'=>''), 500);
}
} /* }}} */
function getAccount($request, $response) { /* {{{ */