diff options
| -rw-r--r-- | server/src/database.cc | 25 | ||||
| -rw-r--r-- | server/src/database.h | 5 | ||||
| -rw-r--r-- | server/src/server.cc | 9 | 
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 ¯o = (*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() | 
