]> git.stg.codes - stg.git/blob - projects/stargazer/plugins/configuration/rpcconfig/tariffs_methods.cpp
Fix build on Darwin.
[stg.git] / projects / stargazer / plugins / configuration / rpcconfig / tariffs_methods.cpp
1 #include <ostream> // xmlrpc-c devs have missed something :)
2
3 #include "tariffs_methods.h"
4 #include "rpcconfig.h"
5 #include "tariff_helper.h"
6 #include "stg/tariffs.h"
7 #include "stg/users.h"
8 #include "stg/admins.h"
9 #include "stg/admin.h"
10
11 void METHOD_TARIFF_GET::execute(xmlrpc_c::paramList const & paramList,
12                                 xmlrpc_c::value *   const   retvalPtr)
13 {
14 std::string cookie = paramList.getString(0);
15 std::string name = paramList.getString(1);
16 paramList.verifyEnd(2);
17
18 std::map<std::string, xmlrpc_c::value> structVal;
19 ADMIN_INFO adminInfo;
20
21 if (config->GetAdminInfo(cookie, &adminInfo))
22     {
23     structVal["result"] = xmlrpc_c::value_boolean(false);
24     *retvalPtr = xmlrpc_c::value_struct(structVal);
25     return;
26     }
27
28 const TARIFF * tariff = tariffs->FindByName(name);
29
30 if (!tariff)
31     {
32     structVal["result"] = xmlrpc_c::value_boolean(false);
33     *retvalPtr = xmlrpc_c::value_struct(structVal);
34     return;
35     }
36
37 TARIFF_DATA td(tariff->GetTariffData());
38
39 TARIFF_HELPER helper(td);
40
41 helper.GetTariffInfo(retvalPtr);
42 }
43
44 void METHOD_TARIFF_CHG::execute(xmlrpc_c::paramList const & paramList,
45                                 xmlrpc_c::value *   const   retvalPtr)
46 {
47 std::string cookie = paramList.getString(0);
48 std::string name = paramList.getString(1);
49 xmlrpc_c::value_struct info(paramList.getStruct(2));
50 paramList.verifyEnd(3);
51
52 ADMIN_INFO adminInfo;
53
54 if (config->GetAdminInfo(cookie, &adminInfo))
55     {
56     *retvalPtr = xmlrpc_c::value_boolean(false);
57     return;
58     }
59
60 ADMIN * admin;
61
62 if (admins->Find(adminInfo.admin, &admin))
63     {
64     *retvalPtr = xmlrpc_c::value_boolean(false);
65     return;
66     }
67
68 const TARIFF * tariff = tariffs->FindByName(name);
69
70 if (!tariff)
71     {
72     *retvalPtr = xmlrpc_c::value_boolean(false);
73     return;
74     }
75
76 TARIFF_DATA td(tariff->GetTariffData());
77
78 TARIFF_HELPER helper(td);
79
80 helper.SetTariffInfo(info);
81
82 if (tariffs->Chg(td, admin))
83     {
84     *retvalPtr = xmlrpc_c::value_boolean(false);
85     return;
86     }
87
88 *retvalPtr = xmlrpc_c::value_boolean(true);
89 }
90
91 void METHOD_TARIFFS_GET::execute(xmlrpc_c::paramList const & paramList,
92                                  xmlrpc_c::value *   const   retvalPtr)
93 {
94 std::string cookie = paramList.getString(0);
95 paramList.verifyEnd(1);
96
97 std::map<std::string, xmlrpc_c::value> structVal;
98 ADMIN_INFO adminInfo;
99
100 if (config->GetAdminInfo(cookie, &adminInfo))
101     {
102     structVal["result"] = xmlrpc_c::value_boolean(false);
103     *retvalPtr = xmlrpc_c::value_struct(structVal);
104     return;
105     }
106
107 std::vector<xmlrpc_c::value> tariffsInfo;
108
109
110 std::list<TARIFF_DATA> dataList;
111 tariffs->GetTariffsData(&dataList);
112 std::list<TARIFF_DATA>::const_iterator it = dataList.begin();
113 for (; it != dataList.end(); ++it)
114     {
115     xmlrpc_c::value info;
116     TARIFF_DATA td(*it); // 'cause TARIFF_HELPER work in both ways and take not const referense
117     TARIFF_HELPER helper(td);
118     helper.GetTariffInfo(&info);
119     tariffsInfo.push_back(info);
120     }
121
122 *retvalPtr = xmlrpc_c::value_array(tariffsInfo);
123 }
124
125 void METHOD_TARIFF_ADD::execute(xmlrpc_c::paramList const & paramList,
126                                 xmlrpc_c::value *   const   retvalPtr)
127 {
128 std::string cookie = paramList.getString(0);
129 std::string tariff = paramList.getString(1);
130 paramList.verifyEnd(2);
131
132 ADMIN_INFO adminInfo;
133
134 if (config->GetAdminInfo(cookie, &adminInfo))
135     {
136     *retvalPtr = xmlrpc_c::value_boolean(false);
137     return;
138     }
139
140 ADMIN * admin;
141
142 if (admins->Find(adminInfo.admin, &admin))
143     {
144     *retvalPtr = xmlrpc_c::value_boolean(false);
145     return;
146     }
147
148 if (tariffs->Add(tariff, admin))
149     {
150     *retvalPtr = xmlrpc_c::value_boolean(false);
151     return;
152     }
153
154 *retvalPtr = xmlrpc_c::value_boolean(true);
155 }
156
157 void METHOD_TARIFF_DEL::execute(xmlrpc_c::paramList const & paramList,
158                                 xmlrpc_c::value *   const   retvalPtr)
159 {
160 std::string cookie = paramList.getString(0);
161 std::string tariff = paramList.getString(1);
162 paramList.verifyEnd(2);
163
164 ADMIN_INFO adminInfo;
165
166 if (config->GetAdminInfo(cookie, &adminInfo))
167     {
168     *retvalPtr = xmlrpc_c::value_boolean(false);
169     return;
170     }
171
172 ADMIN * admin;
173
174 if (admins->Find(adminInfo.admin, &admin))
175     {
176     *retvalPtr = xmlrpc_c::value_boolean(false);
177     return;
178     }
179
180 if (users->TariffInUse(tariff))
181     {
182     *retvalPtr = xmlrpc_c::value_boolean(false);
183     return;
184     }
185
186 if (tariffs->Del(tariff, admin))
187     {
188     *retvalPtr = xmlrpc_c::value_boolean(false);
189     return;
190     }
191
192 *retvalPtr = xmlrpc_c::value_boolean(true);
193 }