summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/src/database.cc25
-rw-r--r--server/src/database.h5
-rw-r--r--server/src/server.cc9
3 files changed, 35 insertions, 4 deletions
diff --git a/server/src/database.cc b/server/src/database.cc
index 62454a2..35d9214 100644
--- a/server/src/database.cc
+++ b/server/src/database.cc
@@ -143,6 +143,29 @@ Values Database::getValues(std::string cpr,
return values;
}
+bool Database::checkMacro(std::string cpr,
+ std::string macro,
+ time_t oldest)
+{
+ pqxx::work W(c);
+
+ std::stringstream query;
+ query << "SELECT oid";
+ query << " FROM transactions";
+ query << " WHERE cpr = '" << cpr << "'";
+ query << " AND macro = '" << macro << "'";
+ query << " AND timestamp >= " << oldest;
+ query << " ORDER BY timestamp";
+
+ try {
+ pqxx::result R = W.exec(query.str());
+
+ return R.size() != 0;
+ } catch( ... ) {
+ return false;
+ }
+}
+
/*
-- As root:
-- #createuser -P -h localhost -U postgres
@@ -160,7 +183,7 @@ DROP TABLE transactions;
CREATE TABLE transactions
(
"cpr" varchar(11),
- "makro" text,
+ "macro" text,
"version" text,
"timestamp" bigint,
"user" text
diff --git a/server/src/database.h b/server/src/database.h
index 31d69fc..85f8cd7 100644
--- a/server/src/database.h
+++ b/server/src/database.h
@@ -65,6 +65,11 @@ public:
Fieldnames &fieldnames,
time_t oldest = 0);
+ // Check if a macro has been committed.
+ bool checkMacro(std::string cpr,
+ std::string macro,
+ time_t oldest = 0);
+
// Connect to the db
void connect() {}
diff --git a/server/src/server.cc b/server/src/server.cc
index a94a0f8..c0ec223 100644
--- a/server/src/server.cc
+++ b/server/src/server.cc
@@ -168,7 +168,10 @@ static void connection(TCPSocket &socket)
while(mi2 != templ->course.macroes.end()) {
Macro &macro = (*mi2);
- answer += " <macro name=\"" + macro.attributes["name"] + "\">\n";
+ answer += " <macro name=\"" + macro.attributes["name"] + "\" completed=";
+ if(db.checkMacro(transaction.cpr, macro.attributes["name"])) answer += "\"true\"";
+ else answer += "\"false\"";
+ answer += ">\n";
if(macro.attributes["name"] == request.macro) {
@@ -196,7 +199,7 @@ static void connection(TCPSocket &socket)
i++;
}
} catch(std::exception &e) {
- socket.write(error_box( e.what()));
+ socket.write(error_box(xml_encode(e.what())));
}
socket.write("</pracro>\n");
@@ -280,7 +283,7 @@ void server()
char request[] =
"<?xml version='1.0' encoding='UTF-8'?>\n"
"<pracro cpr=\"2003791613\" version=\"1.0\">\n"
- " <request macro=\"example2\" course=\"example2\"/>\n"
+ " <request macro=\"example\" course=\"example\"/>\n"
"</pracro>\n";
int main()