diff --git a/apps/workflowengine/src/components/Checks/FileSystemTag.vue b/apps/workflowengine/src/components/Checks/FileSystemTag.vue
new file mode 100644
index 00000000000..ead4edf60c2
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/FileSystemTag.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue b/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue
new file mode 100644
index 00000000000..a046861b132
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/MultiselectTag/MultiselectTag.vue
@@ -0,0 +1,130 @@
+
+
+
+
+ {{ t('core', 'No results') }}
+
+ {{ tagLabel(scope.option) }}
+
+
+
+
+
diff --git a/apps/workflowengine/src/components/Checks/MultiselectTag/api.js b/apps/workflowengine/src/components/Checks/MultiselectTag/api.js
new file mode 100644
index 00000000000..f371a4b71de
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/MultiselectTag/api.js
@@ -0,0 +1,90 @@
+import axios from 'nextcloud-axios'
+import { generateRemoteUrl } from 'nextcloud-router'
+
+const xmlToJson = (xml) => {
+ let obj = {}
+
+ if (xml.nodeType === 1) {
+ if (xml.attributes.length > 0) {
+ obj['@attributes'] = {}
+ for (let j = 0; j < xml.attributes.length; j++) {
+ const attribute = xml.attributes.item(j)
+ obj['@attributes'][attribute.nodeName] = attribute.nodeValue
+ }
+ }
+ } else if (xml.nodeType === 3) {
+ obj = xml.nodeValue
+ }
+
+ if (xml.hasChildNodes()) {
+ for (let i = 0; i < xml.childNodes.length; i++) {
+ const item = xml.childNodes.item(i)
+ const nodeName = item.nodeName
+ if (typeof (obj[nodeName]) === 'undefined') {
+ obj[nodeName] = xmlToJson(item)
+ } else {
+ if (typeof obj[nodeName].push === 'undefined') {
+ var old = obj[nodeName]
+ obj[nodeName] = []
+ obj[nodeName].push(old)
+ }
+ obj[nodeName].push(xmlToJson(item))
+ }
+ }
+ }
+ return obj
+}
+
+const parseXml = (xml) => {
+ let dom = null
+ try {
+ dom = (new DOMParser()).parseFromString(xml, 'text/xml')
+ } catch (e) {
+ console.error('Failed to parse xml document', e)
+ }
+ return dom
+}
+
+const xmlToTagList = (xml) => {
+ let json = xmlToJson(parseXml(xml))
+ let list = json['d:multistatus']['d:response']
+ let result = []
+ for (let index in list) {
+ let tag = list[index]['d:propstat']
+
+ if (tag['d:status']['#text'] !== 'HTTP/1.1 200 OK') {
+ continue
+ }
+ result.push({
+ id: tag['d:prop']['oc:id']['#text'],
+ displayName: tag['d:prop']['oc:display-name']['#text'],
+ canAssign: tag['d:prop']['oc:can-assign']['#text'] === 'true',
+ userAssignable: tag['d:prop']['oc:user-assignable']['#text'] === 'true',
+ userVisible: tag['d:prop']['oc:user-visible']['#text'] === 'true'
+ })
+ }
+ return result
+}
+
+const searchTags = function() {
+ return axios({
+ method: 'PROPFIND',
+ url: generateRemoteUrl('dav') + '/systemtags/',
+ data: `
+
+
+
+
+
+
+
+
+ `
+ }).then((response) => {
+ return xmlToTagList(response.data)
+ })
+}
+
+export {
+ searchTags
+}
diff --git a/apps/workflowengine/src/components/Checks/MultiselectTag/index.js b/apps/workflowengine/src/components/Checks/MultiselectTag/index.js
new file mode 100644
index 00000000000..69b7e277e76
--- /dev/null
+++ b/apps/workflowengine/src/components/Checks/MultiselectTag/index.js
@@ -0,0 +1,4 @@
+import MultiselectTag from './MultiselectTag'
+
+export default MultiselectTag
+export { MultiselectTag }
diff --git a/apps/workflowengine/src/components/Checks/file.js b/apps/workflowengine/src/components/Checks/file.js
index 816aaa73a65..431a3f93580 100644
--- a/apps/workflowengine/src/components/Checks/file.js
+++ b/apps/workflowengine/src/components/Checks/file.js
@@ -22,6 +22,7 @@
import FileMimeType from './FileMimeType'
import { stringValidator, validateIPv4, validateIPv6 } from './../../helpers/validators'
+import FileSystemTag from './FileSystemTag';
const FileChecks = [
{
class: 'OCA\\WorkflowEngine\\Check\\FileName',
@@ -95,7 +96,8 @@ const FileChecks = [
operators: [
{ operator: 'is', name: t('workflowengine', 'is tagged with') },
{ operator: '!is', name: t('workflowengine', 'is not tagged with') }
- ]
+ ],
+ component: FileSystemTag
}
]
diff --git a/apps/workflowengine/src/components/Checks/request.js b/apps/workflowengine/src/components/Checks/request.js
index 5550555cf02..ee574f9de90 100644
--- a/apps/workflowengine/src/components/Checks/request.js
+++ b/apps/workflowengine/src/components/Checks/request.js
@@ -22,6 +22,7 @@
import RequestUserAgent from './RequestUserAgent'
import RequestTime from './RequestTime'
+import RequestURL from './RequestURL'
const RequestChecks = [
{
@@ -32,8 +33,8 @@ const RequestChecks = [
{ operator: '!is', name: t('workflowengine', 'is not') },
{ operator: 'matches', name: t('workflowengine', 'matches') },
{ operator: '!matches', name: t('workflowengine', 'does not match') }
- ]
- // TODO: implement component
+ ],
+ component: RequestURL
},
{
class: 'OCA\\WorkflowEngine\\Check\\RequestTime',