diff --git a/PyMISP b/PyMISP
index dc5d40a32..2c877f2ae 160000
--- a/PyMISP
+++ b/PyMISP
@@ -1 +1 @@
-Subproject commit dc5d40a327233895792b8148a7c87d5a1c2ebfb1
+Subproject commit 2c877f2aec11b7f5d2f23dfc5ce7398b2ce33b48
diff --git a/VERSION.json b/VERSION.json
index a9cc38076..c96e0e839 100644
--- a/VERSION.json
+++ b/VERSION.json
@@ -1 +1 @@
-{"major":2, "minor":4, "hotfix":101}
+{"major":2, "minor":4, "hotfix":102}
diff --git a/app/Console/Command/AdminShell.php b/app/Console/Command/AdminShell.php
index 3918f3def..ac7818587 100644
--- a/app/Console/Command/AdminShell.php
+++ b/app/Console/Command/AdminShell.php
@@ -146,15 +146,26 @@ class AdminShell extends AppShell
}
public function setSetting() {
- $setting = !isset($this->args[0]) ? null : $this->args[0];
+ $setting_name = !isset($this->args[0]) ? null : $this->args[0];
$value = !isset($this->args[1]) ? null : $this->args[1];
if ($value === 'false') $value = 0;
if ($value === 'true') $value = 1;
- if (empty($setting) || $value === null) {
+ $cli_user = array('id' => 0, 'email' => 'SYSTEM', 'Organisation' => array('name' => 'SYSTEM'));
+ if (empty($setting_name) || $value === null) {
echo 'Invalid parameters. Usage: ' . APP . 'Console/cake Admin setSetting [setting_name] [setting_value]';
} else {
- $this->Server->serverSettingsSaveValue($setting, $value);
+ $setting = $this->Server->getSettingData($setting_name);
+ if (empty($setting)) {
+ echo 'Invalid setting. Please make sure that the setting that you are attempting to change exists.';
+ }
+ $result = $this->Server->serverSettingsEditValue($cli_user, $setting, $value);
+ if ($result === true) {
+ echo 'Setting changed.';
+ } else {
+ echo $result;
+ }
}
+ echo PHP_EOL;
}
public function setDatabaseVersion() {
diff --git a/app/Controller/AppController.php b/app/Controller/AppController.php
index 394ba4130..3ce4806f0 100755
--- a/app/Controller/AppController.php
+++ b/app/Controller/AppController.php
@@ -47,8 +47,8 @@ class AppController extends Controller
public $helpers = array('Utility', 'OrgImg');
private $__queryVersion = '54';
- public $pyMispVersion = '2.4.101';
- public $phpmin = '5.6.5';
+ public $pyMispVersion = '2.4.102';
+ public $phpmin = '7.0.16';
public $phprec = '7.0.16';
public $baseurl = '';
diff --git a/app/Controller/AttributesController.php b/app/Controller/AttributesController.php
index f2725563a..3b1583e93 100644
--- a/app/Controller/AttributesController.php
+++ b/app/Controller/AttributesController.php
@@ -1933,9 +1933,18 @@ class AttributesController extends AppController
$this->set('fails', $this->Attribute->checkComposites());
}
- public function restSearch($returnFormat = false, $value = false, $type = false, $category = false, $org = false, $tags = false, $from = false, $to = false, $last = false, $eventid = false, $withAttachments = false, $uuid = false, $publish_timestamp = false, $published = false, $timestamp = false, $enforceWarninglist = false, $to_ids = false, $deleted = false, $includeEventUuid = false, $event_timestamp = false, $threat_level_id = false)
+ public function restSearch(
+ $returnFormat = false, $value = false, $type = false, $category = false, $org = false, $tags = false, $from = false,
+ $to = false, $last = false, $eventid = false, $withAttachments = false, $uuid = false, $publish_timestamp = false, $published = false,
+ $timestamp = false, $enforceWarninglist = false, $to_ids = false, $deleted = false, $includeEventUuid = false, $event_timestamp = false,
+ $threat_level_id = false
+ )
{
- $paramArray = array('value' , 'type', 'category', 'org', 'tags', 'from', 'to', 'last', 'eventid', 'withAttachments', 'uuid', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'to_ids', 'deleted', 'includeEventUuid', 'event_timestamp', 'threat_level_id', 'includeEventTags', 'includeProposals', 'returnFormat', 'published');
+ $paramArray = array(
+ 'value' , 'type', 'category', 'org', 'tags', 'from', 'to', 'last', 'eventid', 'withAttachbocsi ments', 'uuid', 'publish_timestamp',
+ 'timestamp', 'enforceWarninglist', 'to_ids', 'deleted', 'includeEventUuid', 'event_timestamp', 'threat_level_id', 'includeEventTags',
+ 'includeProposals', 'returnFormat', 'published', 'limit', 'page', 'requested_attributes', 'includeContext', 'headerless'
+ );
$filterData = array(
'request' => $this->request,
'named_params' => $this->params['named'],
diff --git a/app/Controller/EventsController.php b/app/Controller/EventsController.php
index 799907fc4..44db01b29 100644
--- a/app/Controller/EventsController.php
+++ b/app/Controller/EventsController.php
@@ -3136,7 +3136,7 @@ class EventsController extends AppController
// && - you can use && between two search values to put a logical OR between them. for value, 1.1.1.1&&2.2.2.2 would find attributes with the value being either of the two.
// ! - you can negate a search term. For example: google.com&&!mail would search for all attributes with value google.com but not ones that include mail. www.google.com would get returned, mail.google.com wouldn't.
public function restSearch(
- $returnFormat = 'json',
+ $returnFormat = false,
$value = false,
$type = false,
$category = false,
@@ -3158,7 +3158,8 @@ class EventsController extends AppController
) {
$paramArray = array(
'value', 'type', 'category', 'org', 'tag', 'tags', 'searchall', 'from', 'to', 'last', 'eventid', 'withAttachments',
- 'metadata', 'uuid', 'published', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'sgReferenceOnly'
+ 'metadata', 'uuid', 'published', 'publish_timestamp', 'timestamp', 'enforceWarninglist', 'sgReferenceOnly', 'returnFormat',
+ 'limit', 'page', 'requested_attributes', 'includeContext', 'headerless'
);
$filterData = array(
'request' => $this->request,
@@ -3177,10 +3178,9 @@ class EventsController extends AppController
if ($user === false) {
return $exception;
}
- if (isset($filters['returnFormat'])) {
+ if (!empty($filters['returnFormat'])) {
$returnFormat = $filters['returnFormat'];
- }
- if ($returnFormat === 'download') {
+ } else if (empty($filters['returnFormat']) || $filters['returnFormat'] === 'download'){
$returnFormat = 'json';
}
$elementCounter = 0;
@@ -4114,12 +4114,12 @@ class EventsController extends AppController
'checkbox_set' => '/events/csv/download/' . $id . '/1/0/0/0/1'
),
'stix_xml' => array(
- 'url' => '/events/stix/download/' . $id . '.xml',
+ 'url' => '/events/restSearch/stix/eventid:' . $id,
'text' => 'STIX XML (metadata + all attributes)',
'requiresPublished' => true,
'checkbox' => true,
'checkbox_text' => 'Encode Attachments',
- 'checkbox_set' => '/events/stix/download/' . $id . '/true.xml'
+ 'checkbox_set' => '/events/restSearch/stix/eventid:' . $id . '/withAttachments:1'
),
'stix_json' => array(
'url' => '/events/stix/download/' . $id . '.json',
@@ -4130,12 +4130,12 @@ class EventsController extends AppController
'checkbox_set' => '/events/stix/download/' . $id . '/true.json'
),
'stix2_json' => array(
- 'url' => '/events/stix2/download/' . $id . '.json',
+ 'url' => '/events/restSearch/stix2/eventid:' . $id,
'text' => 'STIX2 (requires the STIX 2 library)',
'requiresPublished' => false,
'checkbox' => true,
'checkbox_text' => 'Encode Attachments',
- 'checkbox_set' => '/events/stix2/download/' . $id . '/1.json'
+ 'checkbox_set' => '/events/restSearch/stix2/eventid:' . $id . '/withAttachments:1'
),
'rpz' => array(
'url' => '/attributes/rpz/download/false/' . $id,
diff --git a/app/Controller/ServersController.php b/app/Controller/ServersController.php
index 34ace9b3e..79d093ee2 100644
--- a/app/Controller/ServersController.php
+++ b/app/Controller/ServersController.php
@@ -1135,67 +1135,39 @@ class ServersController extends AppController
}
}
- public function serverSettingsEdit($setting, $id = false, $forceSave = false)
+ public function serverSettingsEdit($setting_name, $id = false, $forceSave = false)
{
- // invalidate config.php from php opcode cache
- if (function_exists('opcache_reset')) {
- opcache_reset();
- }
-
if (!$this->_isSiteAdmin()) {
throw new MethodNotAllowedException();
}
- if (!isset($setting) || !isset($id)) {
+ if (!isset($setting_name) || !isset($id)) {
throw new MethodNotAllowedException();
}
$this->set('id', $id);
- if (strpos($setting, 'Plugin.Enrichment') !== false || strpos($setting, 'Plugin.Import') !== false || strpos($setting, 'Plugin.Export') !== false || strpos($setting, 'Plugin.Cortex') !== false) {
- $serverSettings = $this->Server->getCurrentServerSettings();
- } else {
- $serverSettings = $this->Server->serverSettings;
- }
- $relevantSettings = (array_intersect_key(Configure::read(), $serverSettings));
- $found = null;
- foreach ($serverSettings as $k => $s) {
- if (isset($s['branch'])) {
- foreach ($s as $ek => $es) {
- if ($ek != 'branch') {
- if ($setting == $k . '.' . $ek) {
- $found = $es;
- continue 2;
- }
- }
- }
- } else {
- if ($setting == $k) {
- $found = $s;
- continue;
- }
- }
- }
+ $setting = $this->Server->getSettingData($setting_name);
if ($this->request->is('get')) {
- if ($found != null) {
- $value = Configure::read($setting);
+ if ($setting != null) {
+ $value = Configure::read($setting['name']);
if ($value) {
- $found['value'] = $value;
+ $setting['value'] = $value;
}
- $found['setting'] = $setting;
+ $setting['setting'] = $setting['name'];
}
- if (isset($found['optionsSource']) && !empty($found['optionsSource'])) {
- $found['options'] = $this->{'__load' . $found['optionsSource']}();
+ if (isset($setting['optionsSource']) && !empty($setting['optionsSource'])) {
+ $setting['options'] = $this->{'__load' . $setting['optionsSource']}();
}
$subGroup = 'general';
- $subGroup = explode('.', $setting);
+ $subGroup = explode('.', $setting['name']);
if ($subGroup[0] === 'Plugin') {
$subGroup = explode('_', $subGroup[1])[0];
} else {
$subGroup = 'general';
}
if ($this->_isRest()) {
- return $this->RestResponse->viewData(array($setting => $found['value']));
+ return $this->RestResponse->viewData(array($setting['name'] => $setting['value']));
} else {
$this->set('subGroup', $subGroup);
- $this->set('setting', $found);
+ $this->set('setting', $setting);
$this->render('ajax/server_settings_edit');
}
}
@@ -1227,7 +1199,7 @@ class ServersController extends AppController
'action' => 'serverSettingsEdit',
'user_id' => $this->Auth->user('id'),
'title' => 'Server setting issue',
- 'change' => 'There was an issue witch changing ' . $setting . ' to ' . $this->request->data['Server']['value'] . '. The error message returned is: app/Config.config.php is not writeable to the apache user. No changes were made.',
+ 'change' => 'There was an issue witch changing ' . $setting['name'] . ' to ' . $this->request->data['Server']['value'] . '. The error message returned is: app/Config.config.php is not writeable to the apache user. No changes were made.',
));
if ($this->_isRest()) {
return $this->RestResponse->saveFailResponse('Servers', 'serverSettingsEdit', false, 'app/Config.config.php is not writeable to the apache user.', $this->response->type());
@@ -1235,101 +1207,19 @@ class ServersController extends AppController
return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => 'app/Config.config.php is not writeable to the apache user.')), 'status'=>200, 'type' => 'json'));
}
}
-
- if (isset($found['beforeHook'])) {
- $beforeResult = call_user_func_array(array($this->Server, $found['beforeHook']), array($setting, $this->request->data['Server']['value']));
- if ($beforeResult !== true) {
- $this->Log->create();
- $result = $this->Log->save(array(
- 'org' => $this->Auth->user('Organisation')['name'],
- 'model' => 'Server',
- 'model_id' => 0,
- 'email' => $this->Auth->user('email'),
- 'action' => 'serverSettingsEdit',
- 'user_id' => $this->Auth->user('id'),
- 'title' => 'Server setting issue',
- 'change' => 'There was an issue witch changing ' . $setting . ' to ' . $this->request->data['Server']['value'] . '. The error message returned is: ' . $beforeResult . 'No changes were made.',
- ));
- if ($this->_isRest) {
- return $this->RestResponse->saveFailResponse('Servers', 'serverSettingsEdit', false, $beforeResult, $this->response->type());
- } else {
- return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => $beforeResult)), 'status'=>200, 'type' => 'json'));
- }
- }
- }
- $this->request->data['Server']['value'] = trim($this->request->data['Server']['value']);
- if ($found['type'] == 'boolean') {
- $this->request->data['Server']['value'] = ($this->request->data['Server']['value'] ? true : false);
- }
- if ($found['type'] == 'numeric') {
- $this->request->data['Server']['value'] = intval($this->request->data['Server']['value']);
- }
- if (!empty($leafValue['test'])) {
- $testResult = $this->Server->{$found['test']}($this->request->data['Server']['value']);
- } else {
- $testResult = true; # No test defined for this setting: cannot fail
- }
- if (!$forceSave && $testResult !== true) {
- if ($testResult === false) {
- $errorMessage = $found['errorMessage'];
+ $result = $this->Server->serverSettingsEditValue($this->Auth->user(), $setting, $this->request->data['Server']['value'], $forceSave);
+ if ($result === true) {
+ if ($this->_isRest()) {
+ return $this->RestResponse->saveSuccessResponse('Servers', 'serverSettingsEdit', false, $this->response->type(), 'Field updated');
} else {
- $errorMessage = $testResult;
+ return new CakeResponse(array('body'=> json_encode(array('saved' => true, 'success' => 'Field updated.')), 'status'=>200, 'type' => 'json'));
}
+ } else {
if ($this->_isRest) {
- return $this->RestResponse->saveFailResponse('Servers', 'serverSettingsEdit', false, $errorMessage, $this->response->type());
+ return $this->RestResponse->saveFailResponse('Servers', 'serverSettingsEdit', false, $result, $this->response->type());
} else {
- return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => $errorMessage)), 'status'=>200, 'type' => 'json'));
+ return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => $result)), 'status'=>200, 'type' => 'json'));
}
- } else {
- $oldValue = Configure::read($setting);
- $settingSaveResult = $this->Server->serverSettingsSaveValue($setting, $this->request->data['Server']['value']);
- $this->Log->create();
- if ($settingSaveResult) {
- $result = $this->Log->save(array(
- 'org' => $this->Auth->user('Organisation')['name'],
- 'model' => 'Server',
- 'model_id' => 0,
- 'email' => $this->Auth->user('email'),
- 'action' => 'serverSettingsEdit',
- 'user_id' => $this->Auth->user('id'),
- 'title' => 'Server setting changed',
- 'change' => $setting . ' (' . $oldValue . ') => (' . $this->request->data['Server']['value'] . ')',
- ));
- // execute after hook
- if (isset($found['afterHook'])) {
- $afterResult = call_user_func_array(array($this->Server, $found['afterHook']), array($setting, $this->request->data['Server']['value']));
- if ($afterResult !== true) {
- $this->Log->create();
- $result = $this->Log->save(array(
- 'org' => $this->Auth->user('Organisation')['name'],
- 'model' => 'Server',
- 'model_id' => 0,
- 'email' => $this->Auth->user('email'),
- 'action' => 'serverSettingsEdit',
- 'user_id' => $this->Auth->user('id'),
- 'title' => 'Server setting issue',
- 'change' => 'There was an issue after setting a new setting. The error message returned is: ' . $afterResult,
- ));
- if ($this->_isRest) {
- return $this->RestResponse->saveFailResponse('Servers', 'serverSettingsEdit', false, $afterResult, $this->response->type());
- } else {
- return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => $afterResult)), 'status'=>200, 'type' => 'json'));
- }
- }
- }
- if ($this->_isRest()) {
- return $this->RestResponse->saveSuccessResponse('Servers', 'serverSettingsEdit', false, $this->response->type(), 'Field updated');
- } else {
- return new CakeResponse(array('body'=> json_encode(array('saved' => true, 'success' => 'Field updated.')), 'status'=>200, 'type' => 'json'));
- }
- } else {
- if ($this->_isRest()) {
- $message = __('Something went wrong. MISP tried to save a malformed config file. Setting change reverted.');
- return $this->RestResponse->saveFailResponse('Servers', 'serverSettingsEdit', false, $message, $this->response->type());
- } else {
- return new CakeResponse(array('body'=> json_encode(array('saved' => false, 'errors' => $message)), 'status'=>200, 'type' => 'json'));
- }
- }
}
}
}
diff --git a/app/Lib/Export/StixExport.php b/app/Lib/Export/StixExport.php
index 341ef75d4..214f1b29e 100644
--- a/app/Lib/Export/StixExport.php
+++ b/app/Lib/Export/StixExport.php
@@ -21,7 +21,9 @@ class StixExport
{
$attributes_count = count($data['Attribute']);
foreach ($data['Object'] as $_object) {
- $attributes_count += count($_object['Attribute']);
+ if (isset($_object['Attribute'])) {
+ $attributes_count += count($_object['Attribute']);
+ }
}
App::uses('JSONConverterTool', 'Tools');
$converter = new JSONConverterTool();
diff --git a/app/Model/Server.php b/app/Model/Server.php
index 1b51df89d..a30091d47 100644
--- a/app/Model/Server.php
+++ b/app/Model/Server.php
@@ -3158,7 +3158,7 @@ class Server extends AppModel
public function customAuthBeforeHook($setting, $value)
{
- if ($value) {
+ if (!empty($value)) {
$this->updateDatabase('addCustomAuth');
}
$this->cleanCacheFiles();
@@ -3193,6 +3193,122 @@ class Server extends AppModel
return $value;
}
+ public function getSettingData($setting_name)
+ {
+ // invalidate config.php from php opcode cache
+ if (function_exists('opcache_reset')) {
+ opcache_reset();
+ }
+ if (strpos($setting_name, 'Plugin.Enrichment') !== false || strpos($setting_name, 'Plugin.Import') !== false || strpos($setting_name, 'Plugin.Export') !== false || strpos($setting_name, 'Plugin.Cortex') !== false) {
+ $serverSettings = $this->getCurrentServerSettings();
+ } else {
+ $serverSettings = $this->serverSettings;
+ }
+ $relevantSettings = (array_intersect_key(Configure::read(), $serverSettings));
+ $setting = false;
+ foreach ($serverSettings as $k => $s) {
+ if (isset($s['branch'])) {
+ foreach ($s as $ek => $es) {
+ if ($ek != 'branch') {
+ if ($setting_name == $k . '.' . $ek) {
+ $setting = $es;
+ continue 2;
+ }
+ }
+ }
+ } else {
+ if ($setting_name == $k) {
+ $setting = $s;
+ continue;
+ }
+ }
+ }
+ if (!empty($setting)) {
+ $setting['name'] = $setting_name;
+ }
+ return $setting;
+ }
+
+ public function serverSettingsEditValue($user, $setting, $value, $forceSave = false)
+ {
+ if (isset($setting['beforeHook'])) {
+ $beforeResult = call_user_func_array(array($this, $setting['beforeHook']), array($setting['name'], $value));
+ if ($beforeResult !== true) {
+ $this->Log = ClassRegistry::init('Log');
+ $this->Log->create();
+ $result = $this->Log->save(array(
+ 'org' => $user['Organisation']['name'],
+ 'model' => 'Server',
+ 'model_id' => 0,
+ 'email' => $user['email'],
+ 'action' => 'serverSettingsEdit',
+ 'user_id' => $user['id'],
+ 'title' => 'Server setting issue',
+ 'change' => 'There was an issue witch changing ' . $setting['name'] . ' to ' . $value . '. The error message returned is: ' . $beforeResult . 'No changes were made.',
+ ));
+ return $beforeResult;
+ }
+ }
+ $value = trim($value);
+ if ($setting['type'] == 'boolean') {
+ $value = ($value ? true : false);
+ }
+ if ($setting['type'] == 'numeric') {
+ $value = intval($value);
+ }
+ if (!empty($setting['test'])) {
+ $testResult = $this->{$setting['test']}($value);
+ } else {
+ $testResult = true; # No test defined for this setting: cannot fail
+ }
+ if (!$forceSave && $testResult !== true) {
+ if ($testResult === false) {
+ $errorMessage = $setting['errorMessage'];
+ } else {
+ $errorMessage = $testResult;
+ }
+ return $errorMessage;
+ } else {
+ $oldValue = Configure::read($setting['name']);
+ $settingSaveResult = $this->serverSettingsSaveValue($setting['name'], $value);
+ $this->Log = ClassRegistry::init('Log');
+ $this->Log->create();
+ if ($settingSaveResult) {
+ $result = $this->Log->save(array(
+ 'org' => $user['Organisation']['name'],
+ 'model' => 'Server',
+ 'model_id' => 0,
+ 'email' => $user['email'],
+ 'action' => 'serverSettingsEdit',
+ 'user_id' => $user['id'],
+ 'title' => 'Server setting changed',
+ 'change' => $setting['name'] . ' (' . $oldValue . ') => (' . $value . ')',
+ ));
+ // execute after hook
+ if (isset($setting['afterHook'])) {
+ $afterResult = call_user_func_array(array($this, $setting['afterHook']), array($setting['name'], $value));
+ if ($afterResult !== true) {
+ $this->Log->create();
+ $result = $this->Log->save(array(
+ 'org' => $user['Organisation']['name'],
+ 'model' => 'Server',
+ 'model_id' => 0,
+ 'email' => $user['email'],
+ 'action' => 'serverSettingsEdit',
+ 'user_id' => $user['id'],
+ 'title' => 'Server setting issue',
+ 'change' => 'There was an issue after setting a new setting. The error message returned is: ' . $afterResult,
+ ));
+ return $afterResult;
+ }
+ }
+ return true;
+ } else {
+ return __('Something went wrong. MISP tried to save a malformed config file. Setting change reverted.');
+ }
+ }
+ }
+
public function serverSettingsSaveValue($setting, $value)
{
// validate if current config.php is intact:
diff --git a/app/View/Elements/galaxyQuickView.ctp b/app/View/Elements/galaxyQuickView.ctp
index 9d86f2a02..b577959cb 100644
--- a/app/View/Elements/galaxyQuickView.ctp
+++ b/app/View/Elements/galaxyQuickView.ctp
@@ -21,7 +21,7 @@
Form->create(false, array('url' => $baseurl . '/galaxy_clusters/detach/' . ucfirst(h($target_id)) . '/' . h($target_type) . '/' . $cluster['tag_id'], 'style' => 'display: inline-block; margin: 0px;'));
- echo '';
+ echo '';
echo $this->Form->end();
}
?>
diff --git a/app/View/Elements/generic_picker.ctp b/app/View/Elements/generic_picker.ctp
index 232bd0807..0ba52ca88 100644
--- a/app/View/Elements/generic_picker.ctp
+++ b/app/View/Elements/generic_picker.ctp
@@ -91,8 +91,8 @@ function setupChosen(id, redrawChosen) {
// hack to add template into the div
var $chosenContainer = $elem.parent().find('.chosen-container');
- $elem.on('chosen:showing_dropdown chosen:searchdone chosen:picked keyup change', function() {
- redrawChosenWithTemplate($elem, $chosenContainer)
+ $elem.on('chosen:searchdone chosen:picked keyup change', function(e) {
+ redrawChosenWithTemplate($elem, $chosenContainer, e.type)
});
if (redrawChosen) {
@@ -100,13 +100,19 @@ function setupChosen(id, redrawChosen) {
}
}
-function redrawChosenWithTemplate($select, $chosenContainer) {
+function redrawChosenWithTemplate($select, $chosenContainer, eventType) {
var optionLength = $select.find('option').length;
if (optionLength > 1000) {
$chosenContainer.parent().find('.generic-picker-wrapper-warning-text').show(0)
} else {
+ console.log(eventType);
$chosenContainer.find('.generic-picker-wrapper-warning-text').hide(0)
- var $matches = $chosenContainer.find('.chosen-results .active-result, .chosen-single > span, .search-choice > span');
+ var $matches;
+ if (eventType == 'chosen:picked' || eventType == 'change') {
+ $matches = $chosenContainer.find('.chosen-single > span, .search-choice > span');
+ } else {
+ $matches = $chosenContainer.find('.chosen-results .active-result');
+ }
$matches.each(function() {
var $item = $(this);
var index = $item.data('option-array-index');
@@ -115,7 +121,10 @@ function redrawChosenWithTemplate($select, $chosenContainer) {
$option = $select.find('option:eq(' + index + ')');
} else { // if it is a `chosen-single span`, don't have index
var text = $item.text();
- $option = $select.find('option:contains(' + text + ')');
+ $option = $select.find('option').filter(function(index) {
+ var temp = $.trim($(this).text());
+ return temp === text;
+ });
}
var template = options_templates[$select.attr('id')][$option.val()];
var res = "";
diff --git a/app/files/misp-galaxy b/app/files/misp-galaxy
index 898bdaf7f..b9f131794 160000
--- a/app/files/misp-galaxy
+++ b/app/files/misp-galaxy
@@ -1 +1 @@
-Subproject commit 898bdaf7f89fd3d3edf3e2952af8231ad1f941a0
+Subproject commit b9f13179412b0a6d944ef33493f36c2a49a63706
diff --git a/app/files/misp-objects b/app/files/misp-objects
index f5c7530e0..75ae30f44 160000
--- a/app/files/misp-objects
+++ b/app/files/misp-objects
@@ -1 +1 @@
-Subproject commit f5c7530e0b375cdd1b72a98f532dca731f8a0b80
+Subproject commit 75ae30f44df997280255eec60b981b9f376c5ac4
diff --git a/app/files/taxonomies b/app/files/taxonomies
index 3320d14b6..4c995a260 160000
--- a/app/files/taxonomies
+++ b/app/files/taxonomies
@@ -1 +1 @@
-Subproject commit 3320d14b68f78d8ca4c40a0a8f0af114f224a742
+Subproject commit 4c995a260c73373daeddd7304e248e8fea900e75