diff --git a/ui/app/scripts/app.js b/ui/app/scripts/app.js index 870332707b..72615a27e8 100644 --- a/ui/app/scripts/app.js +++ b/ui/app/scripts/app.js @@ -169,6 +169,9 @@ angular.module('thehive', ['ngAnimate', 'ngMessages', 'ngSanitize', 'ui.bootstra resolve: { templates: function(CaseTemplateSrv) { return CaseTemplateSrv.list(); + }, + fields: function(CustomFieldsCacheSrv){ + return CustomFieldsCacheSrv.all() } } }) diff --git a/ui/app/scripts/controllers/admin/AdminCaseTemplatesCtrl.js b/ui/app/scripts/controllers/admin/AdminCaseTemplatesCtrl.js index 9d9283a824..a17747643c 100644 --- a/ui/app/scripts/controllers/admin/AdminCaseTemplatesCtrl.js +++ b/ui/app/scripts/controllers/admin/AdminCaseTemplatesCtrl.js @@ -2,14 +2,14 @@ 'use strict'; angular.module('theHiveControllers').controller('AdminCaseTemplatesCtrl', - function($scope, $uibModal, CaseTemplateSrv, NotificationSrv, UtilsSrv, ListSrv, MetricsCacheSrv, CustomFieldsCacheSrv, UserSrv, UserInfoSrv, ModalUtilsSrv, templates) { + function($scope, $uibModal, CaseTemplateSrv, NotificationSrv, UtilsSrv, ListSrv, MetricsCacheSrv, CustomFieldsCacheSrv, UserSrv, UserInfoSrv, ModalUtilsSrv, templates, fields) { var self = this; self.templates = templates; self.task = ''; self.tags = []; self.metrics = []; - self.fields = []; + self.fields = fields || []; self.templateCustomFields = []; self.templateMetrics = []; self.templateIndex = -1; @@ -22,14 +22,15 @@ var getTemplateCustomFields = function(customFields) { var result = []; - result = _.pluck(_.sortBy(_.map(customFields, function(definition, name){ + result = _.sortBy(_.map(customFields, function(definition, name){ return { name: name, - order: definition.order + order: definition.order, + value: definition[self.fields[name].type] } }), function(item){ return item.order; - }), 'name'); + }); return result; } @@ -47,6 +48,12 @@ return result; } + self.dateOptions = { + 'closeOnDateSelection': true, + formatYear: 'yyyy', + startingDay: 1 + }; + self.sortableOptions = { handle: '.drag-handle', stop: function(/*e, ui*/) { @@ -71,10 +78,6 @@ MetricsCacheSrv.all().then(function(metrics){ self.metrics = metrics; }); - - CustomFieldsCacheSrv.all().then(function(fields){ - self.fields = fields; - }); }; self.loadCache(); @@ -208,16 +211,20 @@ //delete self.template.metrics[metricName]; }; - self.addCustomField = function(field) { - if(self.templateCustomFields.indexOf(field.reference) === -1) { - self.templateCustomFields.push(field.reference); - } else { - NotificationSrv.log('The custom field [' + field.name + '] has already been added to the template', 'warning'); - } + self.addCustomFieldRow = function() { + self.templateCustomFields.push({ + name: null, + order: self.templateCustomFields.length + 1, + value: null + }); }; - self.removeCustomField = function(fieldName) { - self.templateCustomFields = _.without(self.templateCustomFields, fieldName); + self.removeCustomField = function(field) { + self.templateCustomFields = _.without(self.templateCustomFields, field); + }; + + self.updateCustomField = function(field, value) { + field.value = value; }; self.deleteTemplate = function() { @@ -239,12 +246,13 @@ // Set custom fields self.template.customFields = {}; - _.each(self.templateCustomFields, function(value, index) { - var fieldDef = self.fields[value]; + _.each(self.templateCustomFields, function(cf, index) { + var fieldDef = self.fields[cf.name]; + var value = (fieldDef.type === 'date' && cf.value) ? moment(cf.value).valueOf() : (cf.value || null) - self.template.customFields[value] = {}; - self.template.customFields[value][fieldDef.type] = null; - self.template.customFields[value].order = index + 1; + self.template.customFields[cf.name] = {}; + self.template.customFields[cf.name][fieldDef.type] = value; + self.template.customFields[cf.name].order = index + 1; }); self.template.metrics = {}; diff --git a/ui/app/scripts/directives/dt-picker.js b/ui/app/scripts/directives/dt-picker.js index 27e6fc90e7..7ec28b9a08 100644 --- a/ui/app/scripts/directives/dt-picker.js +++ b/ui/app/scripts/directives/dt-picker.js @@ -9,7 +9,8 @@ }, templateUrl: 'views/directives/dt-picker.html', compile: function(element) { - $(element).find('.input-datetime').datetimepicker({ + var dtEl = $(element).find('.input-datetime'); + dtEl.datetimepicker({ format: 'dd-mm-yyyy', weekStart: 1, startView: 2, diff --git a/ui/app/styles/case-template.css b/ui/app/styles/case-template.css index f5e222b56d..d18bb8bee5 100644 --- a/ui/app/styles/case-template.css +++ b/ui/app/styles/case-template.css @@ -1,4 +1,5 @@ -.metric-item { +.metric-item, +.customfield-item { background-color: #f9f9f9; padding: 10px; margin-bottom: 5px; diff --git a/ui/app/views/directives/dt-picker.html b/ui/app/views/directives/dt-picker.html index 3462f0fa36..beeb2a81b4 100644 --- a/ui/app/views/directives/dt-picker.html +++ b/ui/app/views/directives/dt-picker.html @@ -1,5 +1,5 @@
- + diff --git a/ui/app/views/partials/admin/case-template/custom-fields.html b/ui/app/views/partials/admin/case-template/custom-fields.html index ba6b6536a1..0da68ecf26 100644 --- a/ui/app/views/partials/admin/case-template/custom-fields.html +++ b/ui/app/views/partials/admin/case-template/custom-fields.html @@ -1,42 +1,46 @@ -

- Custom fields ({{$vm.keys($vm.template.customFields).length}}) - - - - Add custom field - - - - -

+
+

+ Custom fields ({{$vm.keys($vm.template.customFields).length}}) +

-
-
-
- - - - - - - {{$vm.fields[m].name}} - - -  Delete - +
+ No custom fields have been added. Add a custom field +
+ +
+
+
+
+ + + + Delete +
+
+ +
+
+ +
+
+ + + + +
+
+ {{$vm.fields[cf.name].description || 'No description'}} +
+
-
-

{{description}}

-

- No description specified -

+
-
- No custom fields have been added -
diff --git a/ui/app/views/partials/admin/case-template/metrics.html b/ui/app/views/partials/admin/case-template/metrics.html index 9172132db3..c95d9861af 100644 --- a/ui/app/views/partials/admin/case-template/metrics.html +++ b/ui/app/views/partials/admin/case-template/metrics.html @@ -7,28 +7,25 @@

No metrics have been added. Add a metric

+
+
+ Delete +
-
- - - - -
+
{{$vm.metrics[m.metric].description || 'No description'}}
-
+
Add a metric diff --git a/ui/bower.json b/ui/bower.json index b9aac38f0c..0f31d65f40 100644 --- a/ui/bower.json +++ b/ui/bower.json @@ -25,7 +25,7 @@ "ng-csv": "~0.3.6", "ng-tags-input": "~3.1.1", "roboto-fontface": "~0.5.0", - "smalot-bootstrap-datetimepicker": "2.3.10", + "smalot-bootstrap-datetimepicker": "2.4.4", "underscore": "~1.8.3", "cryptojslib": "~3.1.2", "angular-ui-notification": "0.3.6",