From 1ea4fdf8072d6be99a13cc796c9775c05f8c9498 Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Sun, 13 Sep 2015 23:05:18 +0200 Subject: Add support for aliased EANs Some products are sold under different EANs (e.g. per-country EANs). The alias table can be used to map multiple EANs to a single product. --- src/web/web.vala | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) (limited to 'src/web') diff --git a/src/web/web.vala b/src/web/web.vala index a8ab59f..698e2c3 100644 --- a/src/web/web.vala +++ b/src/web/web.vala @@ -767,6 +767,87 @@ public class WebServer { } } + void handler_alias_list(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { + try { + var l = new WebSession(server, msg, path, query, client); + var t = new WebTemplate("aliases/index.html", l); + t.replace("TITLE", "KtT Shop System: Alias List"); + t.menu_set_active("aliases"); + + string table = ""; + foreach(var e in db.ean_alias_list()) { + var productname = db.get_product_name(e.real_ean); + table += @"$(e.ean)$(e.real_ean)$(productname)"; + } + + t.replace("DATA", table); + + if(l.superuser || l.auth_products) + t.replace("NEWALIAS", "block"); + else + t.replace("NEWALIAS", "none"); + + msg.set_response("text/html", Soup.MemoryUse.COPY, t.data); + } catch(TemplateError e) { + stderr.printf(e.message+"\n"); + handler_404(server, msg, path, query, client); + } catch(DatabaseError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } catch(IOError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } + } + + void handler_alias_new(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { + try { + var session = new WebSession(server, msg, path, query, client); + var template = new WebTemplate("aliases/new.html", session); + template.replace("TITLE", "KtT Shop System: New Alias"); + template.menu_set_active("aliases"); + + if(!session.superuser && !session.auth_products) { + handler_403(server, msg, path, query, client); + return; + } + + if(query != null && query.contains("ean") && query.contains("real_ean")) { + var ean = uint64.parse(query["ean"]); + var real_ean = uint64.parse(query["real_ean"]); + + if(ean > 0 && real_ean > 0) { + db.ean_alias_add(ean, real_ean); + template.replace("EAN", @"$ean"); + template.replace("REAL_EAN", @"$real_ean"); + template.replace("NEW.OK", "block"); + template.replace("NEW.FAIL", "none"); + } else { + template.replace("EAN", "virtual ean"); + template.replace("REAL_EAN", "real ean"); + template.replace("NEW.OK", "none"); + template.replace("NEW.FAIL", "block"); + } + } else { + template.replace("EAN", "virtual ean"); + template.replace("REAL_EAN", "real ean"); + template.replace("NEW.OK", "none"); + template.replace("NEW.FAIL", "block"); + } + + msg.set_response("text/html", Soup.MemoryUse.COPY, template.data); + } catch(TemplateError e) { + stderr.printf(e.message+"\n"); + handler_404(server, msg, path, query, client); + } catch(DatabaseError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } catch(IOError e) { + stderr.printf(e.message+"\n"); + handler_400(server, msg, path, query, client); + } + } + #if 0 void handler_stats(Soup.Server server, Soup.Message msg, string path, GLib.HashTable? query, Soup.ClientContext client) { try { @@ -1206,6 +1287,9 @@ public class WebServer { srv.add_handler("/products", handler_products); srv.add_handler("/products/new", handler_products_new); + srv.add_handler("/aliases", handler_alias_list); + srv.add_handler("/aliases/new", handler_alias_new); + #if 0 /* stats */ srv.add_handler("/stats", handler_stats); -- cgit v1.2.3