X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/8c6fa3fbaccc22127280bf77a48fab5a3ee0716e..46b0747592074017ff0ea4b33d4a7194235886e5:/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp diff --git a/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp b/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp new file mode 100644 index 00000000..77d73b02 --- /dev/null +++ b/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp @@ -0,0 +1,193 @@ +#include // xmlrpc-c devs have missed something :) + +#include "tariffs_methods.h" +#include "rpcconfig.h" +#include "tariff_helper.h" +#include "stg/tariffs.h" +#include "stg/users.h" +#include "stg/admins.h" +#include "stg/admin.h" + +void METHOD_TARIFF_GET::execute(xmlrpc_c::paramList const & paramList, + xmlrpc_c::value * const retvalPtr) +{ +std::string cookie = paramList.getString(0); +std::string name = paramList.getString(1); +paramList.verifyEnd(2); + +std::map structVal; +ADMIN_INFO adminInfo; + +if (config->GetAdminInfo(cookie, &adminInfo)) + { + structVal["result"] = xmlrpc_c::value_boolean(false); + *retvalPtr = xmlrpc_c::value_struct(structVal); + return; + } + +const TARIFF * tariff = tariffs->FindByName(name); + +if (!tariff) + { + structVal["result"] = xmlrpc_c::value_boolean(false); + *retvalPtr = xmlrpc_c::value_struct(structVal); + return; + } + +TARIFF_DATA td(tariff->GetTariffData()); + +TARIFF_HELPER helper(td); + +helper.GetTariffInfo(retvalPtr); +} + +void METHOD_TARIFF_CHG::execute(xmlrpc_c::paramList const & paramList, + xmlrpc_c::value * const retvalPtr) +{ +std::string cookie = paramList.getString(0); +std::string name = paramList.getString(1); +xmlrpc_c::value_struct info(paramList.getStruct(2)); +paramList.verifyEnd(3); + +ADMIN_INFO adminInfo; + +if (config->GetAdminInfo(cookie, &adminInfo)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +ADMIN * admin; + +if (admins->Find(adminInfo.admin, &admin)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +const TARIFF * tariff = tariffs->FindByName(name); + +if (!tariff) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +TARIFF_DATA td(tariff->GetTariffData()); + +TARIFF_HELPER helper(td); + +helper.SetTariffInfo(info); + +if (tariffs->Chg(td, admin)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +*retvalPtr = xmlrpc_c::value_boolean(true); +} + +void METHOD_TARIFFS_GET::execute(xmlrpc_c::paramList const & paramList, + xmlrpc_c::value * const retvalPtr) +{ +std::string cookie = paramList.getString(0); +paramList.verifyEnd(1); + +std::map structVal; +ADMIN_INFO adminInfo; + +if (config->GetAdminInfo(cookie, &adminInfo)) + { + structVal["result"] = xmlrpc_c::value_boolean(false); + *retvalPtr = xmlrpc_c::value_struct(structVal); + return; + } + +std::vector tariffsInfo; + + +std::list dataList; +tariffs->GetTariffsData(&dataList); +std::list::const_iterator it = dataList.begin(); +for (; it != dataList.end(); ++it) + { + xmlrpc_c::value info; + TARIFF_DATA td(*it); // 'cause TARIFF_HELPER work in both ways and take not const referense + TARIFF_HELPER helper(td); + helper.GetTariffInfo(&info); + tariffsInfo.push_back(info); + } + +*retvalPtr = xmlrpc_c::value_array(tariffsInfo); +} + +void METHOD_TARIFF_ADD::execute(xmlrpc_c::paramList const & paramList, + xmlrpc_c::value * const retvalPtr) +{ +std::string cookie = paramList.getString(0); +std::string tariff = paramList.getString(1); +paramList.verifyEnd(2); + +ADMIN_INFO adminInfo; + +if (config->GetAdminInfo(cookie, &adminInfo)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +ADMIN * admin; + +if (admins->Find(adminInfo.admin, &admin)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +if (tariffs->Add(tariff, admin)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +*retvalPtr = xmlrpc_c::value_boolean(true); +} + +void METHOD_TARIFF_DEL::execute(xmlrpc_c::paramList const & paramList, + xmlrpc_c::value * const retvalPtr) +{ +std::string cookie = paramList.getString(0); +std::string tariff = paramList.getString(1); +paramList.verifyEnd(2); + +ADMIN_INFO adminInfo; + +if (config->GetAdminInfo(cookie, &adminInfo)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +ADMIN * admin; + +if (admins->Find(adminInfo.admin, &admin)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +if (users->TariffInUse(tariff)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +if (tariffs->Del(tariff, admin)) + { + *retvalPtr = xmlrpc_c::value_boolean(false); + return; + } + +*retvalPtr = xmlrpc_c::value_boolean(true); +}