From 582cafc8666f6079ef09c2b35bfb8fb3db0a18ee Mon Sep 17 00:00:00 2001 From: Michael Friedrich Date: Tue, 1 Oct 2013 17:16:36 +0200 Subject: [PATCH] db_ido: Add contact_addresses. refs #4378 --- lib/db_ido/userdbobject.cpp | 34 ++++++++++++++++++++++++++++++++++ lib/db_ido/userdbobject.h | 2 ++ 2 files changed, 36 insertions(+) diff --git a/lib/db_ido/userdbobject.cpp b/lib/db_ido/userdbobject.cpp index a3a007f39..ad0278a2d 100644 --- a/lib/db_ido/userdbobject.cpp +++ b/lib/db_ido/userdbobject.cpp @@ -22,7 +22,9 @@ #include "db_ido/dbvalue.h" #include "icinga/user.h" #include "icinga/notification.h" +#include "base/convert.h" #include "base/objectlock.h" +#include "base/logger_fwd.h" #include using namespace icinga; @@ -83,6 +85,38 @@ Dictionary::Ptr UserDbObject::GetStatusFields(void) const return fields; } +void UserDbObject::OnConfigUpdate(void) +{ + Dictionary::Ptr fields = boost::make_shared(); + User::Ptr user = static_pointer_cast(GetObject()); + + /* contact addresses */ + Log(LogDebug, "db_ido", "contact addresses for '" + user->GetName() + "'"); + + Dictionary::Ptr macros = user->GetMacros(); + + if (macros) { /* This is sparta. */ + for (int i = 1; i <= 6; i++) { + String key = "address" + Convert::ToString(i); + String val = macros->Get(key); + + if (val.IsEmpty()) + continue; + + fields->Set("contact_id", DbValue::FromObjectInsertID(user)); + fields->Set("address_number", i); + fields->Set("address", val); + fields->Set("instance_id", 0); /* DbConnection class fills in real ID */ + + DbQuery query; + query.Type = DbQueryInsert; + query.Table = "contact_addresses"; + query.Fields = fields; + OnQuery(query); + } + } +} + bool UserDbObject::IsStatusAttribute(const String& attribute) const { return (attribute == "last_notification"); diff --git a/lib/db_ido/userdbobject.h b/lib/db_ido/userdbobject.h index 7fd6815ed..762621649 100644 --- a/lib/db_ido/userdbobject.h +++ b/lib/db_ido/userdbobject.h @@ -41,6 +41,8 @@ public: virtual Dictionary::Ptr GetConfigFields(void) const; virtual Dictionary::Ptr GetStatusFields(void) const; + virtual void OnConfigUpdate(void); + virtual bool IsStatusAttribute(const String& attribute) const; }; -- 2.40.0