diff --git a/app/Controller/AppController.php b/app/Controller/AppController.php index 570994eaf..41a5d8d5e 100755 --- a/app/Controller/AppController.php +++ b/app/Controller/AppController.php @@ -552,6 +552,7 @@ class AppController extends Controller if (!empty($homepage)) { $this->set('homepage', $homepage['UserSetting']['value']); } + Configure::write('user_id', $this->Auth->user('id')); } private function __rateLimitCheck() diff --git a/app/Model/DecayingModel.php b/app/Model/DecayingModel.php index 2c95658b1..470624769 100644 --- a/app/Model/DecayingModel.php +++ b/app/Model/DecayingModel.php @@ -319,7 +319,15 @@ class DecayingModel extends AppModel ); } $taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'][$e]['Tag'] = $tags[strtoupper($tag_name)]['Tag']; - $taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'][$e]['Tag']['numerical_value'] = $entry['numerical_value']; + // Take care of numerical_value override + if (isset($tags[strtoupper($tag_name)]['Tag']['original_numerical_value']) && is_numeric($tags[strtoupper($tag_name)]['Tag']['original_numerical_value'])) { + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'][$e]['original_numerical_value'] = $tags[strtoupper($tag_name)]['Tag']['original_numerical_value']; + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'][$e]['numerical_value'] = $tags[strtoupper($tag_name)]['Tag']['numerical_value']; + } + // In some cases, tags may not have a numerical_value. Make sure it has one. + if (empty($taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'][$e]['Tag']['numerical_value']) && !empty($entry['numerical_value'])) { + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'][$e]['Tag']['numerical_value'] = $entry['numerical_value']; + } } } if (empty($taxonomies[$namespace]['TaxonomyPredicate'][$p]['TaxonomyEntry'])) { @@ -341,8 +349,17 @@ class DecayingModel extends AppModel 'colour' => 'grey', ); } - $taxonomies[$namespace]['TaxonomyPredicate'][$p]['Tag']['numerical_value'] = $predicate['numerical_value']; $taxonomies[$namespace]['TaxonomyPredicate'][$p]['numerical_predicate'] = true; + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['Tag']['numerical_value'] = $predicate['numerical_value']; + // Take care of numerical_value override + if (isset($tags[strtoupper($tag_name)]['Tag']['original_numerical_value']) && is_numeric($tags[strtoupper($tag_name)]['Tag']['original_numerical_value'])) { + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['original_numerical_value'] = $tags[strtoupper($tag_name)]['Tag']['original_numerical_value']; + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['numerical_value'] = $tags[strtoupper($tag_name)]['Tag']['numerical_value']; + } + // In some cases, tags may not have a numerical_value. Make sure it has one. + if (empty($taxonomies[$namespace]['TaxonomyPredicate'][$p]['Tag']['numerical_value']) && !empty($predicate['numerical_value'])) { + $taxonomies[$namespace]['TaxonomyPredicate'][$p]['Tag']['numerical_value'] = $predicate['numerical_value']; + } } } @@ -358,7 +375,6 @@ class DecayingModel extends AppModel $excluded_taxonomies[$namespace] = array('taxonomy' => $taxonomies[$namespace], 'reason' => __('No predicate')); } } - return array( 'taxonomies' => $taxonomies, 'excluded_taxonomies' => $excluded_taxonomies, diff --git a/app/Model/Tag.php b/app/Model/Tag.php index d672081c3..4b9df3776 100644 --- a/app/Model/Tag.php +++ b/app/Model/Tag.php @@ -69,6 +69,8 @@ class Tag extends AppModel ) ); + private $tagOverrides = false; + public function beforeValidate($options = array()) { parent::beforeValidate(); @@ -133,6 +135,12 @@ class Tag extends AppModel } } + public function afterFind($results, $primary = false) + { + $results = $this->checkForOverride($results); + return $results; + } + public function validateColour($fields) { if (!preg_match('/^#[0-9a-f]{6}$/i', $fields['colour'])) { @@ -413,6 +421,28 @@ class Tag extends AppModel return ($this->saveAll($tags)); } + /** + * Recover user_id from the session and override numerical_values from userSetting + */ + public function checkForOverride($tags) + { + $userId = Configure::read('user_id'); + $this->UserSetting = ClassRegistry::init('UserSetting'); + if ($this->tagOverrides === false && $userId > 0) { + $this->tagOverrides = $this->UserSetting->getTagNumericalValueOverride($userId); + } + foreach ($tags as $k => $tag) { + if (isset($tag['Tag']['name'])) { + $tagName = $tag['Tag']['name']; + if (isset($this->tagOverrides[$tagName]) && is_numeric($this->tagOverrides[$tagName])) { + $tags[$k]['Tag']['original_numerical_value'] = $tags[$k]['Tag']['numerical_value']; + $tags[$k]['Tag']['numerical_value'] = $this->tagOverrides[$tagName]; + } + } + } + return $tags; + } + public function getTagsByName($tag_names, $containTagConnectors = true) { $contain = array('EventTag', 'AttributeTag'); diff --git a/app/Model/Taxonomy.php b/app/Model/Taxonomy.php index 4ce546f7e..dd53372f5 100644 --- a/app/Model/Taxonomy.php +++ b/app/Model/Taxonomy.php @@ -287,7 +287,17 @@ class Taxonomy extends AppModel $tags = $this->Tag->getTagsByName($tag_names, false); if (isset($taxonomy['entries'])) { foreach ($taxonomy['entries'] as $key => $temp) { - $taxonomy['entries'][$key]['existing_tag'] = isset($tags[strtoupper($temp['tag'])]) ? $tags[strtoupper($temp['tag'])] : false; + if (isset($tags[strtoupper($temp['tag'])])) { + $existingTag = $tags[strtoupper($temp['tag'])]; + $taxonomy['entries'][$key]['existing_tag'] = $existingTag; + // numerical_value is overriden at tag level. Propagate the override further up + if (isset($existingTag['Tag']['original_numerical_value'])) { + $taxonomy['entries'][$key]['original_numerical_value'] = $existingTag['Tag']['original_numerical_value']; + $taxonomy['entries'][$key]['numerical_value'] = $existingTag['Tag']['numerical_value']; + } + } else { + $taxonomy['entries'][$key]['existing_tag'] = false; + } } } } diff --git a/app/Model/UserSetting.php b/app/Model/UserSetting.php index c0fb43ec4..8dc179d84 100644 --- a/app/Model/UserSetting.php +++ b/app/Model/UserSetting.php @@ -87,6 +87,11 @@ class UserSetting extends AppModel ) ) ), + 'tag_numerical_value_override' => array( + 'placeholder' => array( + 'false-positive:risk="medium"' => 99 + ) + ), ); // massage the data before we send it off for validation before saving anything @@ -210,6 +215,22 @@ class UserSetting extends AppModel return $parameters; } + public function getTagNumericalValueOverride($userId) + { + $setting = $this->find('first', array( + 'recursive' => -1, + 'conditions' => array( + 'UserSetting.user_id' => $userId, + 'UserSetting.setting' => 'tag_numerical_value_override' + ) + )); + $parameters = array(); + if (!empty($setting)) { + $parameters = $setting['UserSetting']['value']; + } + return $parameters; + } + /* * Check whether the event is something the user is interested (to be alerted on) * diff --git a/app/View/DecayingModel/decaying_tool_basescore.ctp b/app/View/DecayingModel/decaying_tool_basescore.ctp index 0febdd1f0..15e1e92b0 100644 --- a/app/View/DecayingModel/decaying_tool_basescore.ctp +++ b/app/View/DecayingModel/decaying_tool_basescore.ctp @@ -38,10 +38,19 @@
  • - + + + + + +
  • diff --git a/app/View/Taxonomies/view.ctp b/app/View/Taxonomies/view.ctp index 5ee5cacd0..41914d6a0 100644 --- a/app/View/Taxonomies/view.ctp +++ b/app/View/Taxonomies/view.ctp @@ -97,7 +97,16 @@   -   + +   + + + +