]> granicus.if.org Git - icinga2/commitdiff
db_ido: Add contact_addresses.
authorMichael Friedrich <michael.friedrich@netways.de>
Tue, 1 Oct 2013 15:16:36 +0000 (17:16 +0200)
committerMichael Friedrich <michael.friedrich@netways.de>
Tue, 1 Oct 2013 15:16:36 +0000 (17:16 +0200)
refs #4378

lib/db_ido/userdbobject.cpp
lib/db_ido/userdbobject.h

index a3a007f39e79dd10889677894bb0c1c88abd6724..ad0278a2d179a98ac70870365aaae1bb0996a2a6 100644 (file)
@@ -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 <boost/foreach.hpp>
 
 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<Dictionary>();
+       User::Ptr user = static_pointer_cast<User>(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");
index 7fd6815eda74975e2aca413a24540fe3aa501e42..76262164994ac915613b6bfc3942fdda473a08f3 100644 (file)
@@ -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;
 };