summaryrefslogtreecommitdiff
path: root/server/src/transactionhandler.cc
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/transactionhandler.cc')
-rw-r--r--server/src/transactionhandler.cc71
1 files changed, 46 insertions, 25 deletions
diff --git a/server/src/transactionhandler.cc b/server/src/transactionhandler.cc
index 5203ee2..6ab3d89 100644
--- a/server/src/transactionhandler.cc
+++ b/server/src/transactionhandler.cc
@@ -28,18 +28,27 @@
#include "transactionhandler.h"
#include "macroparser.h"
-#include "resumeparser.h"
#include "templateparser.h"
#include "templateheaderparser.h"
#include "courseparser.h"
#include "configuration.h"
#include "luaquerymapper.h"
+#include "luaresume.h"
+#include "luaoncommit.h"
#include "queryhandlerpentominos.h"
#include "queryhandlerpracro.h"
#include "xml_encode_decode.h"
#include "widgetgenerator.h"
#include "journal.h"
+#include "exception.h"
+
+class NotFoundException : public Exception {
+public:
+ NotFoundException(Request &r)
+ : Exception("Macro " + r.macro + " not found in template " + r.templ) {}
+};
+
static std::string error_box(std::string message)
{
std::string errorbox =
@@ -52,34 +61,45 @@ static std::string error_box(std::string message)
static std::string handleCommits(Transaction &transaction, Environment &env,
Session &session)
+ throw(LUAScript::Exception)
{
std::string answer;
- if(transaction.commits.size() > 0) {
-
- Commits::iterator i = transaction.commits.begin();
- while(i != transaction.commits.end()) {
- Commit &commit = *i;
-
- MacroParser mp(env.macrolist.getLatestVersion(commit.macro));
- mp.parse();
- Macro *macro = mp.getMacro();
-
- std::string resume = resume_parser(*macro, commit);
+ Commits::iterator i = transaction.commits.begin();
+ while(i != transaction.commits.end()) {
+ Commit &commit = *i;
+
+ MacroParser mp(env.macrolist.getLatestVersion(commit.macro));
+ mp.parse();
+ Macro *macro = mp.getMacro();
+
+ std::string resume;
+ try {
+ LUAResume luaresume(transaction, commit);
+ luaresume.addScripts(macro->resume_scripts);
+ luaresume.run();
+ resume = luaresume.resultString();
commit.fields["journal.resume"] = resume;
session.commitMacro(transaction, commit, *macro);
+ } catch(LUAScript::Exception &e) {
+ throw e;
+ }
- if(resume != "") {
-
- TemplateParser tp(env.templatelist.getLatestVersion(commit.templ));
- tp.parse();
- Template *templ = tp.getTemplate();
-
- session.journal()->addEntry(transaction, commit, resume, templ);
- }
+ LUAOnCommit *oncommit = NULL;
+ if(macro->commit_scripts.size() != 0) {
+ oncommit = new LUAOnCommit(transaction, commit);
+ oncommit->addScripts(macro->commit_scripts);
+ }
+
+ if(resume != "" || oncommit != NULL) {
+ TemplateParser tp(env.templatelist.getLatestVersion(commit.templ));
+ tp.parse();
+ Template *templ = tp.getTemplate();
- i++;
+ session.journal()->addEntry(transaction, commit, resume, templ, oncommit);
}
+
+ i++;
}
return answer;
@@ -87,6 +107,7 @@ static std::string handleCommits(Transaction &transaction, Environment &env,
static std::string handleRequest(Request &request, Environment &env,
Session &session)
+ throw(NotFoundException, Exception)
{
std::string answer;
@@ -244,7 +265,7 @@ static std::string handleRequest(Request &request, Environment &env,
answer +="\n-- END INCLUDE: '"+spi->attributes["src"]+"'\n";
}
} else {
- answer += xml_encode(spi->attributes["code"]);
+ answer += xml_encode(spi->code);
}
answer += "</script>\n";
spi++;
@@ -316,9 +337,9 @@ std::string handleTransaction(Request &request,
try {
answer += handleCommits(transaction, env, session);
- } catch( std::exception &e ) {
- ERR(server, "Commit error: %s\n", e.what());
- return error_box(xml_encode(e.what()));
+ } catch( LUAScript::Exception &e ) {
+ ERR(server, "Commit error: %s\n", e.msg.c_str());
+ return error_box(xml_encode(e.msg));
}
try {