mirror of https://github.com/MISP/MISP
chg: [internal] Faster tag capturing
parent
c305ea1efe
commit
ab9c419412
|
@ -22,28 +22,28 @@ class Tag extends AppModel
|
|||
);
|
||||
|
||||
public $validate = array(
|
||||
'name' => array(
|
||||
'required' => array(
|
||||
'rule' => array('notBlank', 'name'),
|
||||
'message' => 'This field is required.'
|
||||
),
|
||||
'valueNotEmpty' => array(
|
||||
'rule' => array('valueNotEmpty', 'name'),
|
||||
),
|
||||
'unique' => array(
|
||||
'rule' => 'isUnique',
|
||||
'message' => 'A similar name already exists.',
|
||||
),
|
||||
'name' => array(
|
||||
'required' => array(
|
||||
'rule' => array('notBlank', 'name'),
|
||||
'message' => 'This field is required.'
|
||||
),
|
||||
'colour' => array(
|
||||
'valueNotEmpty' => array(
|
||||
'rule' => array('valueNotEmpty', 'colour'),
|
||||
),
|
||||
'userdefined' => array(
|
||||
'rule' => 'validateColour',
|
||||
'message' => 'Colour has to be in the RGB format (#FFFFFF)',
|
||||
),
|
||||
'valueNotEmpty' => array(
|
||||
'rule' => array('valueNotEmpty', 'name'),
|
||||
),
|
||||
'unique' => array(
|
||||
'rule' => 'isUnique',
|
||||
'message' => 'A similar name already exists.',
|
||||
),
|
||||
),
|
||||
'colour' => array(
|
||||
'valueNotEmpty' => array(
|
||||
'rule' => array('valueNotEmpty', 'colour'),
|
||||
),
|
||||
'userdefined' => array(
|
||||
'rule' => 'validateColour',
|
||||
'message' => 'Colour has to be in the RGB format (#FFFFFF)',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
public $hasMany = array(
|
||||
|
@ -83,7 +83,6 @@ class Tag extends AppModel
|
|||
|
||||
public function beforeValidate($options = array())
|
||||
{
|
||||
parent::beforeValidate();
|
||||
if (!isset($this->data['Tag']['org_id'])) {
|
||||
$this->data['Tag']['org_id'] = 0;
|
||||
}
|
||||
|
@ -149,8 +148,7 @@ class Tag extends AppModel
|
|||
|
||||
public function afterFind($results, $primary = false)
|
||||
{
|
||||
$results = $this->checkForOverride($results);
|
||||
return $results;
|
||||
return $this->checkForOverride($results);
|
||||
}
|
||||
|
||||
public function validateColour($fields)
|
||||
|
@ -166,7 +164,8 @@ class Tag extends AppModel
|
|||
$tagId = $this->find('first', array(
|
||||
'conditions' => array('LOWER(Tag.name)' => strtolower($tagName)),
|
||||
'recursive' => -1,
|
||||
'fields' => array('Tag.id')
|
||||
'fields' => array('Tag.id'),
|
||||
'callbacks' => false,
|
||||
));
|
||||
if (empty($tagId)) {
|
||||
return -1;
|
||||
|
@ -286,7 +285,7 @@ class Tag extends AppModel
|
|||
return array_values($tag_ids);
|
||||
}
|
||||
|
||||
public function findEventIdsByTagNames($array)
|
||||
private function findEventIdsByTagNames($array)
|
||||
{
|
||||
$ids = array();
|
||||
foreach ($array as $a) {
|
||||
|
@ -310,26 +309,6 @@ class Tag extends AppModel
|
|||
return $ids;
|
||||
}
|
||||
|
||||
public function findAttributeIdsByAttributeTagNames($array)
|
||||
{
|
||||
$ids = array();
|
||||
foreach ($array as $a) {
|
||||
$conditions['OR'][] = array('LOWER(name) LIKE' => strtolower($a));
|
||||
}
|
||||
$params = array(
|
||||
'recursive' => 1,
|
||||
'contain' => 'AttributeTag',
|
||||
'conditions' => $conditions
|
||||
);
|
||||
$result = $this->find('all', $params);
|
||||
foreach ($result as $tag) {
|
||||
foreach ($tag['AttributeTag'] as $attributeTag) {
|
||||
$ids[] = $attributeTag['attribute_id'];
|
||||
}
|
||||
}
|
||||
return $ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $tag
|
||||
* @param array $user
|
||||
|
@ -337,17 +316,18 @@ class Tag extends AppModel
|
|||
* @return false|int
|
||||
* @throws Exception
|
||||
*/
|
||||
public function captureTag($tag, $user, $force=false)
|
||||
public function captureTag(array $tag, array $user, $force=false)
|
||||
{
|
||||
$existingTag = $this->find('first', array(
|
||||
'recursive' => -1,
|
||||
'conditions' => array('LOWER(name)' => mb_strtolower($tag['name'])),
|
||||
'fields' => ['id', 'org_id', 'user_id'],
|
||||
'callbacks' => false,
|
||||
));
|
||||
if (empty($existingTag)) {
|
||||
if ($force || $user['Role']['perm_tag_editor']) {
|
||||
$this->create();
|
||||
if (!isset($tag['colour']) || empty($tag['colour'])) {
|
||||
if (empty($tag['colour'])) {
|
||||
$tag['colour'] = $this->random_color();
|
||||
}
|
||||
$tag = array(
|
||||
|
@ -363,22 +343,21 @@ class Tag extends AppModel
|
|||
} else {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
if (
|
||||
!$user['Role']['perm_site_admin'] &&
|
||||
}
|
||||
if (
|
||||
!$user['Role']['perm_site_admin'] &&
|
||||
(
|
||||
(
|
||||
(
|
||||
$existingTag['Tag']['org_id'] != 0 &&
|
||||
$existingTag['Tag']['org_id'] != $user['org_id']
|
||||
) ||
|
||||
(
|
||||
$existingTag['Tag']['user_id'] != 0 &&
|
||||
$existingTag['Tag']['user_id'] != $user['id']
|
||||
)
|
||||
$existingTag['Tag']['org_id'] != 0 &&
|
||||
$existingTag['Tag']['org_id'] != $user['org_id']
|
||||
) ||
|
||||
(
|
||||
$existingTag['Tag']['user_id'] != 0 &&
|
||||
$existingTag['Tag']['user_id'] != $user['id']
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
return $existingTag['Tag']['id'];
|
||||
}
|
||||
|
@ -434,15 +413,21 @@ class Tag extends AppModel
|
|||
}
|
||||
|
||||
/**
|
||||
* Recover user_id from the session and override numerical_values from userSetting
|
||||
*/
|
||||
public function checkForOverride($tags)
|
||||
* Recover user_id from the session and override numerical_values from userSetting.
|
||||
*
|
||||
* @param array $tags
|
||||
* @return array
|
||||
*/
|
||||
private function checkForOverride($tags)
|
||||
{
|
||||
$userId = Configure::read('CurrentUserId');
|
||||
if ($this->tagOverrides === false && $userId > 0) {
|
||||
$this->UserSetting = ClassRegistry::init('UserSetting');
|
||||
$this->tagOverrides = $this->UserSetting->getTagNumericalValueOverride($userId);
|
||||
}
|
||||
if (empty($this->tagOverrides)) {
|
||||
return $tags;
|
||||
}
|
||||
foreach ($tags as $k => $tag) {
|
||||
if (isset($tag['Tag']['name'])) {
|
||||
$tagName = $tag['Tag']['name'];
|
||||
|
|
Loading…
Reference in New Issue