summaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2019-08-29 16:50:33 +0200
committerJulius Härtl <jus@bitgrid.net>2019-09-10 09:01:23 +0200
commitbd281daa47152dc09c0f6c2bbc9e5a308d1748bd (patch)
tree73227cf96161871a259688624b5d4f78637fc3d6 /apps
parentaa00f401b39c2b63cba7e5e8f6cdec8528466069 (diff)
downloadnextcloud-server-bd281daa47152dc09c0f6c2bbc9e5a308d1748bd.tar.gz
nextcloud-server-bd281daa47152dc09c0f6c2bbc9e5a308d1748bd.zip
Move to vuex store
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'apps')
-rw-r--r--apps/workflowengine/src/admin.js385
-rw-r--r--apps/workflowengine/src/components/Check.vue134
-rw-r--r--apps/workflowengine/src/components/Event.vue105
-rw-r--r--apps/workflowengine/src/components/Operation.vue39
-rw-r--r--apps/workflowengine/src/components/Operations/ConvertToPdf.vue59
-rw-r--r--apps/workflowengine/src/components/Operations/Tag.vue28
-rw-r--r--apps/workflowengine/src/components/Rule.vue216
-rw-r--r--apps/workflowengine/src/components/Values/FileMimeType.vue56
-rw-r--r--apps/workflowengine/src/components/Values/SizeValue.vue37
-rw-r--r--apps/workflowengine/src/components/Workflow.vue116
-rw-r--r--apps/workflowengine/src/hbs_helpers/getOperators.js7
-rw-r--r--apps/workflowengine/src/hbs_helpers/selectItem.js7
-rw-r--r--apps/workflowengine/src/legacy/filemimetypeplugin.js (renamed from apps/workflowengine/src/filemimetypeplugin.js)56
-rw-r--r--apps/workflowengine/src/legacy/filenameplugin.js (renamed from apps/workflowengine/src/filenameplugin.js)64
-rw-r--r--apps/workflowengine/src/legacy/filesizeplugin.js (renamed from apps/workflowengine/src/filesizeplugin.js)40
-rw-r--r--apps/workflowengine/src/legacy/filesystemtagsplugin.js (renamed from apps/workflowengine/src/filesystemtagsplugin.js)50
-rw-r--r--apps/workflowengine/src/legacy/requestremoteaddressplugin.js (renamed from apps/workflowengine/src/requestremoteaddressplugin.js)64
-rw-r--r--apps/workflowengine/src/legacy/requesttimeplugin.js (renamed from apps/workflowengine/src/requesttimeplugin.js)148
-rw-r--r--apps/workflowengine/src/legacy/requesturlplugin.js (renamed from apps/workflowengine/src/requesturlplugin.js)85
-rw-r--r--apps/workflowengine/src/legacy/requestuseragentplugin.js (renamed from apps/workflowengine/src/requestuseragentplugin.js)78
-rw-r--r--apps/workflowengine/src/legacy/usergroupmembershipplugin.js (renamed from apps/workflowengine/src/usergroupmembershipplugin.js)52
-rw-r--r--apps/workflowengine/src/services/Operation.js134
-rw-r--r--apps/workflowengine/src/templates/operation.handlebars45
-rw-r--r--apps/workflowengine/src/templates/operations.handlebars2
-rw-r--r--apps/workflowengine/src/workflowengine.js34
25 files changed, 746 insertions, 1295 deletions
diff --git a/apps/workflowengine/src/admin.js b/apps/workflowengine/src/admin.js
deleted file mode 100644
index fb2af941436..00000000000
--- a/apps/workflowengine/src/admin.js
+++ /dev/null
@@ -1,385 +0,0 @@
-/**
- * @copyright Copyright (c) 2016 Morris Jobke <hey@morrisjobke.de>
- *
- * @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 OperationTemplate from './templates/operation.handlebars';
-import OperationsTemplate from './templates/operations.handlebars';
-
-(function() {
- OCA.WorkflowEngine = _.extend(OCA.WorkflowEngine || {}, {
- availablePlugins: [],
- availableChecks: [],
-
- getCheckByClass: function(className) {
- var length = OCA.WorkflowEngine.availableChecks.length;
- for (var i = 0; i < length; i++) {
- if (OCA.WorkflowEngine.availableChecks[i]['class'] === className) {
- return OCA.WorkflowEngine.availableChecks[i];
- }
- }
- return undefined;
- }
- });
-
- /**
- * 888b d888 888 888
- * 8888b d8888 888 888
- * 88888b.d88888 888 888
- * 888Y88888P888 .d88b. .d88888 .d88b. 888 .d8888b
- * 888 Y888P 888 d88""88b d88" 888 d8P Y8b 888 88K
- * 888 Y8P 888 888 888 888 888 88888888 888 "Y8888b.
- * 888 " 888 Y88..88P Y88b 888 Y8b. 888 X88
- * 888 888 "Y88P" "Y88888 "Y8888 888 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.Operation
- */
- OCA.WorkflowEngine.Operation =
- OC.Backbone.Model.extend({
- defaults: {
- 'class': 'OCA\\WorkflowEngine\\Operation',
- 'name': '',
- 'checks': [],
- 'operation': ''
- }
- });
-
- /**
- * .d8888b. 888 888 888 d8b
- * d88P Y88b 888 888 888 Y8P
- * 888 888 888 888 888
- * 888 .d88b. 888 888 .d88b. .d8888b 888888 888 .d88b. 88888b. .d8888b
- * 888 d88""88b 888 888 d8P Y8b d88P" 888 888 d88""88b 888 "88b 88K
- * 888 888 888 888 888 888 88888888 888 888 888 888 888 888 888 "Y8888b.
- * Y88b d88P Y88..88P 888 888 Y8b. Y88b. Y88b. 888 Y88..88P 888 888 X88
- * "Y8888P" "Y88P" 888 888 "Y8888 "Y8888P "Y888 888 "Y88P" 888 888 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.OperationsCollection
- *
- * collection for all configurated operations
- */
- OCA.WorkflowEngine.OperationsCollection =
- OC.Backbone.Collection.extend({
- model: OCA.WorkflowEngine.Operation,
- url: OC.generateUrl('apps/workflowengine/operations')
- });
-
- /**
- * 888 888 d8b
- * 888 888 Y8P
- * 888 888
- * Y88b d88P 888 .d88b. 888 888 888 .d8888b
- * Y88b d88P 888 d8P Y8b 888 888 888 88K
- * Y88o88P 888 88888888 888 888 888 "Y8888b.
- * Y888P 888 Y8b. Y88b 888 d88P X88
- * Y8P 888 "Y8888 "Y8888888P" 88888P'
- */
-
- /**
- * @class OCA.WorkflowEngine.OperationView
- *
- * this creates the view for a single operation
- */
- OCA.WorkflowEngine.OperationView =
- OC.Backbone.View.extend({
- templateId: '#operation-template',
- events: {
- 'change .check-class': 'checkChanged',
- 'change .check-operator': 'checkChanged',
- 'change .check-value': 'checkChanged',
- 'change .operation-name': 'operationChanged',
- 'change .operation-operation': 'operationChanged',
- 'click .button-reset': 'reset',
- 'click .button-save': 'save',
- 'click .button-add': 'add',
- 'click .button-delete': 'delete',
- 'click .button-delete-check': 'deleteCheck'
- },
- originalModel: null,
- hasChanged: false,
- message: '',
- errorMessage: '',
- saving: false,
- groups: [],
- template: function(vars) {
- return OperationTemplate(_.extend(
- {
- shortRuleDescTXT: t('workflowengine', 'Short rule description'),
- addRuleTXT: t('workflowengine', 'Add rule'),
- resetTXT: t('workflowengine', 'Reset'),
- saveTXT: t('workflowengine', 'Save'),
- savingTXT: t('workflowengine', 'Saving…')
- },
- vars
- ));
- },
- initialize: function() {
- // this creates a new copy of the object to definitely have a new reference and being able to reset the model
- this.originalModel = JSON.parse(JSON.stringify(this.model));
- this.model.on('change', function() {
- console.log('model changed');
- this.hasChanged = true;
- this.render();
- }, this);
-
- if (this.model.get('id') === undefined) {
- this.hasChanged = true;
- }
- var self = this;
- $.ajax({
- url: OC.linkToOCS('cloud/groups', 2) + 'details',
- dataType: 'json',
- quietMillis: 100,
- }).success(function(data) {
- if (data.ocs.data.groups && data.ocs.data.groups.length > 0) {
-
- data.ocs.data.groups.forEach(function(group) {
- self.groups.push({ id: group.id, displayname: group.displayname });
- });
- self.render();
-
- } else {
- OC.Notification.error(t('workflowengine', 'Group list is empty'), { type: 'error' });
- console.log(data);
- }
- }).error(function(data) {
- OC.Notification.error(t('workflowengine', 'Unable to retrieve the group list'), { type: 'error' });
- console.log(data);
- });
- },
- delete: function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.delete, this));
- return;
- }
-
- this.model.destroy();
- this.remove();
- },
- reset: function() {
- this.hasChanged = false;
- // silent is need to not trigger the change event which resets the hasChanged attribute
- this.model.set(this.originalModel, { silent: true });
- this.render();
- },
- save: function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(_.bind(this.save, this));
- return;
- }
-
- var success = function(model, response, options) {
- this.saving = false;
- this.originalModel = JSON.parse(JSON.stringify(this.model));
-
- this.message = t('workflowengine', 'Saved');
- this.errorMessage = '';
- this.render();
- };
- var error = function(model, response, options) {
- this.saving = false;
- this.hasChanged = true;
-
- this.message = t('workflowengine', 'Saving failed:');
- this.errorMessage = response.responseText;
- this.render();
- };
- this.hasChanged = false;
- this.saving = true;
- this.render();
- this.model.save(null, { success: success, error: error, context: this });
- },
- add: function() {
- var checks = _.clone(this.model.get('checks')),
- classname = OCA.WorkflowEngine.availableChecks[0]['class'],
- operators = OCA.WorkflowEngine.availableChecks[0]['operators'];
-
- checks.push({
- 'class': classname,
- 'operator': operators[0]['operator'],
- 'value': ''
- });
- this.model.set({ 'checks': checks });
- },
- checkChanged: function(event) {
- var value = event.target.value,
- id = $(event.target.parentElement).data('id'),
- // this creates a new copy of the object to definitely have a new reference
- checks = JSON.parse(JSON.stringify(this.model.get('checks'))),
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- var className = event.target.classList[i];
- if (className.substr(0, 'check-'.length) === 'check-') {
- key = className.substr('check-'.length);
- break;
- }
- }
-
- if (key === null) {
- console.warn('checkChanged triggered but element doesn\'t have any "check-" class');
- return;
- }
-
- if (!_.has(checks[id], key)) {
- console.warn('key "' + key + '" is not available in check', check);
- return;
- }
-
- checks[id][key] = value;
- // if the class is changed most likely also the operators have changed
- // with this we set the operator to the first possible operator
- if (key === 'class') {
- var check = OCA.WorkflowEngine.getCheckByClass(value);
- if (!_.isUndefined(check)) {
- checks[id]['operator'] = check['operators'][0]['operator'];
- checks[id]['value'] = '';
- }
- }
- // model change will trigger render
- this.model.set({ 'checks': checks });
- },
- deleteCheck: function(event) {
- console.log(arguments);
- var id = $(event.target.parentElement).data('id'),
- checks = JSON.parse(JSON.stringify(this.model.get('checks')));
-
- // splice removes 1 element at index `id`
- checks.splice(id, 1);
- // model change will trigger render
- this.model.set({ 'checks': checks });
- },
- operationChanged: function(event) {
- var value = event.target.value,
- key = null;
-
- for (var i = 0; i < event.target.classList.length; i++) {
- var className = event.target.classList[i];
- if (className.substr(0, 'operation-'.length) === 'operation-') {
- key = className.substr('operation-'.length);
- break;
- }
- }
-
- if (key === null) {
- console.warn('operationChanged triggered but element doesn\'t have any "operation-" class');
- return;
- }
-
- if (key !== 'name' && key !== 'operation') {
- console.warn('key "' + key + '" is no valid attribute');
- return;
- }
-
- // model change will trigger render
- this.model.set(key, value);
- },
- render: function() {
- this.$el.html(this.template({
- operation: this.model.toJSON(),
- classes: OCA.WorkflowEngine.availableChecks,
- hasChanged: this.hasChanged,
- message: this.message,
- errorMessage: this.errorMessage,
- saving: this.saving
- }));
-
- var checks = this.model.get('checks');
- _.each(this.$el.find('.check'), function(element) {
- var $element = $(element),
- id = $element.data('id'),
- check = checks[id],
- valueElement = $element.find('.check-value').first();
- var self = this;
-
- _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
- if (_.isFunction(plugin.render)) {
- plugin.render(valueElement, check, self.groups);
- }
- });
- }, this);
-
- if (this.message !== '') {
- // hide success messages after some time
- _.delay(function(elements) {
- $(elements).css('opacity', 0);
- }, 7000, this.$el.find('.msg.success'));
- this.message = '';
- }
-
- return this.$el;
- }
- });
-
- /**
- * @class OCA.WorkflowEngine.OperationsView
- *
- * this creates the view for configured operations
- */
- OCA.WorkflowEngine.OperationsView =
- OC.Backbone.View.extend({
- templateId: '#operations-template',
- collection: null,
- $el: null,
- events: {
- 'click .button-add-operation': 'add'
- },
- template: function(vars) {
- return OperationsTemplate(_.extend(
- {
- addRuleGroupTXT: t('workflowengine', 'Add rule group')
- },
- vars
- ));
- },
- initialize: function(classname) {
- if (!OCA.WorkflowEngine.availablePlugins.length) {
- OCA.WorkflowEngine.availablePlugins = OC.Plugins.getPlugins('OCA.WorkflowEngine.CheckPlugins');
- _.each(OCA.WorkflowEngine.availablePlugins, function(plugin) {
- if (_.isFunction(plugin.getCheck)) {
- OCA.WorkflowEngine.availableChecks.push(plugin.getCheck(classname));
- }
- });
- }
-
- this.collection.fetch({
- data: {
- 'class': classname
- }
- });
- this.collection.once('sync', this.render, this);
- },
- add: function() {
- var operation = this.collection.create();
- this.renderOperation(operation);
- },
- renderOperation: function(subView) {
- var operationsElement = this.$el.find('.operations');
- operationsElement.append(subView.$el);
- subView.render();
- },
- render: function() {
- this.$el.html(this.template());
- this.collection.each(this.renderOperation, this);
- }
- });
-})(); \ No newline at end of file
diff --git a/apps/workflowengine/src/components/Check.vue b/apps/workflowengine/src/components/Check.vue
index 86005dae268..b2e8e13c29b 100644
--- a/apps/workflowengine/src/components/Check.vue
+++ b/apps/workflowengine/src/components/Check.vue
@@ -1,86 +1,82 @@
<template>
- <div class="check" @click="showDelete" v-click-outside="hideDelete">
- <Multiselect v-model="currentOption" :options="options" label="name"
- track-by="class" :allow-empty="false" :placeholder="t('workflowengine', 'Select a filter')"
- @input="updateCheck" ref="checkSelector"></Multiselect>
- <Multiselect v-if="currentOption" v-model="currentOperator" @input="updateCheck"
- :options="operators" label="name" track-by="operator"
- :allow-empty="false" :placeholder="t('workflowengine', 'Select a comparator')"></Multiselect>
- <component v-if="currentOperator && currentComponent" :is="currentOption.component()" v-model="check.value" />
- <input v-else-if="currentOperator" type="text" v-model="check.value" @input="updateCheck" />
+ <div v-click-outside="hideDelete" class="check" @click="showDelete">
+ <Multiselect ref="checkSelector" v-model="currentOption" :options="options"
+ label="name" track-by="class" :allow-empty="false"
+ :placeholder="t('workflowengine', 'Select a filter')" @input="updateCheck" />
+ <Multiselect v-if="currentOption" v-model="currentOperator" :options="operators"
+ label="name" track-by="operator" :allow-empty="false"
+ :placeholder="t('workflowengine', 'Select a comparator')" @input="updateCheck" />
+ <component :is="currentOption.component()" v-if="currentOperator && currentComponent" v-model="check.value" />
+ <input v-else-if="currentOperator" v-model="check.value" type="text"
+ @input="updateCheck">
<Actions>
- <ActionButton icon="icon-delete" v-if="deleteVisible || !currentOption" @click="$emit('remove')" />
+ <ActionButton v-if="deleteVisible || !currentOption" icon="icon-delete" @click="$emit('remove')" />
</Actions>
</div>
</template>
<script>
- import { Checks } from '../services/Operation';
- import { Multiselect, Actions, ActionButton } from 'nextcloud-vue'
- import ClickOutside from 'vue-click-outside';
+import { Checks } from '../services/Operation'
+import { Multiselect, Actions, ActionButton } from 'nextcloud-vue'
+import ClickOutside from 'vue-click-outside'
- export default {
- name: 'Check',
- components: {
- ActionButton,
- Actions,
- Multiselect
- },
- directives: {
- ClickOutside
- },
- props: {
- check: {
- type: Object,
- required: true
- }
- },
- data() {
- return {
- deleteVisible: false,
- currentOption: null,
- currentOperator: null,
- options: [],
- }
+export default {
+ name: 'Check',
+ components: {
+ ActionButton,
+ Actions,
+ Multiselect
+ },
+ directives: {
+ ClickOutside
+ },
+ props: {
+ check: {
+ type: Object,
+ required: true
+ }
+ },
+ data() {
+ return {
+ deleteVisible: false,
+ currentOption: null,
+ currentOperator: null,
+ options: []
+ }
+ },
+ computed: {
+ operators() {
+ if (!this.currentOption) { return [] }
+ return Checks[this.currentOption.class].operators
},
- mounted() {
- this.options = Object.values(Checks)
- this.currentOption = Checks[this.check.class]
- this.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)
- this.$nextTick(() => {
- //this.$refs.checkSelector.$el.focus()
- })
+ currentComponent() {
+ if (!this.currentOption) { return [] }
+ const currentComponent = Checks[this.currentOption.class].component
+ return currentComponent && currentComponent()
+ }
+ },
+ mounted() {
+ this.options = Object.values(Checks)
+ this.currentOption = Checks[this.check.class]
+ this.currentOperator = this.operators.find((operator) => operator.operator === this.check.operator)
+ },
+ methods: {
+ showDelete() {
+ this.deleteVisible = true
},
- computed: {
- operators() {
- if (!this.currentOption)
- return []
- return Checks[this.currentOption.class].operators
- },
- currentComponent() {
- if (!this.currentOption)
- return []
- let currentComponent = Checks[this.currentOption.class].component
- return currentComponent && currentComponent()
- }
+ hideDelete() {
+ this.deleteVisible = false
},
- methods: {
- showDelete() {
- this.deleteVisible = true
- },
- hideDelete() {
- this.deleteVisible = false
- },
- updateCheck() {
- if (this.check.class !== this.currentOption.class) {
- this.currentOperator = this.operators[0]
- }
- this.check.class = this.currentOption.class
- this.check.operator = this.currentOperator.operator
- this.$emit('update', this.check)
+ updateCheck() {
+ if (this.check.class !== this.currentOption.class) {
+ this.currentOperator = this.operators[0]
}
+ this.check.class = this.currentOption.class
+ this.check.operator = this.currentOperator.operator
+ this.$emit('update', this.check)
}
}
+}
</script>
<style scoped lang="scss">
diff --git a/apps/workflowengine/src/components/Event.vue b/apps/workflowengine/src/components/Event.vue
index 7b39ea571fb..d05aeb0a07e 100644
--- a/apps/workflowengine/src/components/Event.vue
+++ b/apps/workflowengine/src/components/Event.vue
@@ -1,74 +1,63 @@
<template>
<div>
- <Multiselect :value="currentEvent" :options="allEvents" label="name" track-by="id" :allow-empty="false" :disabled="allEvents.length <= 1" @input="updateEvent">
- <template slot="singleLabel" slot-scope="props">
- <img class="option__icon" :src="props.option.icon" />
- <span class="option__title option__title_single">{{ props.option.name }}</span>
- </template>
- <template slot="option" slot-scope="props">
- <img class="option__icon" :src="props.option.icon" />
- <span class="option__title">{{ props.option.name }}</span>
- </template>
- </Multiselect>
+ <div v-if="operation.isComplex && operation.fixedEntity !== ''">
+ <img class="option__icon" :src="entity.icon">
+ <span class="option__title option__title_single">{{ entity.name }}</span>
+ </div>
+ <Multiselect v-else :value="currentEvent" :options="allEvents"
+ label="eventName" track-by="id" :allow-empty="false"
+ :disabled="allEvents.length <= 1" @input="updateEvent">
+ <template slot="singleLabel" slot-scope="props">
+ <img class="option__icon" :src="props.option.entity.icon">
+ <span class="option__title option__title_single">{{ props.option.displayName }}</span>
+ </template>
+ <template slot="option" slot-scope="props">
+ <img class="option__icon" :src="props.option.entity.icon">
+ <span class="option__title">{{ props.option.displayName }}</span>
+ </template>
+ </Multiselect>
</div>
</template>
<script>
- import { Multiselect } from 'nextcloud-vue'
- import { Entities, operationService } from '../services/Operation'
+import { Multiselect } from 'nextcloud-vue'
- export default {
- name: "Event",
- components: {
- Multiselect
+export default {
+ name: 'Event',
+ components: {
+ Multiselect
+ },
+ props: {
+ rule: {
+ type: Object,
+ required: true
+ }
+ },
+ computed: {
+ entity() {
+ return this.$store.getters.getEntityForOperation(this.operation)
},
- props: {
- rule: {
- type: Object,
- required: true
- }
+ operation() {
+ return this.$store.getters.getOperationForRule(this.rule)
},
- mounted() {
- this.updateEvent(this.currentEvent)
+ allEvents() {
+ return this.$store.getters.getEventsForOperation(this.operation)
},
- computed: {
- currentEvent() {
- if (!this.rule.event) {
- return this.allEvents.length > 0 ? this.allEvents[0] : null
- }
- return this.allEvents.find(event => event.entity === this.rule.entity && event.event === this.rule.event)
- },
- allEvents() {
- return this.operation.events.map((entityEventName) => {
- const parts = entityEventName.split('::')
- const entityId = parts[0]
- const eventName = parts[1]
- const Entity = Entities.find((entity) => entity.id === entityId)
- const Event = Entity.events.find((event) => event.eventName === eventName)
- return {
- entity: entityId,
- id: entityEventName,
- events: eventName,
- name: Event.displayName,
- icon: Entity.icon,
- checks: Entity.checks,
- }
- })
- },
- operation() {
- return operationService.get(this.rule.class)
- }
- },
- methods: {
- updateEvent(event) {
- if (this.rule.entity !== event.entity || this.rule.events !== '["' + event.event + '"]') {
- this.$set(this.rule, 'entity', event.entity)
- this.$set(this.rule, 'event', event.event)
- this.$emit('update', this.rule)
- }
+ currentEvent() {
+ if (!this.rule.events) {
+ return this.allEvents.length > 0 ? this.allEvents[0] : null
}
+ return this.allEvents.find(event => event.entity.id === this.rule.entity && this.rule.events.indexOf(event.eventName) !== -1)
+ }
+ },
+ methods: {
+ updateEvent(event) {
+ this.$set(this.rule, 'entity', event.entity.id)
+ this.$set(this.rule, 'events', [event.eventName])
+ this.$store.dispatch('updateRule', this.rule)
}
}
+}
</script>
<style scoped>
diff --git a/apps/workflowengine/src/components/Operation.vue b/apps/workflowengine/src/components/Operation.vue
index 30f26eb6ec4..1ee7a2e4c9d 100644
--- a/apps/workflowengine/src/components/Operation.vue
+++ b/apps/workflowengine/src/components/Operation.vue
@@ -1,34 +1,26 @@
<template>
- <div class="actions__item" :class="{'colored': !!color}" :style="{ backgroundColor: color }">
- <div class="icon" :class="icon"></div>
- <h3>{{ title }}</h3>
- <small>{{ description }}</small>
+ <div class="actions__item" :class="{'colored': colored}" :style="{ backgroundColor: colored ? operation.color : 'transparent' }">
+ <div class="icon" :class="operation.iconClass" :style="{ backgroundImage: operation.iconClass ? '' : `url(${operation.icon})` }" />
+ <h3>{{ operation.name }}</h3>
+ <small>{{ operation.description }}</small>
<slot />
</div>
</template>
<script>
- export default {
- name: "Operation",
- props: {
- icon: {
- type: String,
- required: true
- },
- title: {
- type: String,
- required: true
- },
- description: {
- type: String,
- required: true
- },
- color: {
- type: String,
- required: false
- },
+export default {
+ name: 'Operation',
+ props: {
+ operation: {
+ type: Object,
+ required: true
+ },
+ colored: {
+ type: Boolean,
+ default: true
}
}
+}
</script>
<style scoped lang="scss">
@@ -50,6 +42,7 @@
background-position: center center;
margin-top: 10px;
margin-bottom: 20px;
+ background-repeat: no-repeat;
}
h3, small {
padding: 6px;
diff --git a/apps/workflowengine/src/components/Operations/ConvertToPdf.vue b/apps/workflowengine/src/components/Operations/ConvertToPdf.vue
index 62c53a4ee6c..5fa1676e092 100644
--- a/apps/workflowengine/src/components/Operations/ConvertToPdf.vue
+++ b/apps/workflowengine/src/components/Operations/ConvertToPdf.vue
@@ -1,38 +1,39 @@
<template>
- <multiselect :options="options" track-by="id" label="text" v-model="value"></multiselect>
+ <Multiselect v-model="value" :options="options" track-by="id"
+ label="text" @input="$emit('input', value.id)" />
</template>
<script>
- const pdfConvertOptions = [
- {
- id: 'keep;preserve',
- text: t('workflow_pdf_converter', 'Keep original, preserve existing PDFs'),
- },
- {
- id: 'keep;overwrite',
- text: t('workflow_pdf_converter', 'Keep original, overwrite existing PDF'),
- },
- {
- id: 'delete;preserve',
- text: t('workflow_pdf_converter', 'Delete original, preserve existing PDFs'),
- },
- {
- id: 'delete;overwrite',
- text: t('workflow_pdf_converter', 'Delete original, overwrite existing PDF'),
- },
- ]
+import { Multiselect } from 'nextcloud-vue'
- import { Multiselect } from 'nextcloud-vue'
- export default {
- name: "ConvertToPdf",
- components: {Multiselect},
- data() {
- return {
- options: pdfConvertOptions,
- value: pdfConvertOptions[0]
- }
+const pdfConvertOptions = [
+ {
+ id: 'keep;preserve',
+ text: t('workflow_pdf_converter', 'Keep original, preserve existing PDFs')
+ },
+ {
+ id: 'keep;overwrite',
+ text: t('workflow_pdf_converter', 'Keep original, overwrite existing PDF')
+ },
+ {
+ id: 'delete;preserve',
+ text: t('workflow_pdf_converter', 'Delete original, preserve existing PDFs')
+ },
+ {
+ id: 'delete;overwrite',
+ text: t('workflow_pdf_converter', 'Delete original, overwrite existing PDF')
+ }
+]
+export default {
+ name: 'ConvertToPdf',
+ components: { Multiselect },
+ data() {
+ return {
+ options: pdfConvertOptions,
+ value: pdfConvertOptions[0]
}
}
+}
</script>
<style scoped>
@@ -42,4 +43,4 @@
margin: auto;
text-align: center;
}
-</style> \ No newline at end of file
+</style>
diff --git a/apps/workflowengine/src/components/Operations/Tag.vue b/apps/workflowengine/src/components/Operations/Tag.vue
index 74e4e4f977b..7a27e2b572d 100644
--- a/apps/workflowengine/src/components/Operations/Tag.vue
+++ b/apps/workflowengine/src/components/Operations/Tag.vue
@@ -1,22 +1,24 @@
<template>
- <multiselect :options="options" v-model="value" track-by="id" label="title" :multiple="true" :tagging="true" @input="$emit('input', value.map(item => item.id))"></multiselect>
+ <Multiselect v-model="value" :options="options" track-by="id"
+ label="title" :multiple="true" :tagging="true"
+ @input="$emit('input', value.map(item => item.id))" />
</template>
<script>
- // TODO: fetch tags from endpoint
- const tags = [{id: 3, title: 'foo'}, {id: 4, title: 'bar'}]
+// TODO: fetch tags from endpoint
+import { Multiselect } from 'nextcloud-vue'
- import { Multiselect } from 'nextcloud-vue'
- export default {
- name: "Tag",
- components: {Multiselect},
- data() {
- return {
- options: tags,
- value: null
- }
+const tags = [{ id: 3, title: 'foo' }, { id: 4, title: 'bar' }]
+export default {
+ name: 'Tag',
+ components: { Multiselect },
+ data() {
+ return {
+ options: tags,
+ value: null
}
}
+}
</script>
<style scoped>
@@ -26,4 +28,4 @@
margin: auto;
text-align: center;
}
-</style> \ No newline at end of file
+</style>
diff --git a/apps/workflowengine/src/components/Rule.vue b/apps/workflowengine/src/components/Rule.vue
index d1f5a088f51..8a446dd7ae9 100644
--- a/apps/workflowengine/src/components/Rule.vue
+++ b/apps/workflowengine/src/components/Rule.vue
@@ -4,143 +4,144 @@
<div class="trigger icon-confirm">
<p>
<span>{{ t('workflowengine', 'When') }}</span>
- <Event :rule="rule" @update="updateRule"></Event>
+ <Event :rule="rule" @update="updateRule" />
</p>
<p v-for="check in rule.checks">
<span>{{ t('workflowengine', 'and') }}</span>
- <Check :check="check" @update="updateRule" @remove="removeCheck(check)"></Check>
+ <Check :check="check" @update="updateRule" @remove="removeCheck(check)" />
</p>
<p>
- <span> </span>
- <input v-if="lastCheckComplete" type="button" class="check--add" @click="rule.checks.push({class: null, operator: null, value: null})" value="Add a new filter"/>
+ <span />
+ <input v-if="lastCheckComplete" type="button" class="check--add"
+ value="Add a new filter" @click="rule.checks.push({class: null, operator: null, value: null})">
</p>
</div>
<div class="action">
<div class="buttons">
<Actions>
- <ActionButton v-if="rule.id === -1" icon="icon-close" @click="$emit('cancel')">Cancel rule creation</ActionButton>
- <ActionButton v-else icon="icon-close" @click="deleteRule">Remove rule</ActionButton>
+ <ActionButton v-if="rule.id < -1" icon="icon-close" @click="cancelRule">
+ Cancel rule creation
+ </ActionButton>
+ <ActionButton v-else icon="icon-close" @click="deleteRule">
+ Remove rule
+ </ActionButton>
</Actions>
- <button class="status-button icon" :class="ruleStatus.class" v-tooltip="ruleStatus.tooltip" @click="saveRule">{{ ruleStatus.title }}</button>
+ <button v-tooltip="ruleStatus.tooltip" class="status-button icon" :class="ruleStatus.class"
+ @click="saveRule">
+ {{ ruleStatus.title }}
+ </button>
</div>
- <Operation :icon="operation.icon" :title="operation.title" :description="operation.description">
- <component v-if="operation.options" :is="operation.options" v-model="operation.operation" @input="updateOperation" />
+ <Operation :operation="operation" :colored="false">
+ <component :is="operation.options" v-if="operation.options" v-model="rule.operation"
+ @input="updateOperation" />
</Operation>
</div>
</div>
</template>
<script>
- import { Actions, ActionButton, Tooltip } from 'nextcloud-vue'
- import Event from './Event'
- import Check from './Check'
- import Operation from './Operation'
- import { operationService } from '../services/Operation'
- import axios from 'nextcloud-axios'
- import confirmPassword from 'nextcloud-password-confirmation'
- import {getApiUrl} from '../helpers/api';
+import { Actions, ActionButton, Tooltip } from 'nextcloud-vue'
+import Event from './Event'
+import Check from './Check'
+import Operation from './Operation'
+
+export default {
+ name: 'Rule',
+ components: {
+ Operation, Check, Event, Actions, ActionButton
+ },
+ directives: {
+ Tooltip
+ },
+ props: {
+ rule: {
+ type: Object,
+ required: true
+ }
+ },
+ data() {
+ return {
+ editing: false,
+ checks: [],
+ error: null,
+ dirty: this.rule.id < 0,
+ checking: false
+ }
+ },
+ computed: {
+ operation() {
+ return this.$store.getters.getOperationForRule(this.rule)
+ },
+ ruleStatus() {
+ if (this.error) {
+ return {
+ title: t('workflowengine', 'The configuration is invalid'),
+ class: 'icon-close-white invalid',
+ tooltip: { placement: 'bottom', show: true, content: this.error }
+ }
+ }
+ if (!this.dirty || this.checking) {
+ return { title: 'Active', class: 'icon icon-checkmark' }
+ }
+ return { title: 'Save', class: 'icon-confirm-white primary' }
- export default {
- name: 'Rule',
- components: {
- Operation, Check, Event, Actions, ActionButton
},
- directives: {
- Tooltip
+ lastCheckComplete() {
+ const lastCheck = this.rule.checks[this.rule.checks.length - 1]
+ return typeof lastCheck === 'undefined' || lastCheck.class !== null
+ }
+ },
+ methods: {
+ async updateOperation(operation) {
+ this.$set(this.rule, 'operation', operation)
+ await this.updateRule()
},
- props: {
- rule: {
- type: Object,
- required: true,
+ async updateRule() {
+ this.checking = true
+ if (!this.dirty) {
+ this.dirty = true
+ }
+ try {
+ // TODO: add new verify endpoint
+ // let result = await axios.post(OC.generateUrl(`/apps/workflowengine/operations/test`), this.rule)
+ this.error = null
+ this.checking = false
+ this.$store.dispatch('updateRule', this.rule)
+ } catch (e) {
+ console.error('Failed to update operation', e)
+ this.error = e.response.ocs.meta.message
+ this.checking = false
}
},
- data () {
- return {
- editing: false,
- operationService,
- checks: [],
- error: null,
- dirty: this.rule.id === -1,
- checking: false
+ async saveRule() {
+ try {
+ await this.$store.dispatch('pushUpdateRule', this.rule)
+ this.dirty = false
+ this.error = null
+ } catch (e) {
+ console.error('Failed to save operation')
+ this.error = e.response.data.ocs.meta.message
}
},
- computed: {
- operation() {
- return this.operationService.get(this.rule.class)
- },
- ruleStatus() {
- if (this.error) {
- return { title: 'Invalid', class: 'icon-close-white invalid', tooltip: { placement: 'bottom', show: true, content: escapeHTML(this.error) } }
- }
- if (!this.dirty || this.checking) {
- return { title: 'Active', class: 'icon icon-checkmark' }
- }
- return { title: 'Save', class: 'icon-confirm-white primary' }
-
-
- },
- lastCheckComplete() {
- const lastCheck = this.rule.checks[this.rule.checks.length-1]
- return typeof lastCheck === 'undefined' || lastCheck.class !== null
+ async deleteRule() {
+ try {
+ await this.$store.dispatch('deleteRule', this.rule)
+ } catch (e) {
+ console.error('Failed to delete operation')
+ this.error = e.response.data.ocs.meta.message
}
},
- methods: {
- updateOperation(operation) {
- this.$set(this.rule, 'operation', operation)
- },
- async updateRule() {
- this.checking = true
- if (!this.dirty) {
- this.dirty = true
- }
- try {
- // TODO: add new verify endpoint
- //let result = await axios.post(OC.generateUrl(`/apps/workflowengine/operations/test`), this.rule)
- this.error = null
- this.checking = false
- } catch (e) {
- console.error('Failed to update operation', e)
- this.error = e.response.ocs.meta.message
- this.checking = false
- }
- },
- async saveRule() {
- try {
- await confirmPassword()
- let result
- if (this.rule.id === -1) {
- result = await axios.post(getApiUrl(''), {...this.rule, events: [this.rule.event]})
- this.rule.id = result.data.ocs.data.id
- } else {
- result = await axios.put(getApiUrl(`/${this.rule.id}`), {...this.rule, events: [this.rule.event]})
- }
- this.$emit('update', this.rule)
- this.dirty = false
- this.error = null
- } catch (e) {
- console.log(e.response.data.ocs.meta.message)
- console.error('Failed to update operation', e)
- this.error = e.response.data.ocs.meta.message
- }
- },
- async deleteRule() {
- try {
- await confirmPassword()
- await axios.delete(getApiUrl(`/${this.rule.id}`))
- this.$emit('delete')
- } catch (e) {
- console.error('Failed to delete operation')
- this.error = e.response
- }
- },
- removeCheck(check) {
- const index = this.rule.checks.findIndex(item => item === check)
- if (index !== -1) {
- this.rule.checks.splice(index, 1)
- }
+ cancelRule() {
+ this.$store.dispatch('removeRule', this.rule)
+ },
+ removeCheck(check) {
+ const index = this.rule.checks.findIndex(item => item === check)
+ if (index < 0) {
+ this.rule.checks.splice(index, 1)
}
}
}
+}
</script>
<style scoped lang="scss">
@@ -162,6 +163,7 @@
.status-button.invalid {
background-color: var(--color-warning);
color: #fff;
+ border: none;
}
.rule {
diff --git a/apps/workflowengine/src/components/Values/FileMimeType.vue b/apps/workflowengine/src/components/Values/FileMimeType.vue
index 70b8f0d984b..9913dc1e858 100644
--- a/apps/workflowengine/src/components/Values/FileMimeType.vue
+++ b/apps/workflowengine/src/components/Values/FileMimeType.vue
@@ -1,39 +1,39 @@
<template>
- <input type="text" />
+ <input type="text">
</template>
<script>
- import { Multiselect } from 'nextcloud-vue'
+import { Multiselect } from 'nextcloud-vue'
- export default {
- name: 'SizeValue',
- components: {
- Multiselect
- },
- data() {
- return {
- predefinedTypes: [
- {
- icon: 'icon-picture',
- label: 'Images',
- pattern: '/image\\/.*/'
- },
- {
- icon: 'icon-category-office',
- label: 'Office documents',
- pattern: '/(vnd\\.(ms-|openxmlformats-).*))$/'
- },
- {
- icon: 'icon-filetype-file',
- label: 'PDF documents',
- pattern: 'application/pdf'
- }
- ]
- }
+export default {
+ name: 'SizeValue',
+ components: {
+ Multiselect
+ },
+ data() {
+ return {
+ predefinedTypes: [
+ {
+ icon: 'icon-picture',
+ label: 'Images',
+ pattern: '/image\\/.*/'
+ },
+ {
+ icon: 'icon-category-office',
+ label: 'Office documents',
+ pattern: '/(vnd\\.(ms-|openxmlformats-).*))$/'
+ },
+ {
+ icon: 'icon-filetype-file',
+ label: 'PDF documents',
+ pattern: 'application/pdf'
+ }
+ ]
}
}
+}
</script>
<style scoped>
-</style> \ No newline at end of file
+</style>
diff --git a/apps/workflowengine/src/components/Values/SizeValue.vue b/apps/workflowengine/src/components/Values/SizeValue.vue
index bc4378702e1..03b28f18947 100644
--- a/apps/workflowengine/src/components/Values/SizeValue.vue
+++ b/apps/workflowengine/src/components/Values/SizeValue.vue
@@ -1,28 +1,29 @@
<template>
- <input type="text" placeholder="1 MB" @input="$emit('input', newValue)" v-model="newValue">
+ <input v-model="newValue" type="text" placeholder="1 MB"
+ @input="$emit('input', newValue)">
</template>
<script>
- export default {
- name: "SizeValue",
- props: {
- value: {
- type: String
- }
- },
- data() {
- return {
- newValue: this.value
- }
- },
- watch: {
- value() {
- this.newValue = this.value
- }
+export default {
+ name: 'SizeValue',
+ props: {
+ value: {
+ type: String
+ }
+ },
+ data() {
+ return {
+ newValue: this.value
+ }
+ },
+ watch: {
+ value() {
+ this.newValue = this.value
}
}
+}
</script>
<style scoped>
-</style> \ No newline at end of file
+</style>
diff --git a/apps/workflowengine/src/components/Workflow.vue b/apps/workflowengine/src/components/Workflow.vue
index 0525722666e..986b6f5197c 100644
--- a/apps/workflowengine/src/components/Workflow.vue
+++ b/apps/workflowengine/src/components/Workflow.vue
@@ -4,93 +4,68 @@
<h2>{{ t('workflowengine', 'Workflows') }}</h2>
<transition-group name="slide" tag="div" class="actions">
- <Operation v-for="operation in getMainOperations" :key="operation.class"
- :icon="operation.icon" :title="operation.title" :description="operation.description" :color="operation.color"
- @click.native="createNewRule(operation)"></Operation>
+ <Operation v-for="operation in getMainOperations" :key="operation.id" :operation="operation"
+ @click.native="createNewRule(operation)" />
</transition-group>
- <div class="actions__more" v-if="hasMoreOperations">
+ <div v-if="hasMoreOperations" class="actions__more">
<button class="icon" :class="showMoreOperations ? 'icon-triangle-n' : 'icon-triangle-s'"
- @click="showMoreOperations=!showMoreOperations">
+ @click="showMoreOperations=!showMoreOperations">
{{ showMoreOperations ? t('workflowengine', 'Show less') : t('workflowengine', 'Show more') }}
</button>
</div>
</div>
- <transition-group name="slide" v-if="rules.length > 0">
- <Rule v-for="rule in rules" :key="rule.id" :rule="rule" @delete="removeRule(rule)" @cancel="removeRule(rule)" @update="updateRule"></Rule>
+ <transition-group v-if="rules.length > 0" name="slide">
+ <Rule v-for="rule in rules" :key="rule.id" :rule="rule" />
</transition-group>
-
</div>
</template>
<script>
- import Rule from './Rule'
- import Operation from './Operation'
- import { operationService } from '../services/Operation'
- import axios from 'nextcloud-axios'
- import { getApiUrl } from '../helpers/api';
-
- const ACTION_LIMIT = 3
-
- export default {
- name: 'Workflow',
- components: {
- Operation,
- Rule
- },
- async mounted() {
- const { data } = await axios.get(getApiUrl(''))
- this.rules = Object.values(data.ocs.data).flat()
- },
- data() {
- return {
- scope: OCP.InitialState.loadState('workflowengine', 'scope'),
- operations: operationService,
- showMoreOperations: false,
- rules: []
- }
- },
- computed: {
- hasMoreOperations() {
- return Object.keys(this.operations.getAll()).length > ACTION_LIMIT
- },
- getMainOperations() {
- if (this.showMoreOperations) {
- return Object.values(this.operations.getAll())
- }
- return Object.values(this.operations.getAll()).slice(0, ACTION_LIMIT)
- },
- getMoreOperations() {
- return Object.values(this.operations.getAll()).slice(ACTION_LIMIT)
-
- }
+import Rule from './Rule'
+import Operation from './Operation'
+import { mapGetters, mapState } from 'vuex'
+
+const ACTION_LIMIT = 3
+
+export default {
+ name: 'Workflow',
+ components: {
+ Operation,
+ Rule
+ },
+ data() {
+ return {
+ showMoreOperations: false
+ }
+ },
+ computed: {
+ ...mapGetters({
+ rules: 'getRules'
+ }),
+ ...mapState({
+ operations: 'operations'
+ }),
+ hasMoreOperations() {
+ return Object.keys(this.operations).length > ACTION_LIMIT
},
- methods: {
- updateRule(rule) {
- let index = this.rules.findIndex((item) => rule === item)
- this.$set(this.rules, index, rule)
- },
- removeRule(rule) {
- let index = this.rules.findIndex((item) => rule === item)
- this.rules.splice(index, 1)
- },
- showAllOperations() {
-
- },
- createNewRule(operation) {
- this.rules.unshift({
- id: -1,
- class: operation.class,
- entity: undefined,
- event: undefined,
- name: '', // unused in the new ui, there for legacy reasons
- checks: [],
- operation: operation.operation || ''
- })
+ getMainOperations() {
+ if (this.showMoreOperations) {
+ return Object.values(this.operations)
}
+ return Object.values(this.operations).slice(0, ACTION_LIMIT)
+ }
+ },
+ mounted() {
+ this.$store.dispatch('fetchRules')
+ },
+ methods: {
+ createNewRule(operation) {
+ this.$store.dispatch('createNewRule', operation)
}
}
+}
</script>
<style scoped lang="scss">
@@ -119,7 +94,6 @@
background-position: 10px center;
}
-
.slide-enter-active {
-moz-transition-duration: 0.3s;
-webkit-transition-duration: 0.3s;
diff --git a/apps/workflowengine/src/hbs_helpers/getOperators.js b/apps/workflowengine/src/hbs_helpers/getOperators.js
deleted file mode 100644
index 4e3606fe82c..00000000000
--- a/apps/workflowengine/src/hbs_helpers/getOperators.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = function(classname) {
- var check = OCA.WorkflowEngine.getCheckByClass(classname);
- if (!_.isUndefined(check)) {
- return check['operators'];
- }
- return [];
-}
diff --git a/apps/workflowengine/src/hbs_helpers/selectItem.js b/apps/workflowengine/src/hbs_helpers/selectItem.js
deleted file mode 100644
index 594e3debadd..00000000000
--- a/apps/workflowengine/src/hbs_helpers/selectItem.js
+++ /dev/null
@@ -1,7 +0,0 @@
-module.exports = function(currentValue, itemValue) {
- if (currentValue === itemValue) {
- return 'selected="selected"';
- }
-
- return "";
-}
diff --git a/apps/workflowengine/src/filemimetypeplugin.js b/apps/workflowengine/src/legacy/filemimetypeplugin.js
index 6b929b2aad5..2b29c4fcbb8 100644
--- a/apps/workflowengine/src/filemimetypeplugin.js
+++ b/apps/workflowengine/src/legacy/filemimetypeplugin.js
@@ -17,61 +17,61 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-import FileMimeType from './components/Values/FileMimeType'
+import FileMimeType from './../components/Values/FileMimeType'
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.FileMimeTypePlugin = {
getCheck: function() {
return {
- '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')}
+ 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') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileMimeType') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\FileMimeType') {
+ return
}
- var placeholder = 'text/plain';
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- placeholder = '/^text\\/(plain|html)$/i';
+ var placeholder = 'text/plain'
+ if (check.operator === 'matches' || check.operator === '!matches') {
+ placeholder = '/^text\\/(plain|html)$/i'
- if (this._validateRegex(check['value'])) {
- $(element).removeClass('invalid-input');
+ if (this._validateRegex(check.value)) {
+ $(element).removeClass('invalid-input')
} else {
- $(element).addClass('invalid-input');
+ $(element).addClass('invalid-input')
}
}
$(element).css('width', '250px')
.attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: placeholder }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
- });
+ })
},
_validateRegex: function(string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
+ var regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ var result = regexRegex.exec(string)
+ return result !== null
},
- component: function () {
+ component: function() {
return FileMimeType
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileMimeTypePlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileMimeTypePlugin)
diff --git a/apps/workflowengine/src/filenameplugin.js b/apps/workflowengine/src/legacy/filenameplugin.js
index 7d8018c29cd..637e08ccbea 100644
--- a/apps/workflowengine/src/filenameplugin.js
+++ b/apps/workflowengine/src/legacy/filenameplugin.js
@@ -18,61 +18,61 @@
*
*/
-(function () {
+(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.FileNamePlugin = {
- getCheck: function () {
+ getCheck: function() {
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\FileName',
- 'name': t('workflowengine', 'File name'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is')},
- {'operator': '!is', 'name': t('workflowengine', 'is not')},
+ class: 'OCA\\WorkflowEngine\\Check\\FileName',
+ name: t('workflowengine', 'File name'),
+ 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', 'matches')
},
{
- 'operator': '!matches',
- 'name': t('workflowengine', 'does not match')
+ operator: '!matches',
+ name: t('workflowengine', 'does not match')
}
]
- };
+ }
},
- render: function (element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileName') {
- return;
+ render: function(element, check) {
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\FileName') {
+ return
}
- var placeholder = 'dummy.jpg';
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- placeholder = '/^dummy-.+$/i';
+ var placeholder = 'dummy.jpg'
+ if (check.operator === 'matches' || check.operator === '!matches') {
+ placeholder = '/^dummy-.+$/i'
- if (this._validateRegex(check['value'])) {
- $(element).removeClass('invalid-input');
+ if (this._validateRegex(check.value)) {
+ $(element).removeClass('invalid-input')
} else {
- $(element).addClass('invalid-input');
+ $(element).addClass('invalid-input')
}
}
$(element).css('width', '250px')
.attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: placeholder }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
- });
+ })
},
- _validateRegex: function (string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
+ _validateRegex: function(string) {
+ var regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ var result = regexRegex.exec(string)
+ return result !== null
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileNamePlugin); \ No newline at end of file
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileNamePlugin)
diff --git a/apps/workflowengine/src/filesizeplugin.js b/apps/workflowengine/src/legacy/filesizeplugin.js
index ebd72dcd2f4..fcb81bd3397 100644
--- a/apps/workflowengine/src/filesizeplugin.js
+++ b/apps/workflowengine/src/legacy/filesizeplugin.js
@@ -17,43 +17,43 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
-import SizeValue from './components/Values/SizeValue'
+import SizeValue from './../components/Values/SizeValue'
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.FileSizePlugin = {
getCheck: function() {
return {
- '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')}
+ 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') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileSize') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\FileSize') {
+ return
}
- var placeholder = '12 MB'; // Do not translate!!!
+ var placeholder = '12 MB' // Do not translate!!!
$(element).css('width', '250px')
.attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: placeholder }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
- });
+ })
},
- component: function () {
+ component: function() {
return SizeValue
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSizePlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSizePlugin)
diff --git a/apps/workflowengine/src/filesystemtagsplugin.js b/apps/workflowengine/src/legacy/filesystemtagsplugin.js
index e66a35b73b9..e945c79195c 100644
--- a/apps/workflowengine/src/filesystemtagsplugin.js
+++ b/apps/workflowengine/src/legacy/filesystemtagsplugin.js
@@ -20,28 +20,28 @@
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin = {
getCheck: function() {
- this.collection = OC.SystemTags.collection;
+ this.collection = OC.SystemTags.collection
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\FileSystemTags',
- 'name': t('workflowengine', 'File system tag'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is tagged with')},
- {'operator': '!is', 'name': t('workflowengine', 'is not tagged with')}
+ class: 'OCA\\WorkflowEngine\\Check\\FileSystemTags',
+ name: t('workflowengine', 'File system tag'),
+ operators: [
+ { operator: 'is', name: t('workflowengine', 'is tagged with') },
+ { operator: '!is', name: t('workflowengine', 'is not tagged with') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\FileSystemTags') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\FileSystemTags') {
+ return
}
- $(element).css('width', '400px');
+ $(element).css('width', '400px')
$(element).select2({
allowClear: false,
@@ -50,29 +50,29 @@
query: _.debounce(function(query) {
query.callback({
results: OC.SystemTags.collection.filterByName(query.term)
- });
+ })
}, 100, true),
id: function(element) {
- return element.get('id');
+ return element.get('id')
},
initSelection: function(element, callback) {
- callback($(element).val());
+ callback($(element).val())
},
- formatResult: function (tag) {
- return OC.SystemTags.getDescriptiveTag(tag);
+ formatResult: function(tag) {
+ return OC.SystemTags.getDescriptiveTag(tag)
},
- formatSelection: function (tagId) {
- var tag = OC.SystemTags.collection.get(tagId);
+ formatSelection: function(tagId) {
+ var tag = OC.SystemTags.collection.get(tagId)
if (!_.isUndefined(tag)) {
- return OC.SystemTags.getDescriptiveTag(tag);
+ return OC.SystemTags.getDescriptiveTag(tag)
}
},
escapeMarkup: function(m) {
- return m;
+ return m
}
- });
+ })
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.FileSystemTagsPlugin)
diff --git a/apps/workflowengine/src/requestremoteaddressplugin.js b/apps/workflowengine/src/legacy/requestremoteaddressplugin.js
index a66d6f51f0f..b6f7d02dd46 100644
--- a/apps/workflowengine/src/requestremoteaddressplugin.js
+++ b/apps/workflowengine/src/legacy/requestremoteaddressplugin.js
@@ -20,64 +20,64 @@
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin = {
getCheck: function() {
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress',
- 'name': t('workflowengine', 'Request remote address'),
- 'operators': [
- {'operator': 'matchesIPv4', 'name': t('workflowengine', 'matches IPv4')},
- {'operator': '!matchesIPv4', 'name': t('workflowengine', 'does not match IPv4')},
- {'operator': 'matchesIPv6', 'name': t('workflowengine', 'matches IPv6')},
- {'operator': '!matchesIPv6', 'name': t('workflowengine', 'does not match IPv6')}
+ class: 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress',
+ name: t('workflowengine', 'Request remote address'),
+ operators: [
+ { operator: 'matchesIPv4', name: t('workflowengine', 'matches IPv4') },
+ { operator: '!matchesIPv4', name: t('workflowengine', 'does not match IPv4') },
+ { operator: 'matchesIPv6', name: t('workflowengine', 'matches IPv6') },
+ { operator: '!matchesIPv6', name: t('workflowengine', 'does not match IPv6') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\RequestRemoteAddress') {
+ return
}
- var placeholder = '127.0.0.1/32'; // Do not translate!!!
- if (check['operator'] === 'matchesIPv6' || check['operator'] === '!matchesIPv6') {
- placeholder = '::1/128'; // Do not translate!!!
- if (this._validateIPv6(check['value'])) {
- $(element).removeClass('invalid-input');
+ var placeholder = '127.0.0.1/32' // Do not translate!!!
+ if (check.operator === 'matchesIPv6' || check.operator === '!matchesIPv6') {
+ placeholder = '::1/128' // Do not translate!!!
+ if (this._validateIPv6(check.value)) {
+ $(element).removeClass('invalid-input')
} else {
- $(element).addClass('invalid-input');
+ $(element).addClass('invalid-input')
}
} else {
- if (this._validateIPv4(check['value'])) {
- $(element).removeClass('invalid-input');
+ if (this._validateIPv4(check.value)) {
+ $(element).removeClass('invalid-input')
} else {
- $(element).addClass('invalid-input');
+ $(element).addClass('invalid-input')
}
}
$(element).css('width', '300px')
.attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: placeholder }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
- });
+ })
},
_validateIPv4: function(string) {
- var regexRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/,
- result = regexRegex.exec(string);
- return result !== null;
+ var regexRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(3[0-2]|[1-2][0-9]|[1-9])$/
+ var result = regexRegex.exec(string)
+ return result !== null
},
_validateIPv6: function(string) {
- var regexRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/,
- result = regexRegex.exec(string);
- return result !== null;
+ var regexRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(1([01][0-9]|2[0-8])|[1-9][0-9]|[0-9])$/
+ var result = regexRegex.exec(string)
+ return result !== null
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestRemoteAddressPlugin)
diff --git a/apps/workflowengine/src/requesttimeplugin.js b/apps/workflowengine/src/legacy/requesttimeplugin.js
index 111b2bb7437..eaeae287da4 100644
--- a/apps/workflowengine/src/requesttimeplugin.js
+++ b/apps/workflowengine/src/legacy/requesttimeplugin.js
@@ -20,81 +20,81 @@
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.RequestTimePlugin = {
timezones: [
- "Europe/Berlin",
- "Europe/London"
+ 'Europe/Berlin',
+ 'Europe/London'
],
_$element: null,
getCheck: function() {
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestTime',
- 'name': t('workflowengine', 'Request time'),
- 'operators': [
- {'operator': 'in', 'name': t('workflowengine', 'between')},
- {'operator': '!in', 'name': t('workflowengine', 'not between')}
+ class: 'OCA\\WorkflowEngine\\Check\\RequestTime',
+ name: t('workflowengine', 'Request time'),
+ operators: [
+ { operator: 'in', name: t('workflowengine', 'between') },
+ { operator: '!in', name: t('workflowengine', 'not between') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestTime') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\RequestTime') {
+ return
}
- var startTime = '09:00',
- endTime = '18:00',
- timezone = jstz.determine().name(),
- $element = $(element);
+ var startTime = '09:00'
+ var endTime = '18:00'
+ var timezone = jstz.determine().name()
+ var $element = $(element)
- if (_.isString(check['value']) && check['value'] !== '') {
- var value = JSON.parse(check['value']),
- splittedStart = value[0].split(' ', 2),
- splittedEnd = value[1].split(' ', 2);
+ if (_.isString(check.value) && check.value !== '') {
+ var value = JSON.parse(check.value)
+ var splittedStart = value[0].split(' ', 2)
+ var splittedEnd = value[1].split(' ', 2)
- startTime = splittedStart[0];
- endTime = splittedEnd[0];
- timezone = splittedStart[1];
+ startTime = splittedStart[0]
+ endTime = splittedEnd[0]
+ timezone = splittedStart[1]
}
- var valueJSON = JSON.stringify([startTime + ' ' + timezone, endTime + ' ' + timezone]);
- if (check['value'] !== valueJSON) {
- check['value'] = valueJSON;
- $element.val(valueJSON);
+ var valueJSON = JSON.stringify([startTime + ' ' + timezone, endTime + ' ' + timezone])
+ if (check.value !== valueJSON) {
+ check.value = valueJSON
+ $element.val(valueJSON)
}
- $element.css('display', 'none');
+ $element.css('display', 'none')
$('<input>')
.attr('type', 'text')
.attr('placeholder', t('workflowengine', 'Start'))
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: '16:00'}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: '16:00' }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
})
.addClass('start')
.val(startTime)
- .insertBefore($element);
+ .insertBefore($element)
$('<input>')
.attr('type', 'text')
.attr('placeholder', t('workflowengine', 'End'))
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: '16:00'}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: '16:00' }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
})
.addClass('end')
.val(endTime)
- .insertBefore($element);
+ .insertBefore($element)
var timezoneInput = $('<input>')
.attr('type', 'hidden')
.css('width', '250px')
.insertBefore($element)
- .val(timezone);
+ .val(timezone)
timezoneInput.select2({
allowClear: false,
@@ -104,93 +104,93 @@
url: OC.generateUrl('apps/workflowengine/timezones'),
dataType: 'json',
quietMillis: 100,
- data: function (term) {
+ data: function(term) {
if (term === '') {
// Default search in the same continent...
- term = jstz.determine().name().split('/');
- term = term[0];
+ term = jstz.determine().name().split('/')
+ term = term[0]
}
return {
search: term
- };
+ }
},
- results: function (response) {
- var results = [];
+ results: function(response) {
+ var results = []
$.each(response, function(timezone) {
- results.push({ id: timezone });
- });
+ results.push({ id: timezone })
+ })
return {
results: results,
more: false
- };
+ }
}
},
- initSelection: function (element, callback) {
- callback(element.val());
+ initSelection: function(element, callback) {
+ callback(element.val())
},
- formatResult: function (element) {
- return '<span>' + element.id + '</span>';
+ formatResult: function(element) {
+ return '<span>' + element.id + '</span>'
},
- formatSelection: function (element) {
+ formatSelection: function(element) {
if (!_.isUndefined(element.id)) {
- element = element.id;
+ element = element.id
}
- return '<span>' + element + '</span>';
+ return '<span>' + element + '</span>'
}
- });
+ })
// Has to be added after select2 for `event.target.classList`
- timezoneInput.addClass('timezone');
+ timezoneInput.addClass('timezone')
$element.parent()
.on('change', '.start', _.bind(this.update, this))
.on('change', '.end', _.bind(this.update, this))
- .on('change', '.timezone', _.bind(this.update, this));
+ .on('change', '.timezone', _.bind(this.update, this))
- this._$element = $element;
+ this._$element = $element
},
update: function(event) {
- var value = event.target.value,
- key = null;
+ var value = event.target.value
+ var key = null
for (var i = 0; i < event.target.classList.length; i++) {
- key = event.target.classList[i];
+ key = event.target.classList[i]
}
if (key === null) {
- console.warn('update triggered but element doesn\'t have any class');
- return;
+ console.warn('update triggered but element doesn\'t have any class')
+ return
}
- var data = JSON.parse(this._$element.val()),
- startTime = moment(data[0].split(' ', 2)[0], 'H:m Z'),
- endTime = moment(data[1].split(' ', 2)[0], 'H:m Z'),
- timezone = data[0].split(' ', 2)[1];
+ var data = JSON.parse(this._$element.val())
+ var startTime = moment(data[0].split(' ', 2)[0], 'H:m Z')
+ var endTime = moment(data[1].split(' ', 2)[0], 'H:m Z')
+ var timezone = data[0].split(' ', 2)[1]
if (key === 'start' || key === 'end') {
- var parsedDate = moment(value, ['H:m', 'h:m a'], true).format('HH:mm');
+ var parsedDate = moment(value, ['H:m', 'h:m a'], true).format('HH:mm')
if (parsedDate === 'Invalid date') {
- return;
+ return
}
- var indexValue = 0;
+ var indexValue = 0
if (key === 'end') {
- indexValue = 1;
+ indexValue = 1
}
- data[indexValue] = parsedDate + ' ' + timezone;
+ data[indexValue] = parsedDate + ' ' + timezone
}
if (key === 'timezone') {
- data[0] = startTime.format('HH:mm') + ' ' + value;
- data[1] = endTime.format('HH:mm') + ' ' + value;
+ data[0] = startTime.format('HH:mm') + ' ' + value
+ data[1] = endTime.format('HH:mm') + ' ' + value
}
- this._$element.val(JSON.stringify(data));
- this._$element.trigger('change');
+ this._$element.val(JSON.stringify(data))
+ this._$element.trigger('change')
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestTimePlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestTimePlugin)
diff --git a/apps/workflowengine/src/requesturlplugin.js b/apps/workflowengine/src/legacy/requesturlplugin.js
index 7c81deaaf33..7e13422387f 100644
--- a/apps/workflowengine/src/requesturlplugin.js
+++ b/apps/workflowengine/src/legacy/requesturlplugin.js
@@ -20,98 +20,97 @@
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.RequestURLPlugin = {
predefinedValues: ['webdav'],
getCheck: function() {
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestURL',
- 'name': t('workflowengine', 'Request URL'),
- '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')}
+ class: 'OCA\\WorkflowEngine\\Check\\RequestURL',
+ name: t('workflowengine', 'Request URL'),
+ 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') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestURL') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\RequestURL') {
+ return
}
- var placeholder = 'https://localhost/index.php';
+ var placeholder = 'https://localhost/index.php'
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- placeholder = '/^https\\:\\/\\/localhost\\/index\\.php$/i';
+ if (check.operator === 'matches' || check.operator === '!matches') {
+ placeholder = '/^https\\:\\/\\/localhost\\/index\\.php$/i'
}
$(element).css('width', '250px')
.attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: placeholder }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
- });
+ })
- if (check['operator'] === 'matches' || check['operator'] === '!matches') {
- if (this._validateRegex(check['value'])) {
- $(element).removeClass('invalid-input');
+ if (check.operator === 'matches' || check.operator === '!matches') {
+ if (this._validateRegex(check.value)) {
+ $(element).removeClass('invalid-input')
} else {
- $(element).addClass('invalid-input');
+ $(element).addClass('invalid-input')
}
} else {
- var self = this,
- data = [
+ var self = this
+ var data = [
{
text: t('workflowengine', 'Predefined URLs'),
children: [
- {id: 'webdav', text: t('workflowengine', 'Files WebDAV')}
+ { id: 'webdav', text: t('workflowengine', 'Files WebDAV') }
]
}
- ];
- if (this.predefinedValues.indexOf(check['value']) === -1) {
+ ]
+ if (this.predefinedValues.indexOf(check.value) === -1) {
data.unshift({
- id: check['value'],
- text: check['value']
+ id: check.value,
+ text: check.value
})
}
-
$(element).select2({
data: data,
createSearchChoice: function(term) {
- if (self.predefinedValues.indexOf(check['value']) === -1) {
+ if (self.predefinedValues.indexOf(check.value) === -1) {
return {
id: term,
text: term
- };
+ }
}
},
id: function(element) {
- return element.id;
+ return element.id
},
- formatResult: function (tag) {
- return tag.text;
+ formatResult: function(tag) {
+ return tag.text
},
- formatSelection: function (tag) {
- return tag.text;
+ formatSelection: function(tag) {
+ return tag.text
},
escapeMarkup: function(m) {
- return m;
+ return m
}
})
}
},
_validateRegex: function(string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
+ var regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ var result = regexRegex.exec(string)
+ return result !== null
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestURLPlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestURLPlugin)
diff --git a/apps/workflowengine/src/requestuseragentplugin.js b/apps/workflowengine/src/legacy/requestuseragentplugin.js
index 881ea4b8ac7..5480e4ccc8b 100644
--- a/apps/workflowengine/src/requestuseragentplugin.js
+++ b/apps/workflowengine/src/legacy/requestuseragentplugin.js
@@ -20,66 +20,66 @@
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin = {
predefinedValues: ['android', 'ios', 'desktop'],
getCheck: function() {
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\RequestUserAgent',
- 'name': t('workflowengine', 'Request user agent'),
- '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')}
+ class: 'OCA\\WorkflowEngine\\Check\\RequestUserAgent',
+ name: t('workflowengine', 'Request user agent'),
+ 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') }
]
- };
+ }
},
render: function(element, check) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\RequestUserAgent') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\RequestUserAgent') {
+ return
}
- var placeholder = 'Mozilla/5.0 User Agent';
+ var placeholder = 'Mozilla/5.0 User Agent'
if (check.operator === 'matches' || check.operator === '!matches') {
- placeholder = '/^Mozilla\\/5\\.0 (.*)$/i';
+ placeholder = '/^Mozilla\\/5\\.0 (.*)$/i'
}
$(element).css('width', '250px')
.attr('placeholder', placeholder)
- .attr('title', t('workflowengine', 'Example: {placeholder}', {placeholder: placeholder}))
+ .attr('title', t('workflowengine', 'Example: {placeholder}', { placeholder: placeholder }))
.addClass('has-tooltip')
.tooltip({
placement: 'bottom'
- });
+ })
if (check.operator === 'matches' || check.operator === '!matches') {
if (this._validateRegex(check.value)) {
- $(element).removeClass('invalid-input');
+ $(element).removeClass('invalid-input')
} else {
- $(element).addClass('invalid-input');
+ $(element).addClass('invalid-input')
}
} else {
- var self = this,
- data = [
+ var self = this
+ var data = [
{
text: t('workflowengine', 'Sync clients'),
children: [
- {id: 'android', text: t('workflowengine', 'Android client')},
- {id: 'ios', text: t('workflowengine', 'iOS client')},
- {id: 'desktop', text: t('workflowengine', 'Desktop client')},
- {id: 'mail', text: t('workflowengine', 'Thunderbird & Outlook addons')}
+ { id: 'android', text: t('workflowengine', 'Android client') },
+ { id: 'ios', text: t('workflowengine', 'iOS client') },
+ { id: 'desktop', text: t('workflowengine', 'Desktop client') },
+ { id: 'mail', text: t('workflowengine', 'Thunderbird & Outlook addons') }
]
}
- ];
+ ]
if (this.predefinedValues.indexOf(check.value) === -1) {
data.unshift({
id: check.value,
text: check.value
- });
+ })
}
$(element).select2({
@@ -89,31 +89,31 @@
return {
id: term,
text: term
- };
+ }
}
},
id: function(element) {
- return element.id;
+ return element.id
},
- formatResult: function (tag) {
- return tag.text;
+ formatResult: function(tag) {
+ return tag.text
},
- formatSelection: function (tag) {
- return tag.text;
+ formatSelection: function(tag) {
+ return tag.text
},
escapeMarkup: function(m) {
- return m;
+ return m
}
})
}
},
_validateRegex: function(string) {
- var regexRegex = /^\/(.*)\/([gui]{0,3})$/,
- result = regexRegex.exec(string);
- return result !== null;
+ var regexRegex = /^\/(.*)\/([gui]{0,3})$/
+ var result = regexRegex.exec(string)
+ return result !== null
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.RequestUserAgentPlugin)
diff --git a/apps/workflowengine/src/usergroupmembershipplugin.js b/apps/workflowengine/src/legacy/usergroupmembershipplugin.js
index 53f35fedf2d..6d60e9e4d66 100644
--- a/apps/workflowengine/src/usergroupmembershipplugin.js
+++ b/apps/workflowengine/src/legacy/usergroupmembershipplugin.js
@@ -20,56 +20,56 @@
(function() {
- OCA.WorkflowEngine = OCA.WorkflowEngine || {};
- OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {};
+ OCA.WorkflowEngine = OCA.WorkflowEngine || {}
+ OCA.WorkflowEngine.Plugins = OCA.WorkflowEngine.Plugins || {}
OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin = {
getCheck: function() {
return {
- 'class': 'OCA\\WorkflowEngine\\Check\\UserGroupMembership',
- 'name': t('workflowengine', 'User group membership'),
- 'operators': [
- {'operator': 'is', 'name': t('workflowengine', 'is member of')},
- {'operator': '!is', 'name': t('workflowengine', 'is not member of')}
+ class: 'OCA\\WorkflowEngine\\Check\\UserGroupMembership',
+ name: t('workflowengine', 'User group membership'),
+ operators: [
+ { operator: 'is', name: t('workflowengine', 'is member of') },
+ { operator: '!is', name: t('workflowengine', 'is not member of') }
]
- };
+ }
},
render: function(element, check, groups) {
- if (check['class'] !== 'OCA\\WorkflowEngine\\Check\\UserGroupMembership') {
- return;
+ if (check.class !== 'OCA\\WorkflowEngine\\Check\\UserGroupMembership') {
+ return
}
- $(element).css('width', '400px');
+ $(element).css('width', '400px')
$(element).select2({
data: { results: groups, text: 'displayname' },
- initSelection: function (element, callback) {
- var groupId = element.val();
+ initSelection: function(element, callback) {
+ var groupId = element.val()
if (groupId && groups.length > 0) {
callback({
id: groupId,
- displayname: groups.find(function (group) {
- return group.id === groupId;
+ displayname: groups.find(function(group) {
+ return group.id === groupId
}).displayname
- });
+ })
} else if (groupId) {
callback({
id: groupId,
displayname: groupId
- });
+ })
} else {
- callback();
+ callback()
}
},
- formatResult: function (element) {
- return '<span>' + escapeHTML(element.displayname) + '</span>';
+ formatResult: function(element) {
+ return '<span>' + escapeHTML(element.displayname) + '</span>'
},
- formatSelection: function (element) {
- return '<span title="'+escapeHTML(element.id)+'">'+escapeHTML(element.displayname)+'</span>';
+ formatSelection: function(element) {
+ return '<span title="' + escapeHTML(element.id) + '">' + escapeHTML(element.displayname) + '</span>'
}
- });
+ })
}
- };
-})();
+ }
+})()
-OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin);
+OC.Plugins.register('OCA.WorkflowEngine.CheckPlugins', OCA.WorkflowEngine.Plugins.UserGroupMembershipPlugin)
diff --git a/apps/workflowengine/src/services/Operation.js b/apps/workflowengine/src/services/Operation.js
index b2257b5545a..99dca212f4c 100644
--- a/apps/workflowengine/src/services/Operation.js
+++ b/apps/workflowengine/src/services/Operation.js
@@ -13,17 +13,9 @@ const ALL_CHECKS = [
'OCA\\WorkflowEngine\\Check\\UserGroupMembership'
]
-const Entities = OCP.InitialState.loadState('workflowengine', 'entities').map(entity => {
- return {
- ...entity,
- // TODO: see if we should have this defined in the backend as well
- checks: [...ALL_CHECKS]
- }
-})
-
const Checks = Object.values(OCA.WorkflowEngine.Plugins).map((plugin) => {
if (plugin.component) {
- return {...plugin.getCheck(), component: plugin.component}
+ return { ...plugin.getCheck(), component: plugin.component }
}
return plugin.getCheck()
}).reduce((obj, item) => {
@@ -31,113 +23,55 @@ const Checks = Object.values(OCA.WorkflowEngine.Plugins).map((plugin) => {
return obj
}, {})
+const Operators = OCP.InitialState.loadState('workflowengine', 'operators')
+
/**
- * Register operations
- * TODO: should be provided by the backend
+ * Extend operators for testing
*/
-
-class OperationService {
-
- constructor() {
- this.operations = {}
- }
- registerOperation (operation) {
- this.operations[operation.class] = Object.assign({
- color: 'var(--color-primary)'
- }, operation)
- }
-
- getAll() {
- return this.operations
- }
-
- get(className) {
- return this.operations[className]
- }
-
-}
-const operationService = new OperationService()
-
-operationService.registerOperation({
- class: 'OCA\\FilesAccessControl\\Operation',
- title: 'Block access',
- description: 'Deny access to files when they are accessed',
- icon: 'icon-block',
+Operators['OCA\\FilesAccessControl\\Operation'] = {
+ ...Operators['OCA\\FilesAccessControl\\Operation'],
color: 'var(--color-error)',
- entites: [
+ entities: [
'OCA\\WorkflowEngine\\Entity\\File'
],
- events: [
- // TODO: this is probably handled differently since there is no regular event for files access control
- 'OCA\\WorkflowEngine\\Entity\\File::postTouch'
- ],
operation: 'deny'
-})
+}
+Operators['OCA\\WorkflowPDFConverter\\Operation'] = {
+ id: 'OCA\\WorkflowPDFConverter\\Operation',
+ name: 'Convert to PDF',
+ description: 'Generate a PDF file',
+ color: '#dc5047',
+ iconClass: 'icon-convert-pdf',
+ options: ConvertToPdf
+}
-operationService.registerOperation({
- class: 'OCA\\TestExample\\Operation1',
- title: 'Rename file',
+Operators['OCA\\TestExample\\Operation1'] = {
+ id: 'OCA\\TestExample\\Operation1',
+ name: 'Rename file',
description: '🚧 For UI mocking only',
- icon: 'icon-address-white',
+ iconClass: 'icon-address-white',
color: 'var(--color-success)',
- entites: [],
- events: [],
operation: 'deny'
-})
-operationService.registerOperation({
- class: 'OCA\\TestExample\\Operation2',
- title: 'Notify me',
+}
+Operators['OCA\\TestExample\\Operation2'] = {
+ id: 'OCA\\TestExample\\Operation2',
+ name: 'Notify me',
description: '🚧 For UI mocking only',
- icon: 'icon-comment-white',
+ iconClass: 'icon-comment-white',
color: 'var(--color-warning)',
- entites: [],
- events: [],
- operation: 'deny'
-})
-operationService.registerOperation({
- class: 'OCA\\TestExample\\Operation3',
- title: 'Call a web hook',
- description: '🚧 For UI mocking only',
- icon: 'icon-category-integration icon-invert',
- color: 'var(--color-primary)',
- entites: [],
- events: [],
operation: 'deny'
-})
-
-operationService.registerOperation({
- class: 'OCA\\FilesAutomatedTagging\\Operation',
- title: 'Tag a file',
+}
+Operators['OCA\\FilesAutomatedTagging\\Operation'] = {
+ id: 'OCA\\FilesAutomatedTagging\\Operation',
+ name: 'Tag a file',
description: 'Assign a tag to a file',
- icon: 'icon-tag-white',
- events: [
- 'WorkflowEngine_Entity_File::postWrite',
- //'WorkflowEngine_Entity_File::postTagged',
- ],
+ iconClass: 'icon-tag-white',
+ color: 'var(--color-primary)',
options: Tag
-
-})
-
-operationService.registerOperation({
- class: 'OCA\\WorkflowPDFConverter\\Operation',
- title: 'Convert to PDF',
- description: 'Generate a PDF file',
- color: '#dc5047',
- icon: 'icon-convert-pdf',
- events: [
- 'WorkflowEngine_Entity_File::postWrite',
- //EVENT_FILE_TAGGED
- ],
- options: ConvertToPdf
-})
-
-console.debug('[InitialState] Entities', Entities)
-console.debug('[WorkflowEngine] Checks', Checks)
-console.debug('[WorkflowEngine] Operations', operationService.operations)
-
+}
export {
- Entities,
Checks,
- operationService
+ Operators,
+ ALL_CHECKS
}
diff --git a/apps/workflowengine/src/templates/operation.handlebars b/apps/workflowengine/src/templates/operation.handlebars
deleted file mode 100644
index 0899890cef2..00000000000
--- a/apps/workflowengine/src/templates/operation.handlebars
+++ /dev/null
@@ -1,45 +0,0 @@
-<div class="operation{{#if hasChanged}} modified{{/if}}">
- <div class="operation-header">
- <input type="text" class="operation-name" placeholder="{{shortRuleDescTXT}}" value="{{operation.name}}" />
- <input type="text" class="operation-operation" value="{{operation.operation}}" />
- {{! delete only makes sense if the operation is already saved }}
- {{#if operation.id}}
- <span class="button-delete icon-delete"></span>
- {{/if}}
- </div>
-
- <div class="checks">
- {{#each operation.checks}}
- <div class="check" data-id="{{@index}}">
- <select class="check-class">
- {{#each ../classes}}
- <option value="{{class}}" {{{selectItem class ../class}}}>{{name}}</option>
- {{/each}}
- </select>
- <select class="check-operator">
- {{#each (getOperators class)}}
- <option value="{{operator}}" {{{selectItem operator ../operator}}}>{{name}}</option>
- {{/each}}
- </select>
- <input type="text" class="check-value" value="{{value}}">
- <span class="button-delete-check icon-delete"></span>
- </div>
- {{/each}}
- </div>
- <button class="button-add">{{addRuleTXT}}</button>
- {{#if hasChanged}}
- {{! reset only makes sense if the operation is already saved }}
- {{#if operation.id}}
- <button class="button-reset pull-right">{{resetTXT}}</button>
- {{/if}}
- <button class="button-save pull-right">{{saveTXT}}</button>
- {{/if}}
- {{#if saving}}
- <span class="icon-loading-small pull-right"></span>
- <span class="pull-right">{{savingTXT}}</span>
- {{else}}{{#if message}}
- <span class="msg pull-right {{#if errorMessage}}error{{else}}success{{/if}}">
- {{message}}{{#if errorMessage}} {{errorMessage}}{{/if}}
- </span>
- {{/if}}{{/if}}
-</div>
diff --git a/apps/workflowengine/src/templates/operations.handlebars b/apps/workflowengine/src/templates/operations.handlebars
deleted file mode 100644
index 14b62ee79a6..00000000000
--- a/apps/workflowengine/src/templates/operations.handlebars
+++ /dev/null
@@ -1,2 +0,0 @@
-<div class="operations"></div>
-<button class="button-add-operation">{{addRuleGroupTXT}}</button>
diff --git a/apps/workflowengine/src/workflowengine.js b/apps/workflowengine/src/workflowengine.js
index 6c7af2a446e..866f049b0bf 100644
--- a/apps/workflowengine/src/workflowengine.js
+++ b/apps/workflowengine/src/workflowengine.js
@@ -1,19 +1,25 @@
-import './filemimetypeplugin'
-import './filenameplugin'
-import './filesizeplugin'
-import './filesystemtagsplugin'
-import './requestremoteaddressplugin'
-import './requesttimeplugin'
-import './requesturlplugin'
-import './requestuseragentplugin'
-import './usergroupmembershipplugin'
+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'
-window.OCA.WorkflowEngine = OCA.WorkflowEngine
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+import store from './store'
-import Vue from 'vue';
+import Settings from './components/Workflow'
-Vue.prototype.t = t;
+window.OCA.WorkflowEngine = OCA.WorkflowEngine
+Vue.use(Vuex)
-import Settings from './components/Workflow';
+Vue.prototype.t = t
const View = Vue.extend(Settings)
-new View({}).$mount('#workflowengine') \ No newline at end of file
+new View({
+ store
+}).$mount('#workflowengine')