Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ad976c6
Unified workflow management
juliusknorr Aug 6, 2019
e7e9166
Add endpoint to test operations before submitting
juliusknorr Aug 9, 2019
aed630a
Adjust template id
juliusknorr Aug 19, 2019
9f8ccf1
Use entity/event definitions from backend
juliusknorr Aug 19, 2019
0f84696
Styling fixes
juliusknorr Aug 19, 2019
aa00f40
Adjust to new backend URLs
juliusknorr Aug 28, 2019
bd281da
Move to vuex store
juliusknorr Aug 29, 2019
af3cb9c
Use trigger hint
juliusknorr Aug 29, 2019
b3bafb1
Add missing files
juliusknorr Aug 30, 2019
f36b50c
Migrate plugins to vuex store
juliusknorr Aug 30, 2019
ae55829
Document plugins to be used by integrators
juliusknorr Aug 30, 2019
28a7721
Handle operator registration properly
juliusknorr Aug 31, 2019
69ac169
Do not use shot tag
juliusknorr Aug 31, 2019
1742f97
Allow placeholder and validation without custom vue component
juliusknorr Sep 2, 2019
11d6486
Migrate check plugins
juliusknorr Sep 2, 2019
2364fc8
Make rule listing more compact
juliusknorr Sep 2, 2019
c665d54
Fix removing checks
juliusknorr Sep 2, 2019
d6b3af9
Load checks from the backend
juliusknorr Sep 6, 2019
98666a9
Move over checker plugins
juliusknorr Sep 6, 2019
0b67062
Add moment-timezone
juliusknorr Sep 6, 2019
24aec9b
Frontend polishing
juliusknorr Sep 9, 2019
e17a666
Implement custom check components and fix linting
juliusknorr Sep 9, 2019
335d7cf
Add tag selector
juliusknorr Sep 9, 2019
370242c
Add request url selector
juliusknorr Sep 9, 2019
99e1063
Add user group selector
juliusknorr Sep 9, 2019
9e00788
Add nextcloud-router
juliusknorr Sep 9, 2019
7683208
Workflow vue cleanup
juliusknorr Sep 10, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Document plugins to be used by integrators
Signed-off-by: Julius Härtl <[email protected]>
  • Loading branch information
juliusknorr committed Sep 10, 2019
commit ae55829989d84c6e3937982479bacb79576333cb
67 changes: 67 additions & 0 deletions apps/workflowengine/src/components/Values/file.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* @copyright Copyright (c) 2019 Julius Härtl <[email protected]>
*
* @author Julius Härtl <[email protected]>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/

import './../../legacy/filenameplugin'
import './../../legacy/filesystemtagsplugin'
import './../../legacy/requestremoteaddressplugin'
import './../../legacy/requesttimeplugin'
import './../../legacy/requesturlplugin'
import './../../legacy/requestuseragentplugin'
import './../../legacy/usergroupmembershipplugin'

import FileMimeType from './FileMimeType';
import SizeValue from './SizeValue';

const FileChecks = Object.values(OCA.WorkflowEngine.Plugins).map((plugin) => {
if (plugin.component) {
return { ...plugin.getCheck(), component: plugin.component() }
}
return plugin.getCheck()
})


// new way of registering checks
FileChecks.push({
class: 'OCA\\WorkflowEngine\\Check\\FileMimeType',
name: t('workflowengine', 'File MIME type'),
operators: [
{ operator: 'is', name: t('workflowengine', 'is') },
{ operator: '!is', name: t('workflowengine', 'is not') },
{ operator: 'matches', name: t('workflowengine', 'matches') },
{ operator: '!matches', name: t('workflowengine', 'does not match') }
],
component: FileMimeType
})

FileChecks.push({
class: 'OCA\\WorkflowEngine\\Check\\FileSize',
name: t('workflowengine', 'File size (upload)'),
operators: [
{ operator: 'less', name: t('workflowengine', 'less') },
{ operator: '!greater', name: t('workflowengine', 'less or equals') },
{ operator: '!less', name: t('workflowengine', 'greater or equals') },
{ operator: 'greater', name: t('workflowengine', 'greater') }
],
component: SizeValue
})

export default FileChecks
77 changes: 45 additions & 32 deletions apps/workflowengine/src/workflowengine.js
Original file line number Diff line number Diff line change
@@ -1,50 +1,63 @@
import './legacy/filemimetypeplugin'
import './legacy/filenameplugin'
import './legacy/filesizeplugin'
import './legacy/filesystemtagsplugin'
import './legacy/requestremoteaddressplugin'
import './legacy/requesttimeplugin'
import './legacy/requesturlplugin'
import './legacy/requestuseragentplugin'
import './legacy/usergroupmembershipplugin'

import Vue from 'vue'
import Vuex from 'vuex'

import store from './store'

import Settings from './components/Workflow'
import FileMimeType from './components/Values/FileMimeType';
import FileValues from './components/Values/file'

/**
* A plugin for displaying a custom value field for checks
*
* @typedef {Object} CheckPlugin
* @property {string} class - The PHP class name of the check
* @property {Comparison[]} operators - A list of possible comparison operations running on the check
* @property {Vue} component - A vue component to handle the rendering of options
* The component should handle the v-model directive properly,
* so it needs a value property to receive data and emit an input
* event once the data has changed
**/

/**
* A plugin for extending the admin page repesentation of a operator
*
* @typedef {Object} OperatorPlugin
* @property {string} class - The PHP class name of the check
* @property {string} operation - Default value for the operation field
* @property {string} color - Custom color code to be applied for the operator selector
* @property {Vue} component - A vue component to handle the rendering of options
* The component should handle the v-model directive properly,
* so it needs a value property to receive data and emit an input
* event once the data has changed
*/

/**
* @typedef {Object} Comparison
* @property {string} operator - value the comparison should have, e.g. !less, greater
* @property {string} name - Translated readable text, e.g. less or equals
**/

/**
* Public javascript api for apps to register custom plugins
*/
window.OCA.WorkflowEngine = Object.assign({}, OCA.WorkflowEngine, {
/**
*
* @param {CheckPlugin} Plugin
*/
registerCheck: function (Plugin) {
store.commit('addPluginCheck', Plugin)
},
/**
*
* @param {OperatorPlugin} Plugin
*/
registerOperator: function (Plugin) {
store.commit('addPluginOperator', Plugin)
}
})

// Load legacy plugins for now and register them in the new plugin system
Object.values(OCA.WorkflowEngine.Plugins).map((plugin) => {
if (plugin.component) {
return { ...plugin.getCheck(), component: plugin.component() }
}
return plugin.getCheck()
}).forEach((legacyCheckPlugin) => window.OCA.WorkflowEngine.registerCheck(legacyCheckPlugin))

// new way of registering checks
window.OCA.WorkflowEngine.registerCheck({
class: 'OCA\\WorkflowEngine\\Check\\FileMimeType',
name: t('workflowengine', 'File MIME type'),
operators: [
{ operator: 'is', name: t('workflowengine', 'is') },
{ operator: '!is', name: t('workflowengine', 'is not') },
{ operator: 'matches', name: t('workflowengine', 'matches') },
{ operator: '!matches', name: t('workflowengine', 'does not match') }
],
component: FileMimeType
})
// Register shipped checks for file entity
FileValues.forEach((checkPlugin) => window.OCA.WorkflowEngine.registerCheck(checkPlugin))

Vue.use(Vuex)
Vue.prototype.t = t
Expand Down