Fotobot
Get data from your photovoltaic plant
userscontroller.cpp
Go to the documentation of this file.
1 
7 #include "userscontroller.h"
8 #include "invertorscontroller.h"
9 #include "static.h"
10 #include <QVariant>
11 #include <QDateTime>
12 
14  qRegisterMetaType<DBT_USERS>();
15  connect(this, SIGNAL(saveUser(DBT_USERS)),
16  Static::db, SLOT(saveUser(DBT_USERS)),
17  Qt::QueuedConnection);
18  connect(this, SIGNAL(deleteUser(QString)),
19  Static::db, SLOT(deleteUser(QString)),
20  Qt::QueuedConnection);
21 }
22 
23 void UsersController::servicePrivate(HttpRequest& request) {
24  QByteArray action = request.getParameter("action");
25  if (action.startsWith("add")) {
26  actionAdd(request); return;
27  } else if(action.startsWith("edit")) {
28  actionEdit(request); return;
29  } else if(action.startsWith("delete")) {
30  actionDelete(request); return;
31  }
32 
35  QList<DBT_USERS> users = Static::db->users();
36  write(QString("<h2>%1</h2>\n").arg(tr("Users")));
37  write(QString("<a href=\"/users?action=add\">%1</a>\n").arg(tr("Add an user")));
38  write("<table>\n");
39  write(QString("<tr>"));
40  write(QString("<th></th>"));
41  write(QString("<th>%1</th>").arg("Username"));
42  write(QString("<th>%1</th>").arg("Can acess data"));
43  write(QString("<th>%1</th>").arg("Can change settings"));
44  write(QString("</tr>"));
45 
46  QList<DBT_USERS>::const_iterator i;
47  for(i = users.constBegin(); i != users.constEnd(); ++i) {
48  const DBT_USERS& l = *i;
49  write(QString("<tr>"));
50  write(QString("<td>"
51  "<a href=\"/users?action=edit&user=%1\">%2</a> "
52  "<a href=\"/users?action=delete&user=%1\">%3</a>"
53  "</td>")
54  .arg(l.user)
55  .arg(tr("Edit"))
56  .arg(tr("Delete"))
57  );
58  write(QString("<td>%1</td>").arg( (l.user) ));
59  write(QString("<td>%1</td>").arg( (l.can_access_data) ? "&#x2713;" : ""));
60  write(QString("<td>%2</td>").arg( (l.can_change_settings) ? "&#x2713;" : ""));
61  write(QString("</td>\n"));
62  }
63 
64  write("</table>\n");
65 }
66 
68  QString s;
69  s += QString("<input type=\"hidden\" name=\"id\" value=\"%1\" />\n").arg(user.user);
70  s += QString("<tr>");
71  s += QString(" <td><label for=\"user\">%1</td>").arg(tr("Username"));
72  s += QString(" <td><input type=\"text\" name=\"user\" id=\"user\" value=\"%1\"></td>").arg(user.user);
73  s += QString(" </tr>");
74 
75  s += QString("<tr>");
76  s += QString(" <td><label for=\"password\">%1</td>").arg(tr("Password"));
77  s += QString(" <td><input type=\"text\" name=\"password\" id=\"password\"></td>");
78  s += QString(" </tr>");
79 
80  s += QString("<tr>");
81  s += QString(" <td><label for=\"can_access_data\">%1</td>").arg(tr("Can access data"));
82  s += QString(" <td><input type=\"checkbox\" name=\"can_access_data\" id=\"can_access_data\" %1></td>").arg((user.can_access_data) ? "checked=\"checked\"" : "");
83  s += QString(" </tr>");
84 
85  s += QString("<tr>");
86  s += QString(" <td><label for=\"can_change_settings\">%1</td>").arg(tr("Can change settings"));
87  s += QString(" <td><input type=\"checkbox\" name=\"can_change_settings\" id=\"can_change_settings\" %1></td>").arg((user.can_change_settings) ? "checked=\"checked\"" : "");
88  s += QString(" </tr>");
89 
90  return s;
91 }
92 
93 void UsersController::readForm(DBT_USERS& user, HttpRequest& request) {
94  user.id = request.getParameter("id");
95  user.user = request.getParameter("user");
96  user.password = request.getParameter("password");
97  user.can_access_data = !request.getParameter("can_access_data").isEmpty();
98  user.can_change_settings = !request.getParameter("can_change_settings").isEmpty();
99 }
100 
101 
105 void UsersController::actionAdd(HttpRequest& request) {
106  QByteArray action = request.getParameter("action");
107  write(QString("<h3>%1</h3>\n").arg(tr("Add an user")));
108  write("<form method=\"post\">\n"
109  "<input type=\"hidden\" name=\"action\" value=\"add2\" />\n");
110  DBT_USERS user;
111  readForm(user, request);
112  write("<table class=\"formTable\">");
113  write(getEditFormContents(user));
114  write("</table>");
115  write(QString("<input type=\"submit\" value=\"%1\">\n"
116  "</form>\n").arg(tr("Add")));
117  if (action == "add2") {
119  user.id = QString();
120  emit saveUser(user);
121  QString location = QString("/users?message=%1").arg(percentEncode(tr("User added.")));
122  redirect(location);
123  }
124 }
125 
126 
130 void UsersController::actionEdit(HttpRequest& request) {
131  QByteArray action = request.getParameter("action");
132  DBT_USERS user;
134  write(QString("<h3>%1</h3>\n").arg(tr("Edit an user")));
135  write("<form method=\"post\">\n"
136  "<input type=\"hidden\" name=\"action\" value=\"edit2\" />\n");
137  if (action == "edit") {
138  QByteArray userid = request.getParameter("user");
139  if(userid.isEmpty()) {
140  redirect(QString("/user?message=%1").arg(percentEncode(tr("Error: Invalid user ID."))));
141  return;
142  }
143  QList<DBT_USERS> users = Static::db->users(userid);
144  if(users.empty()) {
145  redirect(QString("/users?message=%1").arg(percentEncode(tr("Error: no such user found."))));
146  return;
147  }
148  write("<table class=\"formTable\">");
149  write(getEditFormContents(users.at(0)));
150  write("</table>");
151  } else {
152  readForm(user, request);
153  write("<table class=\"formTable\">");
154  write(getEditFormContents(user));
155  write("</table>");
156  }
157  write(QString("<input type=\"submit\" value=\"%1\"></form>\n").arg(tr("Save")));
158  if (action == "edit2") {
160  if(!user.id.isEmpty()) {
161  emit saveUser(user);
162  QString location = QString("/users?message=%1").arg(percentEncode(tr("User edited.")));
163  redirect(location);
164  } else {
165  write(QString("<p>%1</p>").arg(tr("Error: User definition invalid.")));
166  }
167  }
168 }
169 
173 void UsersController::actionDelete(HttpRequest& request) {
174  write(QString("<h3>%1</h3>\n").arg(tr("Delete an user ")));
175  QString location;
176  QByteArray userid = request.getParameter("user");
177  if(!userid.isEmpty()) {
178  emit deleteUser(userid);
179  location = QString("/users?message=%1").arg(percentEncode(tr("User deleted.")));
180  } else {
181  location = QString("/users?message=%1").arg(percentEncode(tr("Error: Invalid user ID. User not deleted.")));
182  }
183  redirect(location);
184 }
185 
QList< DBT_USERS > users(const QString &user=QString())
Returs list of users or selected user.
Definition: database.cpp:274
static void readForm(DBT_USERS &user, HttpRequest &request)
void actionAdd(HttpRequest &request)
void actionEdit(HttpRequest &request)
void actionDelete(HttpRequest &request)
static QString getEditFormContents(const DBT_USERS &line=DBT_USERS())
Class describing database table USERS.
void servicePrivate(HttpRequest &request)