diff --git a/pandora_console/extras/pandoradb_migrate_v3.2_to_v4.0.sql b/pandora_console/extras/pandoradb_migrate_v3.2_to_v4.0.sql
index dd2a61741a..08f1aacedf 100644
--- a/pandora_console/extras/pandoradb_migrate_v3.2_to_v4.0.sql
+++ b/pandora_console/extras/pandoradb_migrate_v3.2_to_v4.0.sql
@@ -169,3 +169,9 @@ CREATE TABLE IF NOT EXISTS `ttag_event` (
PRIMARY KEY (id_tag, id_evento),
KEY `idx_id_evento` (`id_evento`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- -----------------------------------------------------
+-- Table `tagente_modulo`
+-- -----------------------------------------------------
+
+ALTER TABLE `tagente_modulo` ADD COLUMN (`unit` text DEFAULT '');
diff --git a/pandora_console/godmode/agentes/configurar_agente.php b/pandora_console/godmode/agentes/configurar_agente.php
index 00fd7bba7e..9969aede15 100644
--- a/pandora_console/godmode/agentes/configurar_agente.php
+++ b/pandora_console/godmode/agentes/configurar_agente.php
@@ -110,6 +110,7 @@ $cascade_protection = 0;
$icon_path = '';
$update_gis_data = 0;
$unit = "";
+$id_tag = array();
$create_agent = (bool) get_parameter ('create_agent');
@@ -616,6 +617,7 @@ if ($update_module || $create_module) {
$max_critical = (float) get_parameter ('max_critical');
$ff_event = (int) get_parameter ('ff_event');
$unit = (string) get_parameter('unit');
+ $id_tag = (array) get_parameter('id_tag');
$active_snmp_v3 = get_parameter('active_snmp_v3');
if ($active_snmp_v3) {
@@ -668,7 +670,7 @@ if ($update_module) {
'unit' => $unit);
$result = modules_update_agent_module ($id_agent_module,
- $values);
+ $values, false, $id_tag);
if ($result === false) {
echo '
'.__('There was a problem updating module').'
';
@@ -746,7 +748,7 @@ if ($create_module) {
'unit' => $unit
);
- $id_agent_module = modules_create_agent_module ($id_agente, $name, $values);
+ $id_agent_module = modules_create_agent_module ($id_agente, $name, $values, false, $id_tag);
if ($id_agent_module === false) {
echo ''.__('There was a problem adding module').'
';
@@ -819,6 +821,10 @@ if ($delete_module) { // DELETE agent module !
if (alerts_delete_alert_agent_module($id_borrar_modulo) === false)
$error++;
+ $result = db_process_delete_temp('ttag_module', 'id_agente_modulo', $id_borrar_modulo);
+ if ($result === false)
+ $error++;
+
//Check for errors
if ($error != 0) {
diff --git a/pandora_console/godmode/agentes/module_manager_editor.php b/pandora_console/godmode/agentes/module_manager_editor.php
index 26e4613817..22ef2b0a8b 100644
--- a/pandora_console/godmode/agentes/module_manager_editor.php
+++ b/pandora_console/godmode/agentes/module_manager_editor.php
@@ -173,6 +173,8 @@ if ($id_agent_module) {
$min_critical = $module['min_critical'];
$max_critical = $module['max_critical'];
$ff_event = $module['min_ff_event'];
+ // Select tag info.
+ $id_tag = tags_get_module_tags ($id_agent_module);
}
else {
if (!isset ($moduletype)) {
diff --git a/pandora_console/godmode/agentes/module_manager_editor_common.php b/pandora_console/godmode/agentes/module_manager_editor_common.php
index 3910bc9c96..1015012447 100644
--- a/pandora_console/godmode/agentes/module_manager_editor_common.php
+++ b/pandora_console/godmode/agentes/module_manager_editor_common.php
@@ -229,4 +229,9 @@ $table_advanced->colspan[4][1] = 3;
$table_advanced->data[5][0] = __('Unit');
$table_advanced->data[5][1] = html_print_input_text ('unit', $unit,
'', 20, 65, true);
+/* Tags */
+$table_advanced->data[6][0] = __('Tag');
+$table_advanced->data[6][1] = html_print_select_from_sql ('SELECT id_tag, name FROM ttag ORDER BY name',
+ 'id_tag[]', $id_tag, '',__('None'),'0', true, true, false, false);
+
?>
diff --git a/pandora_console/godmode/tag/edit_tag.php b/pandora_console/godmode/tag/edit_tag.php
index 8d631b8a90..720ebf5fa6 100644
--- a/pandora_console/godmode/tag/edit_tag.php
+++ b/pandora_console/godmode/tag/edit_tag.php
@@ -19,7 +19,7 @@ check_login ();
require_once ($config['homedir'].'/include/functions_tags.php');
if (! check_acl ($config['id_user'], 0, "PM") && ! is_user_admin ($config['id_user'])) {
- db_pandora_audit("ACL Violation", "Trying to access Edit Skin");
+ db_pandora_audit("ACL Violation", "Trying to access Edit Tag");
require ("general/noaccess.php");
return;
}
@@ -44,12 +44,12 @@ if ($update_tag && $id_tag != 0) {
$values['description'] = $description_tag;
$values['url'] = $url_tag;
- $result = tags_update_tag($values);
+ $result = tags_update_tag($values, 'id_tag = ' . $id_tag);
if ($result === false) {
echo ''.__('Error updating tag').'
';
} else {
- echo ''.__('Successfully updated skin').'
';
+ echo ''.__('Successfully updated tag').'
';
}
}
diff --git a/pandora_console/godmode/tag/tag.php b/pandora_console/godmode/tag/tag.php
index 6d8e0d26cf..115311cb3a 100644
--- a/pandora_console/godmode/tag/tag.php
+++ b/pandora_console/godmode/tag/tag.php
@@ -45,10 +45,10 @@ if (is_ajax ()) {
echo ''.$tag['name'].'
';
echo ''.__('Number of modules').': ' .
- tags_get_local_modules_count($id);
+ tags_get_local_modules_count($id_tag);
echo '
';
echo ''.__('Number of policy modules').': ' .
- tags_get_policy_modules_count($id);
+ tags_get_policy_modules_count($id_tag);
return;
}
@@ -71,14 +71,20 @@ if ($delete != 0) {
}
}
+// statements for pagination
+$url = ui_get_url_refresh ();
+$total_tags = tags_get_tag_count();
+
+$filter['offset'] = (int) get_parameter ('offset');
+$filter['limit'] = (int) $config['block_size'];
// Search action: This will filter the display tag view
$result = false;
// Filtered view?
if ($search != 0) {
- $result = tags_search_tag($tag_name);
+ $result = tags_search_tag($tag_name, $filter);
}
else{
- $result = tags_search_tag();
+ $result = tags_search_tag(false, $filter);
}
// Form to add new tags or search tags
@@ -100,6 +106,9 @@ echo "";
echo "";
echo "";
+// Prepare pagination
+ui_pagination ($total_tags, $url);
+
// Display tags previously filtered or not
$rowPair = true;
$iterator = 0;
@@ -133,7 +142,7 @@ if (!empty($result)){
$data = array ();
$data[0] = $tag["name"];
- $data[1] = $tag["description"];
+ $data[1] = ui_print_truncate_text($tag["description"], 25, false);
$data[2] = '' . $tag["url"] . '';
$data[3] = ' ' .
diff --git a/pandora_console/include/functions_modules.php b/pandora_console/include/functions_modules.php
index a74e1dfe46..a53f594ed5 100644
--- a/pandora_console/include/functions_modules.php
+++ b/pandora_console/include/functions_modules.php
@@ -21,6 +21,7 @@
include_once($config['homedir'] . "/include/functions_agents.php");
include_once($config['homedir'] . '/include/functions_users.php');
+include_once($config['homedir'] . '/include/functions_tags.php');
/**
* Copy a module defined in an agent to other agent.
@@ -172,17 +173,23 @@ function modules_delete_agent_module ($id_agent_module) {
*
* @param mixed Agent module id to be deleted. Accepts an array with ids.
* @param array Values to update.
- *
+ * @param mixed Tag's module array or false.
+ *
* @return True if the module was updated. False if not.
*/
-function modules_update_agent_module ($id, $values, $onlyNoDeletePending = false) {
+function modules_update_agent_module ($id, $values, $onlyNoDeletePending = false,
+ $tags = false) {
if (! is_array ($values) || empty ($values))
return false;
if (isset ($values['nombre']) && empty ($values['nombre']))
return false;
-
-
+
+ $return_tag = tags_update_module_tag ($id, $tags);
+
+ if ($return_tag === false){
+ return false;
+ }
if ($onlyNoDeletePending) {
return (@db_process_sql_update ('tagente_modulo', $values,
@@ -201,10 +208,12 @@ function modules_update_agent_module ($id, $values, $onlyNoDeletePending = false
* @param int Module name id.
* @param array Extra values for the module.
* @param bool Disable the ACL checking, for default false.
- *
+ * @param mixed Array with tag's ids or false.
+ *
* @return New module id if the module was created. False if not.
*/
-function modules_create_agent_module ($id_agent, $name, $values = false, $disableACL = false) {
+function modules_create_agent_module ($id_agent, $name, $values = false, $disableACL = false,
+ $tags = false) {
global $config;
if (!$disableACL) {
@@ -224,6 +233,15 @@ function modules_create_agent_module ($id_agent, $name, $values = false, $disabl
if ($id_agent_module === false)
return false;
+ $return_tag = tags_insert_module_tag ($id_agent_module, $tags);
+
+ if ($return_tag === false){
+ db_process_sql_delete ('tagente_modulo',
+ array ('id_agente_modulo' => $id_agent_module));
+
+ return false;
+ }
+
switch ($config["dbtype"]) {
case "mysql":
$result = db_process_sql_insert ('tagente_estado',
diff --git a/pandora_console/include/functions_tags.php b/pandora_console/include/functions_tags.php
index 51ed7824d4..c53a87e750 100644
--- a/pandora_console/include/functions_tags.php
+++ b/pandora_console/include/functions_tags.php
@@ -23,10 +23,11 @@
* Find a tag searching by tag's or description name.
*
* @param string $tag_name_description Name or description of the tag that it's currently searched.
- *
+ * @param array $filter Array with pagination parameters.
+ *
* @return mixed Returns an array with the tag selected by name or false.
*/
-function tags_search_tag ($tag_name_description = false) {
+function tags_search_tag ($tag_name_description = false, $filter = false) {
global $config;
if ($tag_name_description){
@@ -41,15 +42,27 @@ function tags_search_tag ($tag_name_description = false) {
break;
case "oracle":
$sql = 'SELECT * FROM ttag WHERE (UPPER(name) LIKE UPPER (\'%'. $tag_name_description .'%\') OR
- UPPER(description) LIKE UPPER (\'%'. $tag_name_description .'%\'))';
+ UPPER(dbms_lob.substr(description, 4000, 1)) LIKE UPPER (\'%'. $tag_name_description .'%\'))';
break;
}
}
else{
$sql = 'SELECT * FROM ttag';
}
- $result = db_get_all_rows_sql ($sql);
-
+ switch ($config["dbtype"]) {
+ case "mysql":
+ case "postgresql":
+ $result = db_get_all_rows_sql ($sql . ' LIMIT ' . $filter['offset'] . ',' . $filter['limit']);
+ break;
+ case "oracle":
+ $result = oracle_recode_query ($sql, $filter, 'AND', false);
+ if ($components != false) {
+ for ($i=0; $i < count($components); $i++) {
+ unset($result[$i]['rnum']);
+ }
+ }
+ break;
+ }
if ($result === false)
return array (); //Return an empty array
else
@@ -123,8 +136,8 @@ function tags_get_url($id){
* @return mixed Int with the tag's count or false.
*/
function tags_get_modules_count($id){
- $num_modules = (int)db_get_value_filter('count(*)', 'ttag_module', 'id_tag', $id);
- $num_policy_modules = (int)db_get_value_filter('count(*)', 'ttag_policy_module', 'id_tag', $id);
+ $num_modules = (int)db_get_value_filter('count(*)', 'ttag_module', array('id_tag' => $id));
+ $num_policy_modules = (int)db_get_value_filter('count(*)', 'ttag_policy_module', array('id_tag' => $id));
return $num_modules + $num_policy_modules;
}
@@ -137,7 +150,7 @@ function tags_get_modules_count($id){
* @return mixed Int with the tag's count or false.
*/
function tags_get_local_modules_count($id){
- $num_modules = (int)db_get_value_filter('count(*)', 'ttag_module', 'id_tag', $id);
+ $num_modules = (int)db_get_value_filter('count(*)', 'ttag_module', array('id_tag' => $id));
return $num_modules;
}
@@ -150,7 +163,7 @@ function tags_get_local_modules_count($id){
* @return mixed Int with the tag's count or false.
*/
function tags_get_policy_modules_count($id){
- $num_policy_modules = (int)db_get_value_filter('count(*)', 'ttag_policy_module', 'id_tag', $id);
+ $num_policy_modules = (int)db_get_value_filter('count(*)', 'ttag_policy_module', array('id_tag' => $id));
return $num_policy_modules;
}
@@ -161,11 +174,12 @@ function tags_get_policy_modules_count($id){
* Updates a tag by id.
*
* @param array $id Int with tag id info.
+ * @param string $where Where clause to update record.
*
* @return bool True or false if something goes wrong.
*/
-function tags_update_tag($values){
- return db_process_sql_update ('ttag', $values);
+function tags_update_tag($values, $where){
+ return db_process_sql_update ('ttag', $values, $where);
}
/**
@@ -200,3 +214,111 @@ function tags_delete_tag ($id_tag){
}
}
+
+/**
+ * Get tag's total count.
+ *
+ * @return mixed Int with the tag's count.
+ */
+function tags_get_tag_count(){
+ return (int)db_get_value('count(*)', 'ttag');
+}
+
+/**
+ * Inserts tag's array of a module.
+ *
+ * @param int $id_agent_module Module's id.
+ * @param array $tags Array with tags to associate to the module.
+ *
+ * @return bool True or false if something goes wrong.
+ */
+function tags_insert_module_tag ($id_agent_module, $tags){
+ $errn = 0;
+
+ $values = array();
+ foreach ($tags as $tag){
+ //Protect against default insert
+ if (empty($tag))
+ continue;
+
+ $values['id_tag'] = $tag;
+ $values['id_agente_modulo'] = $id_agent_module;
+ $result_tag = db_process_sql_insert('ttag_module', $values, false);
+ if ($result_tag === false)
+ $errn++;
+ }
+
+ if ($errn > 0){
+ db_process_sql_rollback();
+ return false;
+ }
+ else{
+ db_process_sql_commit();
+ return true;
+ }
+}
+
+/**
+ * Updates tag's array of a module.
+ *
+ * @param int $id_agent_module Module's id.
+ * @param array $tags Array with tags to associate to the module.
+ *
+ * @return bool True or false if something goes wrong.
+ */
+function tags_update_module_tag ($id_agent_module, $tags){
+ $errn = 0;
+
+ /* First delete module tag entries */
+ $result_tag = db_process_delete_temp ('ttag_module', 'id_agente_modulo', $id_agent_module);
+
+ if ($result_tag === false){
+ db_process_sql_rollback();
+ return false;
+ }
+
+ $values = array();
+ foreach ($tags as $tag){
+ $values['id_tag'] = $tag;
+ $values['id_agente_modulo'] = $id_agent_module;
+ $result_tag = db_process_sql_insert('ttag_module', $values, false);
+ if ($result_tag === false)
+ $errn++;
+ }
+
+ if ($errn > 0){
+ db_process_sql_rollback();
+ return false;
+ }
+ else{
+ db_process_sql_commit();
+ return true;
+ }
+
+}
+
+/**
+ * Select all tags of a module.
+ *
+ * @param int $id_agent_module Module's id.
+ *
+ * @return mixed Array with module tags or false if something goes wrong.
+ */
+function tags_get_module_tags ($id_agent_module){
+ if (empty($id_agent_module))
+ return false;
+
+ $tags = db_get_all_rows_filter('ttag_module', array('id_agente_modulo' => $id_agent_module), false);
+
+ if ($tags === false)
+ return false;
+
+ $return = array();
+ foreach ($tags as $tag){
+ $return[] = $tag['id_tag'];
+ }
+
+ return $return;
+}
+
+?>
|